@nahisaho/musubix-workflow-engine 2.4.2

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 (69) hide show
  1. package/dist/application/PhaseController.d.ts +110 -0
  2. package/dist/application/PhaseController.d.ts.map +1 -0
  3. package/dist/application/PhaseController.js +272 -0
  4. package/dist/application/PhaseController.js.map +1 -0
  5. package/dist/application/QualityGateRunner.d.ts +97 -0
  6. package/dist/application/QualityGateRunner.d.ts.map +1 -0
  7. package/dist/application/QualityGateRunner.js +234 -0
  8. package/dist/application/QualityGateRunner.js.map +1 -0
  9. package/dist/application/StateTracker.d.ts +119 -0
  10. package/dist/application/StateTracker.d.ts.map +1 -0
  11. package/dist/application/StateTracker.js +192 -0
  12. package/dist/application/StateTracker.js.map +1 -0
  13. package/dist/application/index.d.ts +11 -0
  14. package/dist/application/index.d.ts.map +1 -0
  15. package/dist/application/index.js +11 -0
  16. package/dist/application/index.js.map +1 -0
  17. package/dist/domain/entities/Phase.d.ts +125 -0
  18. package/dist/domain/entities/Phase.d.ts.map +1 -0
  19. package/dist/domain/entities/Phase.js +146 -0
  20. package/dist/domain/entities/Phase.js.map +1 -0
  21. package/dist/domain/entities/QualityGate.d.ts +85 -0
  22. package/dist/domain/entities/QualityGate.d.ts.map +1 -0
  23. package/dist/domain/entities/QualityGate.js +117 -0
  24. package/dist/domain/entities/QualityGate.js.map +1 -0
  25. package/dist/domain/entities/Workflow.d.ts +90 -0
  26. package/dist/domain/entities/Workflow.d.ts.map +1 -0
  27. package/dist/domain/entities/Workflow.js +174 -0
  28. package/dist/domain/entities/Workflow.js.map +1 -0
  29. package/dist/domain/entities/index.d.ts +11 -0
  30. package/dist/domain/entities/index.d.ts.map +1 -0
  31. package/dist/domain/entities/index.js +11 -0
  32. package/dist/domain/entities/index.js.map +1 -0
  33. package/dist/domain/events/PhaseTransitioned.d.ts +37 -0
  34. package/dist/domain/events/PhaseTransitioned.d.ts.map +1 -0
  35. package/dist/domain/events/PhaseTransitioned.js +38 -0
  36. package/dist/domain/events/PhaseTransitioned.js.map +1 -0
  37. package/dist/domain/events/QualityGatePassed.d.ts +63 -0
  38. package/dist/domain/events/QualityGatePassed.d.ts.map +1 -0
  39. package/dist/domain/events/QualityGatePassed.js +68 -0
  40. package/dist/domain/events/QualityGatePassed.js.map +1 -0
  41. package/dist/domain/events/index.d.ts +13 -0
  42. package/dist/domain/events/index.d.ts.map +1 -0
  43. package/dist/domain/events/index.js +9 -0
  44. package/dist/domain/events/index.js.map +1 -0
  45. package/dist/domain/index.d.ts +11 -0
  46. package/dist/domain/index.d.ts.map +1 -0
  47. package/dist/domain/index.js +14 -0
  48. package/dist/domain/index.js.map +1 -0
  49. package/dist/domain/value-objects/ApprovalStatus.d.ts +69 -0
  50. package/dist/domain/value-objects/ApprovalStatus.d.ts.map +1 -0
  51. package/dist/domain/value-objects/ApprovalStatus.js +105 -0
  52. package/dist/domain/value-objects/ApprovalStatus.js.map +1 -0
  53. package/dist/domain/value-objects/PhaseType.d.ts +66 -0
  54. package/dist/domain/value-objects/PhaseType.d.ts.map +1 -0
  55. package/dist/domain/value-objects/PhaseType.js +105 -0
  56. package/dist/domain/value-objects/PhaseType.js.map +1 -0
  57. package/dist/domain/value-objects/TaskStatus.d.ts +59 -0
  58. package/dist/domain/value-objects/TaskStatus.d.ts.map +1 -0
  59. package/dist/domain/value-objects/TaskStatus.js +90 -0
  60. package/dist/domain/value-objects/TaskStatus.js.map +1 -0
  61. package/dist/domain/value-objects/index.d.ts +11 -0
  62. package/dist/domain/value-objects/index.d.ts.map +1 -0
  63. package/dist/domain/value-objects/index.js +11 -0
  64. package/dist/domain/value-objects/index.js.map +1 -0
  65. package/dist/index.d.ts +20 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +20 -0
  68. package/dist/index.js.map +1 -0
  69. package/package.json +57 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Phase Entity
