speccrew 0.7.29 → 0.7.31
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/.speccrew/agents/speccrew-feature-designer.md +117 -115
- package/.speccrew/agents/speccrew-product-manager.md +35 -0
- package/.speccrew/agents/speccrew-task-worker.md +26 -0
- package/.speccrew/skills/speccrew-fd-feature-design/SKILL.md +162 -42
- package/.speccrew/skills/speccrew-fd-feature-design/templates/FEATURE-SPEC-TEMPLATE.md +22 -1
- package/.speccrew/skills/speccrew-fd-feature-design/workflow.agentflow.xml +204 -74
- package/.speccrew/skills/speccrew-feature-designer-orchestration/workflow.agentflow.xml +25 -84
- package/package.json +1 -1
|
@@ -5,97 +5,225 @@
|
|
|
5
5
|
Input Parameters Definition
|
|
6
6
|
============================================================ -->
|
|
7
7
|
<block type="input" id="I1" desc="Workflow input parameters">
|
|
8
|
-
<field name="feature_analysis_path" required="true" type="string" desc="Path to .feature-analysis.md"/>
|
|
9
8
|
<field name="prd_path" required="true" type="string" desc="Path to the Sub-PRD document"/>
|
|
10
9
|
<field name="feature_id" required="false" type="string" desc="Feature identifier, e.g., F-CRM-01"/>
|
|
11
|
-
<field name="feature_name" required="false" type="string" desc="Feature name in English"/>
|
|
10
|
+
<field name="feature_name" required="false" type="string" desc="Feature name in English, e.g., customer-list"/>
|
|
12
11
|
<field name="feature_type" required="false" type="string" desc="Page+API or API-only"/>
|
|
12
|
+
<field name="iteration_id" required="true" type="string" desc="Current iteration identifier"/>
|
|
13
13
|
<field name="frontend_platforms" required="false" type="array" desc="List of frontend platforms"/>
|
|
14
|
-
<field name="
|
|
14
|
+
<field name="skip_analysis_checkpoint" required="false" type="boolean" default="false" desc="Skip Checkpoint A if true"/>
|
|
15
15
|
<field name="skip_checkpoint" required="false" type="boolean" default="false" desc="Skip Checkpoint B if true"/>
|
|
16
|
-
<field name="
|
|
16
|
+
<field name="output_path" required="false" type="string" desc="Custom output path (auto-generated if not provided)"/>
|
|
17
17
|
<field name="workspace_path" required="true" type="string" desc="Absolute path to speccrew-workspace"/>
|
|
18
18
|
</block>
|
|
19
19
|
|
|
20
20
|
<!-- ============================================================
|
|
21
21
|
Global Constraints
|
|
22
22
|
============================================================ -->
|
|
23
|
-
<block type="rule" id="R1" level="forbidden" desc="
|
|
23
|
+
<block type="rule" id="R1" level="forbidden" desc="Script execution failure">
|
|
24
|
+
<field name="text">If update-progress.js fails, HARD STOP and report error</field>
|
|
25
|
+
</block>
|
|
26
|
+
|
|
27
|
+
<block type="rule" id="R2" level="forbidden" desc="Hand-written checkpoints">
|
|
28
|
+
<field name="text">ALWAYS use update-progress.js script for .checkpoints.json</field>
|
|
29
|
+
</block>
|
|
30
|
+
|
|
31
|
+
<block type="rule" id="R3" level="forbidden" desc="Skip Checkpoint A">
|
|
32
|
+
<field name="text">User confirmation required before proceeding (unless skip_analysis_checkpoint=true)</field>
|
|
33
|
+
</block>
|
|
34
|
+
|
|
35
|
+
<block type="rule" id="R4" level="forbidden" desc="Skip Checkpoint B">
|
|
36
|
+
<field name="text">User confirmation required before generating (unless skip_checkpoint=true)</field>
|
|
37
|
+
</block>
|
|
38
|
+
|
|
39
|
+
<block type="rule" id="R5" level="forbidden" desc="Rename features">
|
|
40
|
+
<field name="text">Output filename MUST use exact feature_name parameter value</field>
|
|
41
|
+
<field name="text">DO NOT translate, abbreviate, or substitute</field>
|
|
42
|
+
</block>
|
|
43
|
+
|
|
44
|
+
<block type="rule" id="R6" level="mandatory" desc="Business perspective only">
|
|
45
|
+
<field name="text">Feature Analysis is a PURE BUSINESS document</field>
|
|
46
|
+
<field name="text">Describes WHAT the system does, NOT HOW it's implemented</field>
|
|
47
|
+
</block>
|
|
48
|
+
|
|
49
|
+
<block type="rule" id="R7" level="forbidden" desc="Phase B Content Filling">
|
|
24
50
|
<field name="text">NEVER use create_file to rewrite document after skeleton creation</field>
|
|
25
51
|
<field name="text">NEVER abandon search_replace mid-way and switch to create_file</field>
|
|
26
52
|
<field name="text">MUST continue using search_replace for EVERY section</field>
|
|
27
53
|
</block>
|
|
28
54
|
|
|
29
|
-
<block type="rule" id="
|
|
55
|
+
<block type="rule" id="R8" level="mandatory" desc="Template-first workflow">
|
|
30
56
|
<field name="text">Step 5 (copy template) MUST precede Step 6 (fill content)</field>
|
|
31
57
|
</block>
|
|
32
58
|
|
|
33
|
-
<block type="rule" id="
|
|
59
|
+
<block type="rule" id="R9" level="mandatory" desc="Mermaid diagrams">
|
|
34
60
|
<field name="text">ALL interaction flows MUST use Mermaid syntax</field>
|
|
35
61
|
<field name="text">Plain text ASCII flowcharts are FORBIDDEN</field>
|
|
36
62
|
</block>
|
|
37
63
|
|
|
38
|
-
<block type="rule" id="R4" level="forbidden" desc="Rename features">
|
|
39
|
-
<field name="text">Output filename MUST use exact feature_name parameter value</field>
|
|
40
|
-
<field name="text">DO NOT translate, abbreviate, or substitute</field>
|
|
41
|
-
</block>
|
|
42
|
-
|
|
43
64
|
<!-- ============================================================
|
|
44
|
-
|
|
65
|
+
Sequence S0: Feature Analysis
|
|
45
66
|
============================================================ -->
|
|
46
|
-
<sequence id="
|
|
67
|
+
<sequence id="S0" name="Feature Analysis" status="pending" desc="Analyze PRD and produce function decomposition">
|
|
47
68
|
|
|
48
|
-
<!-- Step 0:
|
|
49
|
-
<block type="task" id="
|
|
50
|
-
<field name="path" value="${
|
|
51
|
-
<field name="output" var="
|
|
69
|
+
<!-- Step 0.1: Read PRD -->
|
|
70
|
+
<block type="task" id="B0_1" action="read-file" desc="Read PRD document">
|
|
71
|
+
<field name="path" value="${prd_path}"/>
|
|
72
|
+
<field name="output" var="prd_content"/>
|
|
52
73
|
</block>
|
|
53
74
|
|
|
54
|
-
<!-- Gateway: Validate
|
|
55
|
-
<block type="gateway" id="
|
|
56
|
-
test="${
|
|
57
|
-
<field name="message">
|
|
75
|
+
<!-- Gateway: Validate PRD exists -->
|
|
76
|
+
<block type="gateway" id="G0_1" mode="guard" desc="Verify PRD exists"
|
|
77
|
+
test="${prd_content} != null" fail-action="stop">
|
|
78
|
+
<field name="message">PRD document not found at: ${prd_path}</field>
|
|
58
79
|
</block>
|
|
59
80
|
|
|
60
|
-
<!-- Step 0.2:
|
|
61
|
-
<block type="task" id="
|
|
62
|
-
<field name="
|
|
63
|
-
<field name="
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
81
|
+
<!-- Step 0.2: Load System Knowledge -->
|
|
82
|
+
<block type="task" id="B0_2" action="read-file" desc="Read System Overview">
|
|
83
|
+
<field name="path">${workspace_path}/knowledges/bizs/system-overview.md</field>
|
|
84
|
+
<field name="output" var="system_overview"/>
|
|
85
|
+
</block>
|
|
86
|
+
|
|
87
|
+
<!-- Step 0.3: Load Related Module Overviews -->
|
|
88
|
+
<block type="task" id="B0_3" action="analyze" desc="Identify related modules from PRD">
|
|
89
|
+
<field name="input" value="${prd_content}"/>
|
|
90
|
+
<field name="analysis_rules">
|
|
91
|
+
- Extract module names mentioned in PRD
|
|
92
|
+
- Identify cross-module dependencies
|
|
93
|
+
- List related module overview files to read
|
|
68
94
|
</field>
|
|
69
|
-
<field name="output" var="
|
|
95
|
+
<field name="output" var="related_modules"/>
|
|
70
96
|
</block>
|
|
71
97
|
|
|
72
|
-
<!--
|
|
73
|
-
<block type="
|
|
74
|
-
|
|
75
|
-
|
|
98
|
+
<!-- Loop: Read related module overviews -->
|
|
99
|
+
<block type="loop" id="L0_1" over="${related_modules}" as="module" desc="Read related module overviews">
|
|
100
|
+
<block type="task" id="B0_4" action="read-file" desc="Read module overview">
|
|
101
|
+
<field name="path">${workspace_path}/knowledges/bizs/${module.name}/${module.name}-overview.md</field>
|
|
102
|
+
<field name="output" var="module_overview_${module.name}"/>
|
|
103
|
+
</block>
|
|
76
104
|
</block>
|
|
77
105
|
|
|
78
|
-
<!-- Step 0.
|
|
79
|
-
<block type="
|
|
80
|
-
<
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
106
|
+
<!-- Step 0.4: Discover Frontend Platforms -->
|
|
107
|
+
<block type="gateway" id="G0_2" mode="exclusive" desc="Get frontend platforms">
|
|
108
|
+
<branch test="${frontend_platforms} != null AND ${frontend_platforms.length} > 0" name="Use provided platforms">
|
|
109
|
+
<block type="event" id="E0_1" action="log" level="info" desc="Using provided platforms">
|
|
110
|
+
<field name="message">Using provided frontend platforms: ${frontend_platforms}</field>
|
|
111
|
+
</block>
|
|
112
|
+
</branch>
|
|
113
|
+
<branch default="true" name="Auto-discover from techs-manifest">
|
|
114
|
+
<block type="task" id="B0_5" action="read-file" desc="Read techs manifest">
|
|
115
|
+
<field name="path">${workspace_path}/knowledges/techs/techs-manifest.json</field>
|
|
116
|
+
<field name="output" var="techs_manifest"/>
|
|
117
|
+
</block>
|
|
118
|
+
<block type="task" id="B0_6" action="analyze" desc="Extract frontend platforms">
|
|
119
|
+
<field name="input" value="${techs_manifest}"/>
|
|
120
|
+
<field name="extraction_rules">
|
|
121
|
+
- Filter platforms with type web-* or mobile-*
|
|
122
|
+
- Extract platform identifiers
|
|
123
|
+
</field>
|
|
124
|
+
<field name="output" var="frontend_platforms"/>
|
|
125
|
+
</block>
|
|
126
|
+
</branch>
|
|
127
|
+
</block>
|
|
128
|
+
|
|
129
|
+
<!-- Step 0.5: Function Breakdown -->
|
|
130
|
+
<block type="gateway" id="G0_3" mode="exclusive" desc="Select decomposition mode">
|
|
131
|
+
<branch test="${feature_id} != null" name="Feature-based decomposition">
|
|
132
|
+
<block type="task" id="B0_7" action="analyze" desc="Extract specific Feature from PRD">
|
|
133
|
+
<field name="input" value="${prd_content}"/>
|
|
134
|
+
<field name="feature_id" value="${feature_id}"/>
|
|
135
|
+
<field name="analysis_rules">
|
|
136
|
+
- Locate Feature in PRD Section 3.4 Feature Breakdown
|
|
137
|
+
- Extract only user stories mapped to this Feature
|
|
138
|
+
- Decompose into 3-8 focused Functions
|
|
139
|
+
- Mark API-only if feature_type indicates
|
|
140
|
+
</field>
|
|
141
|
+
<field name="output" var="function_breakdown"/>
|
|
142
|
+
</block>
|
|
143
|
+
</branch>
|
|
144
|
+
<branch default="true" name="Full PRD decomposition">
|
|
145
|
+
<block type="task" id="B0_8" action="analyze" desc="Decompose entire PRD">
|
|
146
|
+
<field name="input" value="${prd_content}"/>
|
|
147
|
+
<field name="analysis_rules">
|
|
148
|
+
- Decompose entire PRD into all required Functions
|
|
149
|
+
- May result in 10-20 Functions for complex modules
|
|
150
|
+
</field>
|
|
151
|
+
<field name="output" var="function_breakdown"/>
|
|
152
|
+
</block>
|
|
153
|
+
</branch>
|
|
154
|
+
</block>
|
|
155
|
+
|
|
156
|
+
<!-- Step 0.6: Analyze Functions with System Markers -->
|
|
157
|
+
<block type="task" id="B0_9" action="analyze" desc="Analyze functions with system relationship markers">
|
|
158
|
+
<field name="input" value="${function_breakdown}">${system_overview}${related_modules}</field>
|
|
159
|
+
<field name="analysis_rules">
|
|
160
|
+
For each function, identify:
|
|
161
|
+
- Frontend Changes: New pages, components, or modifications
|
|
162
|
+
- Backend Changes: New interfaces or modifications
|
|
163
|
+
- Data Changes: New data structures or modifications
|
|
164
|
+
- System Relationship: [EXISTING], [MODIFIED], or [NEW]
|
|
165
|
+
</field>
|
|
166
|
+
<field name="output" var="analyzed_functions"/>
|
|
167
|
+
</block>
|
|
168
|
+
|
|
169
|
+
<!-- Checkpoint A: User Confirmation -->
|
|
170
|
+
<block type="gateway" id="G0_4" mode="exclusive" desc="Handle checkpoint A">
|
|
171
|
+
<branch test="${skip_analysis_checkpoint} == true" name="Skip confirmation">
|
|
172
|
+
<block type="event" id="E0_2" action="log" level="info" desc="Skipping checkpoint A">
|
|
173
|
+
<field name="message">skip_analysis_checkpoint=true, proceeding without user confirmation</field>
|
|
174
|
+
</block>
|
|
175
|
+
</branch>
|
|
176
|
+
<branch default="true" name="Request confirmation">
|
|
177
|
+
<block type="event" id="E0_3" action="confirm" title="Function Breakdown Confirmation - Checkpoint A" type="yesno" desc="Present function breakdown for confirmation">
|
|
178
|
+
<field name="preview">Function Breakdown (Total: ${analyzed_functions.count} functions):
|
|
179
|
+
|
|
180
|
+
${analyzed_functions.summary}
|
|
181
|
+
|
|
182
|
+
System Relationship Markers:
|
|
183
|
+
- [EXISTING]: ${analyzed_functions.existing_count} - Reuse existing capabilities
|
|
184
|
+
- [MODIFIED]: ${analyzed_functions.modified_count} - Enhance existing features
|
|
185
|
+
- [NEW]: ${analyzed_functions.new_count} - Create new functionality
|
|
186
|
+
|
|
187
|
+
Does this function breakdown align with your understanding of the requirements?</field>
|
|
188
|
+
</block>
|
|
189
|
+
</branch>
|
|
190
|
+
</block>
|
|
191
|
+
|
|
192
|
+
<!-- Step 0.7: Update Checkpoint A -->
|
|
193
|
+
<block type="task" id="B0_10" action="run-script" desc="Record checkpoint A passed">
|
|
194
|
+
<field name="command">node "${workspace_path}/scripts/update-progress.js" write-checkpoint --file "${workspace_path}/iterations/${iteration_id}/02.feature-design/.checkpoints.json" --stage 02_feature_design --checkpoint function_decomposition --passed true</field>
|
|
195
|
+
<field name="output" var="checkpoint_a_result"/>
|
|
196
|
+
</block>
|
|
197
|
+
|
|
198
|
+
</sequence>
|
|
199
|
+
|
|
200
|
+
<!-- ============================================================
|
|
201
|
+
Sequence S1: Feature Design
|
|
202
|
+
============================================================ -->
|
|
203
|
+
<sequence id="S1" name="Feature Design" status="pending" desc="Generate Feature Spec from analysis results">
|
|
204
|
+
|
|
205
|
+
<!-- Step 1.0: Prepare analysis results for design -->
|
|
206
|
+
<block type="task" id="B1_0" action="analyze" desc="Prepare analysis data for design phase">
|
|
207
|
+
<field name="input" value="${analyzed_functions}">${prd_content}${feature_id}${feature_name}${feature_type}${frontend_platforms}</field>
|
|
208
|
+
<field name="prepare_rules">
|
|
209
|
+
- Extract feature_id, feature_name, feature_type from parameters or analysis
|
|
210
|
+
- Prepare functions list for design phase
|
|
211
|
+
- Prepare platforms list for design phase
|
|
212
|
+
- Verify Checkpoint A passed status
|
|
85
213
|
</field>
|
|
86
|
-
<field name="output" var="
|
|
214
|
+
<field name="output" var="design_input"/>
|
|
87
215
|
</block>
|
|
88
216
|
|
|
89
217
|
<!-- Step 1: Frontend Design (Conditional) -->
|
|
90
|
-
<block type="gateway" id="
|
|
218
|
+
<block type="gateway" id="G1" mode="exclusive" desc="Conditional frontend design">
|
|
91
219
|
<branch test="${feature_type} == 'API-only'" name="Skip frontend">
|
|
92
220
|
<block type="event" id="E1" action="log" level="info" desc="Skipping frontend design">
|
|
93
221
|
<field name="message">feature_type is API-only, skipping frontend design</field>
|
|
94
222
|
</block>
|
|
95
223
|
</branch>
|
|
96
224
|
<branch default="true" name="Execute frontend design">
|
|
97
|
-
<block type="task" id="
|
|
98
|
-
<field name="input" value="${
|
|
225
|
+
<block type="task" id="B1" action="analyze" desc="Design UI prototypes">
|
|
226
|
+
<field name="input" value="${design_input}">${frontend_platforms}</field>
|
|
99
227
|
<field name="design_rules">
|
|
100
228
|
- Create ASCII wireframes for each platform
|
|
101
229
|
- Use Pattern M-A (Card List), M-B (Mobile Form), M-C (Action Sheet) for mobile
|
|
@@ -104,8 +232,8 @@
|
|
|
104
232
|
<field name="output" var="ui_prototypes"/>
|
|
105
233
|
</block>
|
|
106
234
|
|
|
107
|
-
<block type="task" id="
|
|
108
|
-
<field name="input" value="${
|
|
235
|
+
<block type="task" id="B2" action="analyze" desc="Design interaction flows">
|
|
236
|
+
<field name="input" value="${design_input}">${ui_prototypes}</field>
|
|
109
237
|
<field name="design_rules">
|
|
110
238
|
- Document User Action → Frontend Response → Backend API Call
|
|
111
239
|
- Generate Mermaid sequenceDiagram for each flow
|
|
@@ -114,8 +242,8 @@
|
|
|
114
242
|
<field name="output" var="interaction_flows"/>
|
|
115
243
|
</block>
|
|
116
244
|
|
|
117
|
-
<block type="task" id="
|
|
118
|
-
<field name="input" value="${interaction_flows}">${
|
|
245
|
+
<block type="task" id="B3" action="analyze" desc="Map backend APIs">
|
|
246
|
+
<field name="input" value="${interaction_flows}">${design_input}</field>
|
|
119
247
|
<field name="mapping_rules">
|
|
120
248
|
- Map each frontend action to backend API endpoint
|
|
121
249
|
- Document data exchanged
|
|
@@ -126,8 +254,8 @@
|
|
|
126
254
|
</block>
|
|
127
255
|
|
|
128
256
|
<!-- Step 2: Backend Design -->
|
|
129
|
-
<block type="task" id="
|
|
130
|
-
<field name="input" value="${
|
|
257
|
+
<block type="task" id="B4" action="analyze" desc="Design backend interfaces">
|
|
258
|
+
<field name="input" value="${design_input}">${api_mapping}</field>
|
|
131
259
|
<field name="design_rules">
|
|
132
260
|
- List API/Interface with method and description
|
|
133
261
|
- Document processing logic flow (Mermaid flowchart TD)
|
|
@@ -138,8 +266,8 @@
|
|
|
138
266
|
</block>
|
|
139
267
|
|
|
140
268
|
<!-- Step 3: Data Model and Business Rules -->
|
|
141
|
-
<block type="task" id="
|
|
142
|
-
<field name="input" value="${
|
|
269
|
+
<block type="task" id="B5" action="analyze" desc="Design data model">
|
|
270
|
+
<field name="input" value="${design_input}">${backend_design}</field>
|
|
143
271
|
<field name="design_rules">
|
|
144
272
|
- Define new data structures (field, type, constraints, description)
|
|
145
273
|
- Document modifications to existing structures
|
|
@@ -153,7 +281,7 @@
|
|
|
153
281
|
</block>
|
|
154
282
|
|
|
155
283
|
<!-- Step 4: Checkpoint B -->
|
|
156
|
-
<block type="gateway" id="
|
|
284
|
+
<block type="gateway" id="G2" mode="exclusive" desc="Handle checkpoint B">
|
|
157
285
|
<branch test="${skip_checkpoint} == true" name="Skip confirmation">
|
|
158
286
|
<block type="event" id="E2" action="log" level="info" desc="Skipping checkpoint B">
|
|
159
287
|
<field name="message">skip_checkpoint=true, proceeding without user confirmation</field>
|
|
@@ -164,12 +292,12 @@
|
|
|
164
292
|
<field name="preview">Feature: ${feature_name} (${feature_id})
|
|
165
293
|
|
|
166
294
|
FUNCTIONS DESIGNED
|
|
167
|
-
Total: ${
|
|
295
|
+
Total: ${analyzed_functions.count} functions
|
|
168
296
|
|
|
169
297
|
SYSTEM RELATIONSHIP SUMMARY
|
|
170
|
-
- [EXISTING]: ${
|
|
171
|
-
- [MODIFIED]: ${
|
|
172
|
-
- [NEW]: ${
|
|
298
|
+
- [EXISTING]: ${analyzed_functions.existing_count} - Reuse existing capabilities
|
|
299
|
+
- [MODIFIED]: ${analyzed_functions.modified_count} - Enhance existing features
|
|
300
|
+
- [NEW]: ${analyzed_functions.new_count} - Create new functionality
|
|
173
301
|
|
|
174
302
|
FRONTEND COMPONENTS
|
|
175
303
|
- Platforms: ${frontend_platforms}
|
|
@@ -196,21 +324,21 @@ Please confirm:
|
|
|
196
324
|
</block>
|
|
197
325
|
|
|
198
326
|
<!-- Step 4.3: Update Checkpoint B -->
|
|
199
|
-
<block type="task" id="
|
|
327
|
+
<block type="task" id="B6" action="run-script" desc="Record checkpoint B passed">
|
|
200
328
|
<field name="command">node "${workspace_path}/scripts/update-progress.js" write-checkpoint --file "${workspace_path}/iterations/${iteration_id}/02.feature-design/.checkpoints.json" --stage 02_feature_design --checkpoint feature_design_review --passed true</field>
|
|
201
329
|
<field name="output" var="checkpoint_b_result"/>
|
|
202
330
|
</block>
|
|
203
331
|
|
|
204
332
|
<!-- Step 5: Determine Output Path and Copy Template -->
|
|
205
|
-
<block type="task" id="
|
|
333
|
+
<block type="task" id="B7" action="read-file" desc="Read Feature Spec template">
|
|
206
334
|
<field name="path">speccrew-fd-feature-design/templates/FEATURE-SPEC-TEMPLATE.md</field>
|
|
207
335
|
<field name="output" var="template_content"/>
|
|
208
336
|
</block>
|
|
209
337
|
|
|
210
338
|
<!-- Gateway: Determine output path mode -->
|
|
211
|
-
<block type="gateway" id="
|
|
339
|
+
<block type="gateway" id="G3" mode="exclusive" desc="Determine output path">
|
|
212
340
|
<branch test="${feature_id} != null" name="Single Feature Mode">
|
|
213
|
-
<block type="task" id="
|
|
341
|
+
<block type="task" id="B8" action="generate" desc="Create document from template">
|
|
214
342
|
<field name="template" value="${template_content}"/>
|
|
215
343
|
<field name="placeholders">
|
|
216
344
|
- [Feature Name] → ${feature_name}
|
|
@@ -224,7 +352,7 @@ Please confirm:
|
|
|
224
352
|
</block>
|
|
225
353
|
</branch>
|
|
226
354
|
<branch default="true" name="Legacy Mode">
|
|
227
|
-
<block type="task" id="
|
|
355
|
+
<block type="task" id="B9" action="generate" desc="Create document from template">
|
|
228
356
|
<field name="template" value="${template_content}"/>
|
|
229
357
|
<field name="placeholders">
|
|
230
358
|
- [Feature Name] → ${feature_name}
|
|
@@ -240,8 +368,8 @@ Please confirm:
|
|
|
240
368
|
</block>
|
|
241
369
|
|
|
242
370
|
<!-- Step 6: Fill Sections Using search_replace -->
|
|
243
|
-
<block type="loop" id="L1" over="${
|
|
244
|
-
<block type="task" id="
|
|
371
|
+
<block type="loop" id="L1" over="${analyzed_functions.functions}" as="function" desc="Fill each function section">
|
|
372
|
+
<block type="task" id="B10" action="edit-file" desc="Fill Frontend Prototype section">
|
|
245
373
|
<field name="path">${output_path}</field>
|
|
246
374
|
<field name="operation">search_replace</field>
|
|
247
375
|
<field name="search">#### ${function.id}.1 Frontend Prototype
|
|
@@ -252,7 +380,7 @@ Please confirm:
|
|
|
252
380
|
${ui_prototypes[function.id]}</field>
|
|
253
381
|
</block>
|
|
254
382
|
|
|
255
|
-
<block type="task" id="
|
|
383
|
+
<block type="task" id="B11" action="edit-file" desc="Fill Interaction Flow section">
|
|
256
384
|
<field name="path">${output_path}</field>
|
|
257
385
|
<field name="operation">search_replace</field>
|
|
258
386
|
<field name="search">#### ${function.id}.2 Interaction Flow
|
|
@@ -263,7 +391,7 @@ ${ui_prototypes[function.id]}</field>
|
|
|
263
391
|
${interaction_flows[function.id]}</field>
|
|
264
392
|
</block>
|
|
265
393
|
|
|
266
|
-
<block type="task" id="
|
|
394
|
+
<block type="task" id="B12" action="edit-file" desc="Fill Backend Interface section">
|
|
267
395
|
<field name="path">${output_path}</field>
|
|
268
396
|
<field name="operation">search_replace</field>
|
|
269
397
|
<field name="search">#### ${function.id}.3 Backend Interface
|
|
@@ -274,7 +402,7 @@ ${interaction_flows[function.id]}</field>
|
|
|
274
402
|
${backend_design[function.id]}</field>
|
|
275
403
|
</block>
|
|
276
404
|
|
|
277
|
-
<block type="task" id="
|
|
405
|
+
<block type="task" id="B13" action="edit-file" desc="Fill Data Definition section">
|
|
278
406
|
<field name="path">${output_path}</field>
|
|
279
407
|
<field name="operation">search_replace</field>
|
|
280
408
|
<field name="search">#### ${function.id}.4 Data Definition
|
|
@@ -287,7 +415,7 @@ ${data_model[function.id]}</field>
|
|
|
287
415
|
</block>
|
|
288
416
|
|
|
289
417
|
<!-- Step 7: Mermaid Diagram Compliance -->
|
|
290
|
-
<block type="task" id="
|
|
418
|
+
<block type="task" id="B14" action="analyze" desc="Verify Mermaid compliance">
|
|
291
419
|
<field name="input" value="${output_path}"/>
|
|
292
420
|
<field name="verification_rules">
|
|
293
421
|
- NO style definitions (classDef, style)
|
|
@@ -298,13 +426,13 @@ ${data_model[function.id]}</field>
|
|
|
298
426
|
</block>
|
|
299
427
|
|
|
300
428
|
<!-- Step 8: Update Checkpoint -->
|
|
301
|
-
<block type="task" id="
|
|
429
|
+
<block type="task" id="B15" action="run-script" desc="Record feature spec review checkpoint">
|
|
302
430
|
<field name="command">node "${workspace_path}/scripts/update-progress.js" write-checkpoint --file "${workspace_path}/iterations/${iteration_id}/02.feature-design/.checkpoints.json" --stage 02_feature_design --checkpoint feature_spec_review --passed true</field>
|
|
303
431
|
</block>
|
|
304
432
|
|
|
305
433
|
<!-- Step 9: Update Progress with Metadata -->
|
|
306
|
-
<block type="task" id="
|
|
307
|
-
<field name="command">node "${workspace_path}/scripts/update-progress.js" update-task --file "${workspace_path}/iterations/${iteration_id}/DISPATCH-PROGRESS.json" --task-id "${feature_id}" --status completed --metadata '{"function_count": ${
|
|
434
|
+
<block type="task" id="B16" action="run-script" desc="Update dispatch progress with metadata">
|
|
435
|
+
<field name="command">node "${workspace_path}/scripts/update-progress.js" update-task --file "${workspace_path}/iterations/${iteration_id}/DISPATCH-PROGRESS.json" --task-id "${feature_id}" --status completed --metadata '{"function_count": ${analyzed_functions.count}, "component_count": ${ui_prototypes.component_count}, "api_count": ${backend_design.api_count}, "entity_count": ${data_model.entity_count}}'</field>
|
|
308
436
|
</block>
|
|
309
437
|
|
|
310
438
|
</sequence>
|
|
@@ -314,9 +442,11 @@ ${data_model[function.id]}</field>
|
|
|
314
442
|
============================================================ -->
|
|
315
443
|
<block type="output" id="O1" desc="Workflow output results">
|
|
316
444
|
<field name="feature_spec_path" value="${output_path}" type="string" desc="Path to generated Feature Spec"/>
|
|
317
|
-
<field name="function_count" from="${
|
|
445
|
+
<field name="function_count" from="${analyzed_functions.count}" type="number" desc="Number of functions analyzed and designed"/>
|
|
318
446
|
<field name="api_count" from="${backend_design.api_count}" type="number" desc="Number of APIs defined"/>
|
|
447
|
+
<field name="checkpoint_a_status" value="passed" type="string" desc="Checkpoint A status"/>
|
|
319
448
|
<field name="checkpoint_b_status" value="passed" type="string" desc="Checkpoint B status"/>
|
|
449
|
+
<field name="frontend_platforms" from="${frontend_platforms}" type="array" desc="List of frontend platforms"/>
|
|
320
450
|
</block>
|
|
321
451
|
|
|
322
452
|
</workflow>
|