@s_s/harmonia 1.2.0 → 1.4.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/README.md +140 -392
- package/build/cli/setup.d.ts +4 -2
- package/build/cli/setup.js +44 -18
- package/build/cli/setup.js.map +1 -1
- package/build/core/action-registry.d.ts +36 -0
- package/build/core/action-registry.js +53 -0
- package/build/core/action-registry.js.map +1 -0
- package/build/core/artifacts.d.ts +66 -0
- package/build/core/artifacts.js +178 -0
- package/build/core/artifacts.js.map +1 -0
- package/build/core/dispatch.d.ts +18 -11
- package/build/core/dispatch.js +43 -33
- package/build/core/dispatch.js.map +1 -1
- package/build/core/issues.d.ts +37 -0
- package/build/core/issues.js +100 -0
- package/build/core/issues.js.map +1 -0
- package/build/core/overrides.d.ts +19 -26
- package/build/core/overrides.js +32 -98
- package/build/core/overrides.js.map +1 -1
- package/build/core/plugin.d.ts +86 -0
- package/build/core/plugin.js +332 -0
- package/build/core/plugin.js.map +1 -0
- package/build/core/registry.d.ts +36 -3
- package/build/core/registry.js +63 -5
- package/build/core/registry.js.map +1 -1
- package/build/core/reviews.d.ts +13 -13
- package/build/core/reviews.js +31 -32
- package/build/core/reviews.js.map +1 -1
- package/build/core/schema.d.ts +43 -15
- package/build/core/schema.js +124 -20
- package/build/core/schema.js.map +1 -1
- package/build/core/state.d.ts +29 -22
- package/build/core/state.js +49 -81
- package/build/core/state.js.map +1 -1
- package/build/core/steps.d.ts +15 -15
- package/build/core/steps.js +32 -33
- package/build/core/steps.js.map +1 -1
- package/build/core/tree-utils.d.ts +52 -0
- package/build/core/tree-utils.js +226 -0
- package/build/core/tree-utils.js.map +1 -0
- package/build/core/types.d.ts +417 -117
- package/build/core/types.js +15 -1
- package/build/core/types.js.map +1 -1
- package/build/core/workflow-engine.d.ts +68 -0
- package/build/core/workflow-engine.js +821 -0
- package/build/core/workflow-engine.js.map +1 -0
- package/build/core/workflow-validator.d.ts +22 -0
- package/build/core/workflow-validator.js +489 -0
- package/build/core/workflow-validator.js.map +1 -0
- package/build/index.js +28 -25
- package/build/index.js.map +1 -1
- package/build/setup/inject.d.ts +4 -4
- package/build/setup/inject.js +6 -6
- package/build/setup/inject.js.map +1 -1
- package/build/setup/templates.d.ts +9 -7
- package/build/setup/templates.js +68 -103
- package/build/setup/templates.js.map +1 -1
- package/build/tools/artifact-approve.d.ts +8 -0
- package/build/tools/artifact-approve.js +94 -0
- package/build/tools/artifact-approve.js.map +1 -0
- package/build/tools/artifact-schema.d.ts +12 -0
- package/build/tools/artifact-schema.js +148 -0
- package/build/tools/artifact-schema.js.map +1 -0
- package/build/tools/artifact-tools.d.ts +18 -0
- package/build/tools/artifact-tools.js +465 -0
- package/build/tools/artifact-tools.js.map +1 -0
- package/build/tools/{report-dispatch.d.ts → dispatch-report.d.ts} +7 -3
- package/build/tools/dispatch-report.js +261 -0
- package/build/tools/dispatch-report.js.map +1 -0
- package/build/tools/engine-helpers.d.ts +41 -0
- package/build/tools/engine-helpers.js +182 -0
- package/build/tools/engine-helpers.js.map +1 -0
- package/build/tools/get-project-status.d.ts +6 -4
- package/build/tools/get-project-status.js +308 -246
- package/build/tools/get-project-status.js.map +1 -1
- package/build/tools/get-role-prompt.d.ts +1 -1
- package/build/tools/get-role-prompt.js +7 -41
- package/build/tools/get-role-prompt.js.map +1 -1
- package/build/tools/issue-tools.d.ts +10 -0
- package/build/tools/issue-tools.js +169 -0
- package/build/tools/issue-tools.js.map +1 -0
- package/build/tools/iteration-start.d.ts +7 -4
- package/build/tools/iteration-start.js +51 -20
- package/build/tools/iteration-start.js.map +1 -1
- package/build/tools/loop-done.d.ts +11 -0
- package/build/tools/loop-done.js +109 -0
- package/build/tools/loop-done.js.map +1 -0
- package/build/tools/patch-start.d.ts +16 -0
- package/build/tools/patch-start.js +122 -0
- package/build/tools/patch-start.js.map +1 -0
- package/build/tools/project-init.d.ts +5 -5
- package/build/tools/project-init.js +47 -18
- package/build/tools/project-init.js.map +1 -1
- package/build/tools/role-dispatch.d.ts +55 -0
- package/build/tools/role-dispatch.js +508 -0
- package/build/tools/role-dispatch.js.map +1 -0
- package/build/tools/utils.d.ts +40 -0
- package/build/tools/utils.js +97 -0
- package/build/tools/utils.js.map +1 -0
- package/package.json +1 -1
- package/{build/hooks/claude-code.js → workflows/dev/hooks/claude.js} +34 -23
- package/{build → workflows/dev}/hooks/content.js +27 -18
- package/workflows/dev/hooks/index.js +52 -0
- package/{build → workflows/dev}/hooks/openclaw.js +31 -20
- package/{build → workflows/dev}/hooks/opencode.js +31 -20
- package/workflows/dev/roles/architect.md +68 -28
- package/workflows/dev/roles/coordinator.md +103 -0
- package/workflows/dev/roles/developer.md +5 -5
- package/workflows/dev/roles/tester.md +19 -19
- package/workflows/dev/schemas/api-contract.json +42 -0
- package/workflows/dev/schemas/api-design.json +30 -13
- package/workflows/dev/schemas/data-model.json +20 -7
- package/workflows/dev/schemas/prd.completeness-check.json +6 -5
- package/workflows/dev/schemas/prd.draft.json +13 -5
- package/workflows/dev/schemas/prd.final.json +34 -11
- package/workflows/dev/schemas/prd.json +29 -11
- package/workflows/dev/schemas/prd.requirements.json +6 -5
- package/workflows/dev/schemas/prototype.json +6 -2
- package/workflows/dev/schemas/task-breakdown.coarse.json +4 -3
- package/workflows/dev/schemas/task-breakdown.dependencies.json +5 -4
- package/workflows/dev/schemas/task-breakdown.detailed.json +8 -3
- package/workflows/dev/schemas/task-breakdown.final.json +8 -3
- package/workflows/dev/schemas/task-breakdown.json +8 -3
- package/workflows/dev/schemas/tech-design.analysis.json +6 -5
- package/workflows/dev/schemas/tech-design.draft.json +14 -5
- package/workflows/dev/schemas/tech-design.final.json +39 -13
- package/workflows/dev/schemas/tech-design.json +34 -13
- package/workflows/dev/schemas/tech-design.research.json +21 -0
- package/workflows/dev/schemas/test-plan.json +17 -7
- package/workflows/dev/schemas/test-report.json +26 -9
- package/workflows/dev/schemas/user-stories.json +7 -3
- package/workflows/dev/tools/index.js +23 -0
- package/workflows/dev/workflow.json +234 -101
- package/build/core/docs.d.ts +0 -32
- package/build/core/docs.js +0 -91
- package/build/core/docs.js.map +0 -1
- package/build/core/workflow.d.ts +0 -33
- package/build/core/workflow.js +0 -140
- package/build/core/workflow.js.map +0 -1
- package/build/hooks/claude-code.d.ts +0 -20
- package/build/hooks/claude-code.js.map +0 -1
- package/build/hooks/content.d.ts +0 -43
- package/build/hooks/content.js.map +0 -1
- package/build/hooks/install.d.ts +0 -40
- package/build/hooks/install.js +0 -63
- package/build/hooks/install.js.map +0 -1
- package/build/hooks/openclaw.d.ts +0 -24
- package/build/hooks/openclaw.js.map +0 -1
- package/build/hooks/opencode.d.ts +0 -29
- package/build/hooks/opencode.js.map +0 -1
- package/build/tools/approve-doc.d.ts +0 -6
- package/build/tools/approve-doc.js +0 -108
- package/build/tools/approve-doc.js.map +0 -1
- package/build/tools/dispatch-role.d.ts +0 -16
- package/build/tools/dispatch-role.js +0 -277
- package/build/tools/dispatch-role.js.map +0 -1
- package/build/tools/doc-tools.d.ts +0 -16
- package/build/tools/doc-tools.js +0 -389
- package/build/tools/doc-tools.js.map +0 -1
- package/build/tools/override-tools.d.ts +0 -6
- package/build/tools/override-tools.js +0 -129
- package/build/tools/override-tools.js.map +0 -1
- package/build/tools/report-dispatch.js +0 -194
- package/build/tools/report-dispatch.js.map +0 -1
- package/build/tools/set-scale.d.ts +0 -6
- package/build/tools/set-scale.js +0 -107
- package/build/tools/set-scale.js.map +0 -1
- package/build/tools/setup-project.d.ts +0 -8
- package/build/tools/setup-project.js +0 -116
- package/build/tools/setup-project.js.map +0 -1
- package/build/tools/update-phase.d.ts +0 -12
- package/build/tools/update-phase.js +0 -159
- package/build/tools/update-phase.js.map +0 -1
- package/workflows/dev/roles/pm.md +0 -99
- package/workflows/dev/schemas/deploy.json +0 -20
- package/workflows/dev/schemas/fsd.json +0 -25
- package/workflows/dev/schemas/project-plan.json +0 -20
- package/workflows/dev/schemas/retrospective.json +0 -20
- package/workflows/dev/schemas/risk-assessment.json +0 -15
- package/workflows/dev/schemas/tech-design.api-contract.json +0 -20
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-engine.js","sourceRoot":"","sources":["../../src/core/workflow-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static workflow definition validator.
|
|
3
|
+
*
|
|
4
|
+
* Runs at load time to validate the structural integrity of a WorkflowDefinition.
|
|
5
|
+
* Checks:
|
|
6
|
+
* 1. ID uniqueness across tree + floating nodes
|
|
7
|
+
* 2. Goto target legality (exists + reachable in execution order)
|
|
8
|
+
* 3. Cycle detection (no exit-less loops; maxRetries = ok, bubbleFailure or onExhausted provides exit)
|
|
9
|
+
* 4. failStrategy required for parallel nodes
|
|
10
|
+
* 5. Floating node reference validity (onExhausted targets exist in floatingNodes)
|
|
11
|
+
* 6. Role reference validity (task.role must exist in provided roles set)
|
|
12
|
+
* 7. Coordinator validity (definition.coordinator must exist in roles)
|
|
13
|
+
*/
|
|
14
|
+
import type { WorkflowDefinition, ValidationError, ArtifactDefinition } from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Validate a workflow definition.
|
|
17
|
+
*
|
|
18
|
+
* @param definition - The workflow definition to validate
|
|
19
|
+
* @param availableRoles - Set of role IDs available in the role registry
|
|
20
|
+
* @returns Array of validation errors (empty = valid)
|
|
21
|
+
*/
|
|
22
|
+
export declare function validateWorkflow(definition: WorkflowDefinition, availableRoles: Set<string>, artifactDefinitions?: Record<string, ArtifactDefinition>): ValidationError[];
|
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static workflow definition validator.
|
|
3
|
+
*
|
|
4
|
+
* Runs at load time to validate the structural integrity of a WorkflowDefinition.
|
|
5
|
+
* Checks:
|
|
6
|
+
* 1. ID uniqueness across tree + floating nodes
|
|
7
|
+
* 2. Goto target legality (exists + reachable in execution order)
|
|
8
|
+
* 3. Cycle detection (no exit-less loops; maxRetries = ok, bubbleFailure or onExhausted provides exit)
|
|
9
|
+
* 4. failStrategy required for parallel nodes
|
|
10
|
+
* 5. Floating node reference validity (onExhausted targets exist in floatingNodes)
|
|
11
|
+
* 6. Role reference validity (task.role must exist in provided roles set)
|
|
12
|
+
* 7. Coordinator validity (definition.coordinator must exist in roles)
|
|
13
|
+
*/
|
|
14
|
+
// ─── Utility: collect reachable IDs (loop-opaque) ───
|
|
15
|
+
/**
|
|
16
|
+
* Like collectSubtreeIds, but treats loop nodes as opaque — only collects the
|
|
17
|
+
* loop's own ID without entering its body. This prevents external nodes from
|
|
18
|
+
* being able to goto into loop body internals, which would bypass loop state
|
|
19
|
+
* initialization.
|
|
20
|
+
*/
|
|
21
|
+
function collectReachableIds(node, ids) {
|
|
22
|
+
ids.add(node.id);
|
|
23
|
+
switch (node.type) {
|
|
24
|
+
case 'sequence':
|
|
25
|
+
case 'parallel':
|
|
26
|
+
for (const child of node.children) {
|
|
27
|
+
collectReachableIds(child, ids);
|
|
28
|
+
}
|
|
29
|
+
break;
|
|
30
|
+
case 'gate':
|
|
31
|
+
collectReachableIds(node.pass, ids);
|
|
32
|
+
if ('type' in node.fail) {
|
|
33
|
+
collectReachableIds(node.fail, ids);
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
case 'loop':
|
|
37
|
+
// Intentionally do NOT recurse into node.body.
|
|
38
|
+
// Loop body is an internal implementation detail; external nodes
|
|
39
|
+
// should goto the loop node itself to re-enter the loop.
|
|
40
|
+
break;
|
|
41
|
+
case 'task':
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// ─── Utility: check if subtree contains at least one task node ───
|
|
46
|
+
/**
|
|
47
|
+
* Recursively checks whether the given node subtree contains at least one task node.
|
|
48
|
+
* Used to validate that loop bodies are not empty/synchronous-only, which would cause
|
|
49
|
+
* stack overflow via synchronous recursive iteration.
|
|
50
|
+
*
|
|
51
|
+
* Known edge case (accepted as 80/20 fix): if a gate node's pass branch has no task
|
|
52
|
+
* but its fail branch has a task (or is a GotoTarget), this function returns true
|
|
53
|
+
* (any branch having a task suffices). At runtime, if the gate condition is persistently
|
|
54
|
+
* true and the pass branch synchronously completes every iteration, a stack overflow
|
|
55
|
+
* is still theoretically possible. This scenario is considered extreme and rare enough
|
|
56
|
+
* that the current "any branch has task" logic is acceptable.
|
|
57
|
+
*/
|
|
58
|
+
function containsTaskNode(node) {
|
|
59
|
+
switch (node.type) {
|
|
60
|
+
case 'task':
|
|
61
|
+
return true;
|
|
62
|
+
case 'sequence':
|
|
63
|
+
case 'parallel':
|
|
64
|
+
return node.children.some((child) => containsTaskNode(child));
|
|
65
|
+
case 'gate': {
|
|
66
|
+
if (containsTaskNode(node.pass))
|
|
67
|
+
return true;
|
|
68
|
+
if ('type' in node.fail) {
|
|
69
|
+
return containsTaskNode(node.fail);
|
|
70
|
+
}
|
|
71
|
+
// fail is GotoTarget — goto itself interrupts synchronous recursion
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
case 'loop':
|
|
75
|
+
return containsTaskNode(node.body);
|
|
76
|
+
default:
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// ─── Main Validator ───
|
|
81
|
+
/**
|
|
82
|
+
* Validate a workflow definition.
|
|
83
|
+
*
|
|
84
|
+
* @param definition - The workflow definition to validate
|
|
85
|
+
* @param availableRoles - Set of role IDs available in the role registry
|
|
86
|
+
* @returns Array of validation errors (empty = valid)
|
|
87
|
+
*/
|
|
88
|
+
export function validateWorkflow(definition, availableRoles, artifactDefinitions = {}) {
|
|
89
|
+
const errors = [];
|
|
90
|
+
const allIds = new Map(); // id → location description
|
|
91
|
+
const floatingNodeIds = new Set();
|
|
92
|
+
const gotoEdges = [];
|
|
93
|
+
// Collect floating node IDs
|
|
94
|
+
if (definition.floatingNodes) {
|
|
95
|
+
for (const fn of definition.floatingNodes) {
|
|
96
|
+
floatingNodeIds.add(fn.id);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// ── 1. Collect all IDs and check uniqueness + failStrategy ──
|
|
100
|
+
collectAndValidateIds(definition.root, [], allIds, errors);
|
|
101
|
+
if (definition.floatingNodes) {
|
|
102
|
+
for (const fn of definition.floatingNodes) {
|
|
103
|
+
if (allIds.has(fn.id)) {
|
|
104
|
+
errors.push({
|
|
105
|
+
type: 'duplicate_id',
|
|
106
|
+
message: `Duplicate node ID "${fn.id}" — found in floating nodes and also at ${allIds.get(fn.id)}`,
|
|
107
|
+
nodeId: fn.id,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
allIds.set(fn.id, 'floatingNodes');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// ── 2. Validate goto targets + collect edges for cycle detection ──
|
|
116
|
+
validateGotoTargets(definition.root, [], new Set(), allIds, floatingNodeIds, errors, gotoEdges);
|
|
117
|
+
if (definition.floatingNodes) {
|
|
118
|
+
for (const fn of definition.floatingNodes) {
|
|
119
|
+
if (fn.onFailed) {
|
|
120
|
+
validateFailureHandler(fn.onFailed, fn.id, allIds, floatingNodeIds, [], new Set(), errors, gotoEdges, true);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// ── 3. Cycle detection ──
|
|
125
|
+
detectCycles(gotoEdges, errors);
|
|
126
|
+
// ── 4-5. (done inline during traversals above) ──
|
|
127
|
+
// ── 6. Role reference check ──
|
|
128
|
+
validateRoleReferences(definition.root, availableRoles, errors);
|
|
129
|
+
if (definition.floatingNodes) {
|
|
130
|
+
for (const fn of definition.floatingNodes) {
|
|
131
|
+
if (!availableRoles.has(fn.role)) {
|
|
132
|
+
errors.push({
|
|
133
|
+
type: 'invalid_role_ref',
|
|
134
|
+
message: `Floating node "${fn.id}" references role "${fn.role}" which is not in the role registry`,
|
|
135
|
+
nodeId: fn.id,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// ── 7. Coordinator check ──
|
|
141
|
+
if (!availableRoles.has(definition.coordinator)) {
|
|
142
|
+
errors.push({
|
|
143
|
+
type: 'invalid_coordinator',
|
|
144
|
+
message: `Coordinator role "${definition.coordinator}" is not in the role registry`,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// ── 8. Artifact definition validation ──
|
|
148
|
+
validateArtifactDefinitions(artifactDefinitions, errors);
|
|
149
|
+
// ── 9. inputArtifacts reference validation ──
|
|
150
|
+
validateInputArtifactReferences(definition.root, artifactDefinitions, errors);
|
|
151
|
+
if (definition.floatingNodes) {
|
|
152
|
+
for (const fn of definition.floatingNodes) {
|
|
153
|
+
validateTaskInputArtifacts(fn, artifactDefinitions, errors);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return errors;
|
|
157
|
+
}
|
|
158
|
+
// ─── ID Collection & Uniqueness ───
|
|
159
|
+
function collectAndValidateIds(node, ancestorIds, allIds, errors) {
|
|
160
|
+
const location = ancestorIds.length > 0 ? `under ${ancestorIds[ancestorIds.length - 1]}` : 'root';
|
|
161
|
+
if (allIds.has(node.id)) {
|
|
162
|
+
errors.push({
|
|
163
|
+
type: 'duplicate_id',
|
|
164
|
+
message: `Duplicate node ID "${node.id}" — found at ${location} and also at ${allIds.get(node.id)}`,
|
|
165
|
+
nodeId: node.id,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
allIds.set(node.id, location);
|
|
170
|
+
}
|
|
171
|
+
// Check failStrategy for parallel nodes
|
|
172
|
+
if (node.type === 'parallel' && !node.failStrategy) {
|
|
173
|
+
errors.push({
|
|
174
|
+
type: 'missing_fail_strategy',
|
|
175
|
+
message: `Parallel node "${node.id}" must have a failStrategy ("fail-fast" or "wait-all")`,
|
|
176
|
+
nodeId: node.id,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
const childAncestors = [...ancestorIds, node.id];
|
|
180
|
+
switch (node.type) {
|
|
181
|
+
case 'sequence':
|
|
182
|
+
case 'parallel':
|
|
183
|
+
for (const child of node.children) {
|
|
184
|
+
collectAndValidateIds(child, childAncestors, allIds, errors);
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
case 'gate':
|
|
188
|
+
collectAndValidateIds(node.pass, childAncestors, allIds, errors);
|
|
189
|
+
if ('type' in node.fail) {
|
|
190
|
+
collectAndValidateIds(node.fail, childAncestors, allIds, errors);
|
|
191
|
+
}
|
|
192
|
+
break;
|
|
193
|
+
case 'loop':
|
|
194
|
+
validateLoopNode(node, errors);
|
|
195
|
+
collectAndValidateIds(node.body, childAncestors, allIds, errors);
|
|
196
|
+
break;
|
|
197
|
+
case 'task':
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// ─── Goto Target Validation ───
|
|
202
|
+
/**
|
|
203
|
+
* Validate goto targets throughout the tree.
|
|
204
|
+
*
|
|
205
|
+
* `reachableIds` tracks all node IDs that are "before" the current node in execution
|
|
206
|
+
* order — ancestors + preceding siblings and their entire subtrees. A goto target
|
|
207
|
+
* must be one of these reachable IDs (or self for task nodes).
|
|
208
|
+
*/
|
|
209
|
+
function validateGotoTargets(node, ancestorIds, reachableIds, allIds, floatingNodeIds, errors, gotoEdges) {
|
|
210
|
+
const childAncestors = [...ancestorIds, node.id];
|
|
211
|
+
// reachableIds for this node = ancestors + preceding siblings' subtrees
|
|
212
|
+
// (passed in from parent)
|
|
213
|
+
switch (node.type) {
|
|
214
|
+
case 'task': {
|
|
215
|
+
if (node.onFailed) {
|
|
216
|
+
validateFailureHandler(node.onFailed, node.id, allIds, floatingNodeIds, ancestorIds, reachableIds, errors, gotoEdges, true);
|
|
217
|
+
}
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
case 'sequence': {
|
|
221
|
+
// For sequence children, preceding siblings + their subtrees are reachable
|
|
222
|
+
const accumulated = new Set(reachableIds);
|
|
223
|
+
for (const child of node.children) {
|
|
224
|
+
validateGotoTargets(child, childAncestors, new Set(accumulated), allIds, floatingNodeIds, errors, gotoEdges);
|
|
225
|
+
// After processing child, add its reachable subtree to accumulated
|
|
226
|
+
// (loop-opaque: only loop's own ID, not body internals)
|
|
227
|
+
collectReachableIds(child, accumulated);
|
|
228
|
+
}
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
case 'parallel': {
|
|
232
|
+
// Parallel children cannot see each other's IDs — no cross-branch jumps
|
|
233
|
+
for (const child of node.children) {
|
|
234
|
+
validateGotoTargets(child, childAncestors, new Set(reachableIds), allIds, floatingNodeIds, errors, gotoEdges);
|
|
235
|
+
}
|
|
236
|
+
if (node.onFailed) {
|
|
237
|
+
validateFailureHandler(node.onFailed, node.id, allIds, floatingNodeIds, ancestorIds, reachableIds, errors, gotoEdges, false);
|
|
238
|
+
}
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
case 'gate': {
|
|
242
|
+
// Pass branch
|
|
243
|
+
validateGotoTargets(node.pass, childAncestors, new Set(reachableIds), allIds, floatingNodeIds, errors, gotoEdges);
|
|
244
|
+
// Fail branch
|
|
245
|
+
if ('goto' in node.fail && !('type' in node.fail)) {
|
|
246
|
+
const gotoTarget = node.fail;
|
|
247
|
+
validateGotoRef(gotoTarget, node.id, allIds, floatingNodeIds, ancestorIds, reachableIds, errors, gotoEdges, false);
|
|
248
|
+
}
|
|
249
|
+
else if ('type' in node.fail) {
|
|
250
|
+
validateGotoTargets(node.fail, childAncestors, new Set(reachableIds), allIds, floatingNodeIds, errors, gotoEdges);
|
|
251
|
+
}
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
case 'loop': {
|
|
255
|
+
// Body can see loop's ancestors — body is not isolated
|
|
256
|
+
validateGotoTargets(node.body, childAncestors, new Set(reachableIds), allIds, floatingNodeIds, errors, gotoEdges);
|
|
257
|
+
if (node.onFailed) {
|
|
258
|
+
validateFailureHandler(node.onFailed, node.id, allIds, floatingNodeIds, ancestorIds, reachableIds, errors, gotoEdges, false);
|
|
259
|
+
}
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Validate a single goto reference (GotoTarget or FailureHandler).
|
|
266
|
+
*/
|
|
267
|
+
function validateGotoRef(target, sourceNodeId, allIds, floatingNodeIds, ancestorIds, reachableIds, errors, gotoEdges, isTask) {
|
|
268
|
+
const targetId = target.goto;
|
|
269
|
+
// Check target exists
|
|
270
|
+
if (!allIds.has(targetId)) {
|
|
271
|
+
errors.push({
|
|
272
|
+
type: 'invalid_goto',
|
|
273
|
+
message: `Node "${sourceNodeId}" has goto target "${targetId}" which does not exist`,
|
|
274
|
+
nodeId: sourceNodeId,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Check reachability: target must be an ancestor, a preceding node (in reachableIds),
|
|
279
|
+
// or self (only for task nodes).
|
|
280
|
+
const canGotoSelf = isTask && targetId === sourceNodeId;
|
|
281
|
+
const isAncestor = ancestorIds.includes(targetId);
|
|
282
|
+
const isReachable = reachableIds.has(targetId);
|
|
283
|
+
if (!canGotoSelf && !isAncestor && !isReachable) {
|
|
284
|
+
errors.push({
|
|
285
|
+
type: 'invalid_goto',
|
|
286
|
+
message: `Node "${sourceNodeId}" has goto target "${targetId}" which is not an ancestor or preceding node — violates goto constraint`,
|
|
287
|
+
nodeId: sourceNodeId,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Check onExhausted reference
|
|
292
|
+
if (target.onExhausted && !floatingNodeIds.has(target.onExhausted)) {
|
|
293
|
+
errors.push({
|
|
294
|
+
type: 'invalid_floating_ref',
|
|
295
|
+
message: `Node "${sourceNodeId}" references onExhausted="${target.onExhausted}" which is not in floatingNodes`,
|
|
296
|
+
nodeId: sourceNodeId,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
// Collect edge for cycle detection
|
|
300
|
+
gotoEdges.push({
|
|
301
|
+
from: sourceNodeId,
|
|
302
|
+
to: targetId,
|
|
303
|
+
hasExit: target.maxRetries !== undefined,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
function validateFailureHandler(handler, sourceNodeId, allIds, floatingNodeIds, ancestorIds, reachableIds, errors, gotoEdges, isTask) {
|
|
307
|
+
validateGotoRef(handler, sourceNodeId, allIds, floatingNodeIds, ancestorIds, reachableIds, errors, gotoEdges, isTask);
|
|
308
|
+
}
|
|
309
|
+
// ─── Cycle Detection ───
|
|
310
|
+
/**
|
|
311
|
+
* Detect cycles in goto edges that have no exit.
|
|
312
|
+
*
|
|
313
|
+
* A goto edge with hasExit=true (maxRetries set) has a guaranteed exit path
|
|
314
|
+
* (either via onExhausted or bubbleFailure), so it does not contribute to exit-less cycles.
|
|
315
|
+
*
|
|
316
|
+
* We look for strongly connected components in the subgraph of exit-less goto edges.
|
|
317
|
+
* Any node that can reach itself through exit-less gotos forms a problematic cycle.
|
|
318
|
+
*/
|
|
319
|
+
function detectCycles(edges, errors) {
|
|
320
|
+
// For cycle detection we need to check: can any node reach itself?
|
|
321
|
+
// Since goto edges go from a later node back to an earlier node,
|
|
322
|
+
// a cycle requires a "forward path" in the workflow tree from
|
|
323
|
+
// the goto target back to the goto source. This always exists
|
|
324
|
+
// (that's the normal execution flow). So any exit-less goto edge
|
|
325
|
+
// effectively forms a cycle: target → (normal flow) → source → (goto) → target.
|
|
326
|
+
//
|
|
327
|
+
// Therefore: every exit-less goto is a potential infinite loop.
|
|
328
|
+
const reported = new Set();
|
|
329
|
+
for (const edge of edges) {
|
|
330
|
+
if (!edge.hasExit && !reported.has(edge.from)) {
|
|
331
|
+
reported.add(edge.from);
|
|
332
|
+
errors.push({
|
|
333
|
+
type: 'cycle',
|
|
334
|
+
message: `Detected exit-less cycle: node "${edge.from}" has goto to "${edge.to}" without maxRetries exit`,
|
|
335
|
+
nodeId: edge.from,
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
// ─── Role Reference Validation ───
|
|
341
|
+
function validateRoleReferences(node, availableRoles, errors) {
|
|
342
|
+
switch (node.type) {
|
|
343
|
+
case 'task':
|
|
344
|
+
if (!availableRoles.has(node.role)) {
|
|
345
|
+
errors.push({
|
|
346
|
+
type: 'invalid_role_ref',
|
|
347
|
+
message: `Task node "${node.id}" references role "${node.role}" which is not in the role registry`,
|
|
348
|
+
nodeId: node.id,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
break;
|
|
352
|
+
case 'sequence':
|
|
353
|
+
case 'parallel':
|
|
354
|
+
for (const child of node.children) {
|
|
355
|
+
validateRoleReferences(child, availableRoles, errors);
|
|
356
|
+
}
|
|
357
|
+
break;
|
|
358
|
+
case 'gate':
|
|
359
|
+
validateRoleReferences(node.pass, availableRoles, errors);
|
|
360
|
+
if ('type' in node.fail) {
|
|
361
|
+
validateRoleReferences(node.fail, availableRoles, errors);
|
|
362
|
+
}
|
|
363
|
+
break;
|
|
364
|
+
case 'loop':
|
|
365
|
+
validateRoleReferences(node.body, availableRoles, errors);
|
|
366
|
+
break;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// ─── Artifact Definition Validation ───
|
|
370
|
+
const KNOWN_PLACEHOLDERS = new Set(['{global}', '{project}', '{context}']);
|
|
371
|
+
const PLACEHOLDER_RE = /\{[^}]+\}/g;
|
|
372
|
+
/**
|
|
373
|
+
* Validate artifact definitions — checks `output` field format.
|
|
374
|
+
*
|
|
375
|
+
* Rules:
|
|
376
|
+
* 1. `output` must start with `{global}` or `{project}`
|
|
377
|
+
* 2. `{context}` must appear after `{global}` or `{project}` — implicitly covered by Rule 1
|
|
378
|
+
* 3. No unknown placeholders
|
|
379
|
+
* 4. No `..` in paths (prevent directory traversal)
|
|
380
|
+
*/
|
|
381
|
+
function validateArtifactDefinitions(artifactDefinitions, errors) {
|
|
382
|
+
for (const [artifactId, def] of Object.entries(artifactDefinitions)) {
|
|
383
|
+
if (!def.output)
|
|
384
|
+
continue;
|
|
385
|
+
const output = def.output;
|
|
386
|
+
// Rule 4: no directory traversal
|
|
387
|
+
if (output.includes('..')) {
|
|
388
|
+
errors.push({
|
|
389
|
+
type: 'invalid_artifact_output',
|
|
390
|
+
message: `Artifact "${artifactId}": output path must not contain ".." (directory traversal)`,
|
|
391
|
+
});
|
|
392
|
+
continue;
|
|
393
|
+
}
|
|
394
|
+
// Rule 1: must start with {global} or {project}
|
|
395
|
+
if (!output.startsWith('{global}') && !output.startsWith('{project}')) {
|
|
396
|
+
errors.push({
|
|
397
|
+
type: 'invalid_artifact_output',
|
|
398
|
+
message: `Artifact "${artifactId}": output must start with {global} or {project}, got "${output}"`,
|
|
399
|
+
});
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
// Rule 3: no unknown placeholders
|
|
403
|
+
const matches = output.match(PLACEHOLDER_RE);
|
|
404
|
+
if (matches) {
|
|
405
|
+
for (const m of matches) {
|
|
406
|
+
if (!KNOWN_PLACEHOLDERS.has(m)) {
|
|
407
|
+
errors.push({
|
|
408
|
+
type: 'invalid_artifact_output',
|
|
409
|
+
message: `Artifact "${artifactId}": unknown placeholder "${m}" in output "${output}"`,
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// ─── Loop Node Validation ───
|
|
417
|
+
/**
|
|
418
|
+
* Validate loop-specific constraints:
|
|
419
|
+
* - maxIterations must be a positive integer
|
|
420
|
+
* - body must exist (covered by type system, but validate at runtime for JSON input)
|
|
421
|
+
*/
|
|
422
|
+
function validateLoopNode(node, errors) {
|
|
423
|
+
if (typeof node.maxIterations !== 'number' || !Number.isInteger(node.maxIterations) || node.maxIterations <= 0) {
|
|
424
|
+
errors.push({
|
|
425
|
+
type: 'other',
|
|
426
|
+
message: `Loop node "${node.id}" must have maxIterations as a positive integer, got ${node.maxIterations}`,
|
|
427
|
+
nodeId: node.id,
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
if (!node.body) {
|
|
431
|
+
errors.push({
|
|
432
|
+
type: 'other',
|
|
433
|
+
message: `Loop node "${node.id}" must have a body`,
|
|
434
|
+
nodeId: node.id,
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
else if (!containsTaskNode(node.body)) {
|
|
438
|
+
errors.push({
|
|
439
|
+
type: 'other',
|
|
440
|
+
message: `Loop node "${node.id}" body must contain at least one task node — a loop body without tasks would cause synchronous stack overflow`,
|
|
441
|
+
nodeId: node.id,
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
// ─── Input Artifact Reference Validation ───
|
|
446
|
+
/**
|
|
447
|
+
* Validate that inputArtifacts references on task nodes refer to
|
|
448
|
+
* artifact IDs that exist in artifactDefinitions.
|
|
449
|
+
*/
|
|
450
|
+
function validateInputArtifactReferences(node, artifactDefinitions, errors) {
|
|
451
|
+
switch (node.type) {
|
|
452
|
+
case 'task':
|
|
453
|
+
validateTaskInputArtifacts(node, artifactDefinitions, errors);
|
|
454
|
+
break;
|
|
455
|
+
case 'sequence':
|
|
456
|
+
case 'parallel':
|
|
457
|
+
for (const child of node.children) {
|
|
458
|
+
validateInputArtifactReferences(child, artifactDefinitions, errors);
|
|
459
|
+
}
|
|
460
|
+
break;
|
|
461
|
+
case 'gate':
|
|
462
|
+
validateInputArtifactReferences(node.pass, artifactDefinitions, errors);
|
|
463
|
+
if ('type' in node.fail) {
|
|
464
|
+
validateInputArtifactReferences(node.fail, artifactDefinitions, errors);
|
|
465
|
+
}
|
|
466
|
+
break;
|
|
467
|
+
case 'loop':
|
|
468
|
+
validateInputArtifactReferences(node.body, artifactDefinitions, errors);
|
|
469
|
+
break;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Validate inputArtifacts on a single task node.
|
|
474
|
+
* Each ID must exist in artifactDefinitions.
|
|
475
|
+
*/
|
|
476
|
+
function validateTaskInputArtifacts(node, artifactDefinitions, errors) {
|
|
477
|
+
if (!node.inputArtifacts)
|
|
478
|
+
return;
|
|
479
|
+
for (const artifactId of node.inputArtifacts) {
|
|
480
|
+
if (!artifactDefinitions[artifactId]) {
|
|
481
|
+
errors.push({
|
|
482
|
+
type: 'invalid_input_artifact',
|
|
483
|
+
message: `Task node "${node.id}" declares inputArtifact "${artifactId}" which is not defined in artifactDefinitions`,
|
|
484
|
+
nodeId: node.id,
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
//# sourceMappingURL=workflow-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-validator.js","sourceRoot":"","sources":["../../src/core/workflow-validator.ts"],"names":[],"mappings":"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"}
|