3
+ *
4
+ * Represents a workflow phase with its state and artifacts
5
+ *
6
+ * @see REQ-ORCH-001 - Phase Transition
7
+ * @see DES-ORCH-001 - PhaseController
8
+ */
9
+ import { type PhaseType, type Approval } from '../value-objects/index.js';
10
+ /**
11
+ * Phase artifact types
12
+ */
13
+ export type ArtifactType = 'requirements' | 'design' | 'task-breakdown' | 'implementation' | 'test' | 'documentation';
14
+ /**
15
+ * Phase artifact
16
+ */
17
+ export interface PhaseArtifact {
18
+ readonly type: ArtifactType;
19
+ readonly path: string;
20
+ readonly content?: string;
21
+ readonly createdAt: Date;
22
+ readonly updatedAt: Date;
23
+ }
24
+ /**
25
+ * Review result
26
+ */
27
+ export interface ReviewResult {
28
+ readonly id: string;
29
+ readonly phase: PhaseType;
30
+ readonly checkpoints: ReviewCheckpoint[];
31
+ readonly overall: 'pass' | 'warning' | 'fail';
32
+ readonly timestamp: Date;
33
+ }
34
+ /**
35
+ * Review checkpoint
36
+ */
37
+ export interface ReviewCheckpoint {
38
+ readonly name: string;
39
+ readonly status: '✅' | '⚠️' | '❌';
40
+ readonly details: string;
41
+ }
42
+ /**
43
+ * Phase entity
44
+ */
45
+ export interface Phase {
46
+ readonly type: PhaseType;
47
+ readonly status: 'pending' | 'in-progress' | 'completed' | 'approved';
48
+ readonly artifacts: PhaseArtifact[];
49
+ readonly review?: ReviewResult;
50
+ readonly approval?: Approval;
51
+ readonly startedAt?: Date;
52
+ readonly completedAt?: Date;
53
+ }
54
+ /**
55
+ * Create a new phase
56
+ *
57
+ * @param type - Phase type
58
+ * @returns New phase entity
59
+ */
60
+ export declare function createPhase(type: PhaseType): Phase;
61
+ /**
62
+ * Start a phase
63
+ *
64
+ * @param phase - Phase to start
65
+ * @returns Updated phase
66
+ */
67
+ export declare function startPhase(phase: Phase): Phase;
68
+ /**
69
+ * Add artifact to phase
70
+ *
71
+ * @param phase - Phase to update
72
+ * @param artifact - Artifact to add
73
+ * @returns Updated phase
74
+ */
75
+ export declare function addArtifact(phase: Phase, artifact: PhaseArtifact): Phase;
76
+ /**
77
+ * Set review result
78
+ *
79
+ * @param phase - Phase to update
80
+ * @param review - Review result
81
+ * @returns Updated phase
82
+ */
83
+ export declare function setReview(phase: Phase, review: ReviewResult): Phase;
84
+ /**
85
+ * Approve phase
86
+ *
87
+ * @param phase - Phase to approve
88
+ * @param approver - Approver identifier
89
+ * @param comment - Optional comment
90
+ * @returns Updated phase
91
+ */
92
+ export declare function approvePhase(phase: Phase, approver: string, comment?: string): Phase;
93
+ /**
94
+ * Check if phase can transition to target
95
+ *
96
+ * @param phase - Current phase
97
+ * @param targetType - Target phase type
98
+ * @returns true if transition is allowed
99
+ */
100
+ export declare function canTransitionTo(phase: Phase, targetType: PhaseType): boolean;
101
+ /**
102
+ * Get phase display name
103
+ *
104
+ * @param phase - Phase entity
105
+ * @returns Display name
106
+ */
107
+ export declare function getPhaseDisplayName(phase: Phase): string;
108
+ /**
109
+ * Create artifact
110
+ *
111
+ * @param type - Artifact type
112
+ * @param path - File path
113
+ * @param content - Optional content
114
+ * @returns PhaseArtifact
115
+ */
116
+ export declare function createArtifact(type: ArtifactType, path: string, content?: string): PhaseArtifact;
117
+ /**
118
+ * Create review result
119
+ *
120
+ * @param phase - Phase type
121
+ * @param checkpoints - Review checkpoints
122
+ * @returns ReviewResult
123
+ */
124
+ export declare function createReviewResult(phase: PhaseType, checkpoints: ReviewCheckpoint[]): ReviewResult;
125
+ //# sourceMappingURL=Phase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Phase.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Phase.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,QAAQ,EAKd,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,QAAQ,GACR,gBAAgB,GAChB,gBAAgB,GAChB,MAAM,GACN,eAAe,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;IACtE,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,CAMlD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAS9C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,KAAK,CAKxE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,GAAG,KAAK,CAOnE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAiBpF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,GAAG,OAAO,CAQ5E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAExD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,GACf,aAAa,CASf;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,gBAAgB,EAAE,GAC9B,YAAY,CAWd"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Phase Entity
3
+ *
4
+ * Represents a workflow phase with its state and artifacts
5
+ *
6
+ * @see REQ-ORCH-001 - Phase Transition
7
+ * @see DES-ORCH-001 - PhaseController
8
+ */
9
+ import { getPhaseMetadata, isValidTransition, createApproval, generateApprovalId, } from '../value-objects/index.js';
10
+ /**
11
+ * Create a new phase
12
+ *
13
+ * @param type - Phase type
14
+ * @returns New phase entity
15
+ */
16
+ export function createPhase(type) {
17
+ return Object.freeze({
18
+ type,
19
+ status: 'pending',
20
+ artifacts: [],
21
+ });
22
+ }
23
+ /**
24
+ * Start a phase
25
+ *
26
+ * @param phase - Phase to start
27
+ * @returns Updated phase
28
+ */
29
+ export function startPhase(phase) {
30
+ if (phase.status !== 'pending') {
31
+ throw new Error(`Cannot start phase in status: ${phase.status}`);
32
+ }
33
+ return Object.freeze({
34
+ ...phase,
35
+ status: 'in-progress',
36
+ startedAt: new Date(),
37
+ });
38
+ }
39
+ /**
40
+ * Add artifact to phase
41
+ *
42
+ * @param phase - Phase to update
43
+ * @param artifact - Artifact to add
44
+ * @returns Updated phase
45
+ */
46
+ export function addArtifact(phase, artifact) {
47
+ return Object.freeze({
48
+ ...phase,
49
+ artifacts: [...phase.artifacts, artifact],
50
+ });
51
+ }
52
+ /**
53
+ * Set review result
54
+ *
55
+ * @param phase - Phase to update
56
+ * @param review - Review result
57
+ * @returns Updated phase
58
+ */
59
+ export function setReview(phase, review) {
60
+ return Object.freeze({
61
+ ...phase,
62
+ review,
63
+ status: review.overall === 'pass' ? 'completed' : 'in-progress',
64
+ completedAt: review.overall === 'pass' ? new Date() : undefined,
65
+ });
66
+ }
67
+ /**
68
+ * Approve phase
69
+ *
70
+ * @param phase - Phase to approve
71
+ * @param approver - Approver identifier
72
+ * @param comment - Optional comment
73
+ * @returns Updated phase
74
+ */
75
+ export function approvePhase(phase, approver, comment) {
76
+ if (phase.status !== 'completed') {
77
+ throw new Error(`Cannot approve phase in status: ${phase.status}`);
78
+ }
79
+ const approval = createApproval(generateApprovalId(phase.type), 'approved', approver, comment);
80
+ return Object.freeze({
81
+ ...phase,
82
+ status: 'approved',
83
+ approval,
84
+ });
85
+ }
86
+ /**
87
+ * Check if phase can transition to target
88
+ *
89
+ * @param phase - Current phase
90
+ * @param targetType - Target phase type
91
+ * @returns true if transition is allowed
92
+ */
93
+ export function canTransitionTo(phase, targetType) {
94
+ // Must be approved to transition
95
+ if (phase.status !== 'approved') {
96
+ return false;
97
+ }
98
+ // Check valid transition
99
+ return isValidTransition(phase.type, targetType);
100
+ }
101
+ /**
102
+ * Get phase display name
103
+ *
104
+ * @param phase - Phase entity
105
+ * @returns Display name
106
+ */
107
+ export function getPhaseDisplayName(phase) {
108
+ return getPhaseMetadata(phase.type).label;
109
+ }
110
+ /**
111
+ * Create artifact
112
+ *
113
+ * @param type - Artifact type
114
+ * @param path - File path
115
+ * @param content - Optional content
116
+ * @returns PhaseArtifact
117
+ */
118
+ export function createArtifact(type, path, content) {
119
+ const now = new Date();
120
+ return Object.freeze({
121
+ type,
122
+ path,
123
+ content,
124
+ createdAt: now,
125
+ updatedAt: now,
126
+ });
127
+ }
128
+ /**
129
+ * Create review result
130
+ *
131
+ * @param phase - Phase type
132
+ * @param checkpoints - Review checkpoints
133
+ * @returns ReviewResult
134
+ */
135
+ export function createReviewResult(phase, checkpoints) {
136
+ const hasFailure = checkpoints.some(c => c.status === '❌');
137
+ const hasWarning = checkpoints.some(c => c.status === '⚠️');
138
+ return Object.freeze({
139
+ id: `REV-${phase.toUpperCase()}-${Date.now().toString(36)}`,
140
+ phase,
141
+ checkpoints,
142
+ overall: hasFailure ? 'fail' : (hasWarning ? 'warning' : 'pass'),
143
+ timestamp: new Date(),
144
+ });
145
+ }
146
+ //# sourceMappingURL=Phase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Phase.js","sourceRoot":"","sources":["../../../src/domain/entities/Phase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * QualityGate Entity
3
+ *
4
+ * Represents a quality gate that must pass before phase transition
5
+ *
6
+ * @see REQ-ORCH-003 - Quality Gate Integration
7
+ * @see DES-ORCH-003 - QualityGateRunner
8
+ */
9
+ import type { PhaseType } from '../value-objects/index.js';
10
+ /**
11
+ * Quality gate check function type
12
+ */
13
+ export type QualityCheckFn = () => Promise<QualityCheckResult>;
14
+ /**
15
+ * Quality check result
16
+ */
17
+ export interface QualityCheckResult {
18
+ readonly passed: boolean;
19
+ readonly message: string;
20
+ readonly details?: string;
21
+ readonly severity: 'error' | 'warning' | 'info';
22
+ }
23
+ /**
24
+ * Quality gate definition
25
+ */
26
+ export interface QualityGate {
27
+ readonly id: string;
28
+ readonly name: string;
29
+ readonly phase: PhaseType;
30
+ readonly description: string;
31
+ readonly mandatory: boolean;
32
+ readonly check: QualityCheckFn;
33
+ }
34
+ /**
35
+ * Quality gate execution result
36
+ */
37
+ export interface QualityGateResult {
38
+ readonly gateId: string;
39
+ readonly gateName: string;
40
+ readonly results: QualityCheckResult[];
41
+ readonly passed: boolean;
42
+ readonly executedAt: Date;
43
+ readonly duration: number;
44
+ }
45
+ /**
46
+ * Create a quality gate
47
+ *
48
+ * @param params - Gate parameters
49
+ * @returns QualityGate
50
+ */
51
+ export declare function createQualityGate(params: {
52
+ id: string;
53
+ name: string;
54
+ phase: PhaseType;
55
+ description: string;
56
+ mandatory?: boolean;
57
+ check: QualityCheckFn;
58
+ }): QualityGate;
59
+ /**
60
+ * Execute a quality gate
61
+ *
62
+ * @param gate - Quality gate to execute
63
+ * @returns Execution result
64
+ */
65
+ export declare function executeQualityGate(gate: QualityGate): Promise<QualityGateResult>;
66
+ /**
67
+ * Aggregate quality gate results
68
+ *
69
+ * @param results - Array of gate results
70
+ * @returns Aggregated status
71
+ */
72
+ export declare function aggregateGateResults(results: QualityGateResult[]): {
73
+ allPassed: boolean;
74
+ mandatoryPassed: boolean;
75
+ summary: string;
76
+ };
77
+ export declare const PHASE_QUALITY_GATES: ReadonlyMap<PhaseType, readonly string[]>;
78
+ /**
79
+ * Get quality gate checks for a phase
80
+ *
81
+ * @param phase - Phase type
82
+ * @returns Gate check names
83
+ */
84
+ export declare function getPhaseGateChecks(phase: PhaseType): readonly string[];
85
+ //# sourceMappingURL=QualityGate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QualityGate.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/QualityGate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;CACvB,GAAG,WAAW,CASd;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgCtF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG;IAClE,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB,CAaA;AAGD,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CA0BxE,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,MAAM,EAAE,CAEtE"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * QualityGate Entity
3
+ *
4
+ * Represents a quality gate that must pass before phase transition
5
+ *
6
+ * @see REQ-ORCH-003 - Quality Gate Integration
7
+ * @see DES-ORCH-003 - QualityGateRunner
8
+ */
9
+ /**
10
+ * Create a quality gate
11
+ *
12
+ * @param params - Gate parameters
13
+ * @returns QualityGate
14
+ */
15
+ export function createQualityGate(params) {
16
+ return Object.freeze({
17
+ id: params.id,
18
+ name: params.name,
19
+ phase: params.phase,
20
+ description: params.description,
21
+ mandatory: params.mandatory ?? true,
22
+ check: params.check,
23
+ });
24
+ }
25
+ /**
26
+ * Execute a quality gate
27
+ *
28
+ * @param gate - Quality gate to execute
29
+ * @returns Execution result
30
+ */
31
+ export async function executeQualityGate(gate) {
32
+ const startTime = Date.now();
33
+ try {
34
+ const result = await gate.check();
35
+ const duration = Date.now() - startTime;
36
+ return Object.freeze({
37
+ gateId: gate.id,
38
+ gateName: gate.name,
39
+ results: [result],
40
+ passed: result.passed,
41
+ executedAt: new Date(),
42
+ duration,
43
+ });
44
+ }
45
+ catch (error) {
46
+ const duration = Date.now() - startTime;
47
+ const errorMessage = error instanceof Error ? error.message : String(error);
48
+ return Object.freeze({
49
+ gateId: gate.id,
50
+ gateName: gate.name,
51
+ results: [{
52
+ passed: false,
53
+ message: `Gate execution failed: ${errorMessage}`,
54
+ severity: 'error',
55
+ }],
56
+ passed: false,
57
+ executedAt: new Date(),
58
+ duration,
59
+ });
60
+ }
61
+ }
62
+ /**
63
+ * Aggregate quality gate results
64
+ *
65
+ * @param results - Array of gate results
66
+ * @returns Aggregated status
67
+ */
68
+ export function aggregateGateResults(results) {
69
+ const mandatoryResults = results; // All results are from mandatory gates
70
+ const allPassed = results.every(r => r.passed);
71
+ const mandatoryPassed = mandatoryResults.every(r => r.passed);
72
+ const passedCount = results.filter(r => r.passed).length;
73
+ const summary = `${passedCount}/${results.length} gates passed`;
74
+ return {
75
+ allPassed,
76
+ mandatoryPassed,
77
+ summary,
78
+ };
79
+ }
80
+ // Pre-defined quality gates for each phase
81
+ export const PHASE_QUALITY_GATES = new Map([
82
+ ['requirements', [
83
+ 'EARS形式の検証',
84
+ '優先度設定の確認',
85
+ '既存要件との整合性',
86
+ ]],
87
+ ['design', [
88
+ 'トレーサビリティ (REQ → DES)',
89
+ '型整合性',
90
+ '設計パターン適用',
91
+ ]],
92
+ ['task-breakdown', [
93
+ 'トレーサビリティ (DES → TSK)',
94
+ 'タスクサイズの適切性',
95
+ '依存関係の妥当性',
96
+ ]],
97
+ ['implementation', [
98
+ 'ユニットテスト合格',
99
+ '型チェック合格',
100
+ 'リントエラーなし',
101
+ ]],
102
+ ['completion', [
103
+ 'CHANGELOG更新',
104
+ 'ドキュメント更新',
105
+ 'コミット準備完了',
106
+ ]],
107
+ ]);
108
+ /**
109
+ * Get quality gate checks for a phase
110
+ *
111
+ * @param phase - Phase type
112
+ * @returns Gate check names
113
+ */
114
+ export function getPhaseGateChecks(phase) {
115
+ return PHASE_QUALITY_GATES.get(phase) ?? [];
116
+ }
117
+ //# sourceMappingURL=QualityGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QualityGate.js","sourceRoot":"","sources":["../../../src/domain/entities/QualityGate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2CH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAOjC;IACC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;QACnC,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAiB;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,IAAI,EAAE;YACtB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5E,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,OAAO,EAAE,CAAC;oBACR,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE,0BAA0B,YAAY,EAAE;oBACjD,QAAQ,EAAE,OAAgB;iBAC3B,CAAC;YACF,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,IAAI,IAAI,EAAE;YACtB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA4B;IAK/D,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,uCAAuC;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACzD,MAAM,OAAO,GAAG,GAAG,WAAW,IAAI,OAAO,CAAC,MAAM,eAAe,CAAC;IAEhE,OAAO;QACL,SAAS;QACT,eAAe;QACf,OAAO;KACR,CAAC;AACJ,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAA8C,IAAI,GAAG,CAAC;IACpF,CAAC,cAAc,EAAE;YACf,WAAW;YACX,UAAU;YACV,WAAW;SACZ,CAAC;IACF,CAAC,QAAQ,EAAE;YACT,sBAAsB;YACtB,MAAM;YACN,UAAU;SACX,CAAC;IACF,CAAC,gBAAgB,EAAE;YACjB,sBAAsB;YACtB,YAAY;YACZ,UAAU;SACX,CAAC;IACF,CAAC,gBAAgB,EAAE;YACjB,WAAW;YACX,SAAS;YACT,UAAU;SACX,CAAC;IACF,CAAC,YAAY,EAAE;YACb,aAAa;YACb,UAAU;YACV,UAAU;SACX,CAAC;CACH,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IACjD,OAAO,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Workflow Entity
3
+ *
4
+ * Represents the complete workflow state
5
+ *
6
+ * @see REQ-ORCH-001 - Phase Transition
7
+ * @see REQ-ORCH-002 - State Tracking
8
+ */
9
+ import type { PhaseType } from '../value-objects/index.js';
10
+ import { type Phase } from './Phase.js';
11
+ /**
12
+ * Workflow status
13
+ */
14
+ export type WorkflowStatus = 'not-started' | 'in-progress' | 'completed' | 'failed';
15
+ /**
16
+ * Workflow entity
17
+ */
18
+ export interface Workflow {
19
+ readonly id: string;
20
+ readonly name: string;
21
+ readonly description?: string;
22
+ readonly status: WorkflowStatus;
23
+ readonly currentPhase: PhaseType | null;
24
+ readonly phases: ReadonlyMap<PhaseType, Phase>;
25
+ readonly createdAt: Date;
26
+ readonly updatedAt: Date;
27
+ readonly completedAt?: Date;
28
+ }
29
+ /**
30
+ * Create a new workflow
31
+ *
32
+ * @param id - Workflow ID
33
+ * @param name - Workflow name
34
+ * @param description - Optional description
35
+ * @returns New workflow
36
+ */
37
+ export declare function createWorkflow(id: string, name: string, description?: string): Workflow;
38
+ /**
39
+ * Start workflow (begins with requirements phase)
40
+ *
41
+ * @param workflow - Workflow to start
42
+ * @returns Updated workflow
43
+ */
44
+ export declare function startWorkflow(workflow: Workflow): Workflow;
45
+ /**
46
+ * Update phase in workflow
47
+ *
48
+ * @param workflow - Workflow to update
49
+ * @param phase - Updated phase
50
+ * @returns Updated workflow
51
+ */
52
+ export declare function updatePhase(workflow: Workflow, phase: Phase): Workflow;
53
+ /**
54
+ * Transition to next phase
55
+ *
56
+ * @param workflow - Current workflow
57
+ * @param targetPhase - Target phase
58
+ * @returns Updated workflow
59
+ * @throws Error if transition is invalid
60
+ */
61
+ export declare function transitionToPhase(workflow: Workflow, targetPhase: PhaseType): Workflow;
62
+ /**
63
+ * Get current phase entity
64
+ *
65
+ * @param workflow - Workflow
66
+ * @returns Current phase or null
67
+ */
68
+ export declare function getCurrentPhase(workflow: Workflow): Phase | null;
69
+ /**
70
+ * Get workflow progress percentage
71
+ *
72
+ * @param workflow - Workflow
73
+ * @returns Progress 0-100
74
+ */
75
+ export declare function getWorkflowProgress(workflow: Workflow): number;
76
+ /**
77
+ * Generate workflow ID
78
+ *
79
+ * @param name - Workflow name (optional)
80
+ * @returns Workflow ID
81
+ */
82
+ export declare function generateWorkflowId(name?: string): string;
83
+ /**
84
+ * Check if workflow can proceed to implementation
85
+ *
86
+ * @param workflow - Workflow to check
87
+ * @returns true if can proceed
88
+ */
89
+ export declare function canProceedToImplementation(workflow: Workflow): boolean;
90
+ //# sourceMappingURL=Workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Workflow.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,KAAK,KAAK,EAIX,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,QAAQ,CAmBV;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAsB1D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,CAStE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,GAAG,QAAQ,CA+CtF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI,CAKhE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAW9D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAItE"}