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.
@@ -49,8 +49,8 @@
49
49
  <branch test="${checkpoints.feature_spec_review.passed} == true" name="Resume from Phase 4">
50
50
  <block type="set-variable" id="P0-V1" name="resume_phase" value="4"/>
51
51
  </branch>
52
- <branch test="${checkpoints.function_decomposition.passed} == true" name="Resume from Phase 3b">
53
- <block type="set-variable" id="P0-V2" name="resume_phase" value="3b"/>
52
+ <branch test="${checkpoints.function_decomposition.passed} == true" name="Resume from Phase 3">
53
+ <block type="set-variable" id="P0-V2" name="resume_phase" value="3"/>
54
54
  </branch>
55
55
  <branch default="true" name="Resume from Phase 1"/>
56
56
  </block>
@@ -179,29 +179,28 @@
179
179
  </block>
180
180
  </sequence>
181
181
 
182
- <!-- ========== Phase 3: Feature Design Two-Stage Pipeline ========== -->
183
- <sequence name="Phase 3: Feature Design Two-Stage Pipeline">
182
+ <!-- ========== Phase 3: Feature Design (Unified Analysis + Design) ========== -->
183
+ <sequence name="Phase 3: Feature Design (Unified Analysis + Design)">
184
184
 
185
185
  <block type="rule" id="P3-R1" level="mandatory" desc="Phase 3 Mandatory Rules">
186
186
  <field name="text">DO NOT ask user which strategy to use - strategy determined by Phase 2 extraction</field>
187
187
  <field name="text">DO NOT invoke skills directly when 2+ Features - MUST dispatch speccrew-task-worker</field>
188
188
  <field name="text">Dispatch granularity is PER FEATURE, not per module</field>
189
189
  <field name="text">DO NOT generate Feature Spec documents yourself - role is to DISPATCH workers</field>
190
- <field name="text">Phase 3a → 3b → 3c is STRICTLY SERIAL</field>
191
190
  <field name="text">Feature name is LOCKED after Phase 2 confirmation</field>
192
191
  </block>
193
192
 
194
- <!-- ========== Phase 3a: Analyze Function Decomposition ========== -->
195
- <block type="event" id="P3-E1" action="log" desc="Start Phase 3a">
196
- <field name="message">📊 Phase 3a: Analyze Function Decomposition</field>
193
+ <!-- ========== Unified Feature Design Dispatch ========== -->
194
+ <block type="event" id="P3-E1" action="log" desc="Start Phase 3">
195
+ <field name="message">📊 Phase 3: Feature Design (Unified Analysis + Design)</field>
197
196
  </block>
198
197
 
199
- <block type="gateway" id="P3-G1" mode="exclusive" desc="Dispatch mode for Phase 3a">
198
+ <block type="gateway" id="P3-G1" mode="exclusive" desc="Dispatch mode for Phase 3">
200
199
 
201
200
  <!-- Single Feature: Direct Invocation -->
202
201
  <branch test="${dispatch_mode} == 'direct'" name="Direct Invocation">
203
- <block type="task" id="P3-B1" action="run-skill" status="pending" desc="Invoke feature analyze skill">
204
- <field name="skill">speccrew-fd-feature-analyze</field>
202
+ <block type="task" id="P3-B1" action="run-skill" status="pending" desc="Invoke feature design skill">
203
+ <field name="skill">speccrew-fd-feature-design</field>
205
204
  <field name="context">
206
205
  prd_path: ${prd_files[0]}
207
206
  feature_id: ${feature_list.modules[0].features[0].feature_id}
@@ -209,8 +208,9 @@
209
208
  feature_type: ${feature_list.modules[0].features[0].feature_type}
210
209
  iteration_id: ${iteration_path}
211
210
  frontend_platforms: ${frontend_platforms}
211
+ output_path: ${iteration_path}/02.feature-design/${feature_id}-${feature_name}-feature-spec.md
212
212
  </field>
213
- <field name="output" var="analyze_result"/>
213
+ <field name="output" var="design_result"/>
214
214
  </block>
215
215
  </branch>
216
216
 
@@ -225,96 +225,33 @@
225
225
 
226
226
  <!-- Initialize DISPATCH-PROGRESS.json -->
227
227
  <block type="task" id="P3-B2" action="run-script" status="pending" desc="Initialize dispatch progress">
228
- <field name="command">node ${workspace_root}/scripts/update-progress.js init --file ${iteration_path}/02.feature-design/DISPATCH-PROGRESS.json --stage 02_feature_design_analyze --tasks-file ${iteration_path}/02.feature-design/.tasks-temp.json</field>
229
- </block>
230
-
231
- <!-- Dispatch Workers in batches of 6 -->
232
- <block type="loop" id="P3-L1" mode="batch" batch_size="6" desc="Dispatch analyze workers">
233
- <field name="items" value="${all_features}"/>
234
-
235
- <block type="task" id="P3-B3" action="dispatch-to-worker" status="pending" desc="Dispatch analyze worker">
236
- <field name="agent">speccrew-task-worker</field>
237
- <field name="skill">speccrew-fd-feature-analyze</field>
238
- <field name="context">
239
- prd_path: ${item.prd_path}
240
- feature_id: ${item.feature_id}
241
- feature_name: ${item.feature_name}
242
- feature_type: ${item.feature_type}
243
- iteration_id: ${iteration_path}
244
- frontend_platforms: ${frontend_platforms}
245
- skip_checkpoint: true
246
- </field>
247
- </block>
248
-
249
- <block type="task" id="P3-B4" action="run-script" status="pending" desc="Update worker progress">
250
- <field name="command">node ${workspace_root}/scripts/update-progress.js update-task --file ${iteration_path}/02.feature-design/DISPATCH-PROGRESS.json --task-id ${item.feature_id} --status ${worker_status}</field>
251
- </block>
252
- </block>
253
-
254
- <!-- All completed: Present summary -->
255
- <block type="event" id="P3-E2" action="log" desc="Display analyze summary">
256
- <field name="template">analyze-summary</field>
257
- <field name="data" value="${analyze_results}"/>
258
- </block>
259
-
260
- <block type="event" id="P3-E3" action="confirm" desc="HARD STOP for analyze confirmation">
261
- <field name="prompt">📊 Phase 3a (Analyze) complete. Does this function breakdown align with your understanding?</field>
262
- </block>
263
- </branch>
264
- </block>
265
-
266
- <!-- ========== Phase 3b: Design & Generate — Feature Spec Production ========== -->
267
- <block type="event" id="P3-E4" action="log" desc="Start Phase 3b">
268
- <field name="message">📊 Phase 3b: Design & Generate — Feature Spec Production</field>
269
- </block>
270
-
271
- <block type="gateway" id="P3-G2" mode="exclusive" desc="Dispatch mode for Phase 3b">
272
-
273
- <!-- Single Feature: Direct Invocation -->
274
- <branch test="${dispatch_mode} == 'direct'" name="Direct Invocation">
275
- <block type="task" id="P3-B5" action="run-skill" status="pending" desc="Invoke feature design skill">
276
- <field name="skill">speccrew-fd-feature-design</field>
277
- <field name="context">
278
- feature_analysis_path: ${analyze_result.output_path}
279
- prd_path: ${prd_files[0]}
280
- feature_id: ${feature_list.modules[0].features[0].feature_id}
281
- feature_name: ${feature_list.modules[0].features[0].feature_name}
282
- feature_type: ${feature_list.modules[0].features[0].feature_type}
283
- frontend_platforms: ${frontend_platforms}
284
- output_path: ${iteration_path}/02.feature-design/${feature_id}-${feature_name}-feature-spec.md
285
- </field>
286
- <field name="output" var="design_result"/>
287
- </block>
288
- </branch>
289
-
290
- <!-- Multiple Features: Worker Dispatch -->
291
- <branch test="${dispatch_mode} == 'worker'" name="Worker Dispatch">
292
-
293
- <!-- Initialize DISPATCH-PROGRESS.json for Design stage -->
294
- <block type="task" id="P3-B6" action="run-script" status="pending" desc="Initialize design dispatch progress">
295
228
  <field name="command">node ${workspace_root}/scripts/update-progress.js init --file ${iteration_path}/02.feature-design/DISPATCH-PROGRESS.json --stage 02_feature_design_spec --tasks-file ${iteration_path}/02.feature-design/.tasks-temp.json</field>
296
229
  </block>
297
230
 
231
+ <!-- MANDATORY: Dispatch prompt must contain ONLY skill path + context data parameters.
232
+ DO NOT include execution instructions, step sequences, or output directives.
233
+ Worker will read skill's workflow.agentflow.xml for execution plan. -->
298
234
  <!-- Dispatch Workers in batches of 6 -->
299
- <block type="loop" id="P3-L2" mode="batch" batch_size="6" desc="Dispatch design workers">
235
+ <block type="loop" id="P3-L1" mode="batch" batch_size="6" desc="Dispatch design workers">
300
236
  <field name="items" value="${all_features}"/>
301
237
 
302
- <block type="task" id="P3-B7" action="dispatch-to-worker" status="pending" desc="Dispatch design worker">
238
+ <block type="task" id="P3-B3" action="dispatch-to-worker" status="pending" desc="Dispatch design worker">
303
239
  <field name="agent">speccrew-task-worker</field>
304
240
  <field name="skill">speccrew-fd-feature-design</field>
305
241
  <field name="context">
306
- feature_analysis_path: ${item.analysis_path}
242
+ workspace_path: ${workspace_root}
307
243
  prd_path: ${item.prd_path}
308
244
  feature_id: ${item.feature_id}
309
245
  feature_name: ${item.feature_name}
310
246
  feature_type: ${item.feature_type}
247
+ iteration_id: ${iteration_path}
311
248
  frontend_platforms: ${frontend_platforms}
312
249
  output_path: ${iteration_path}/02.feature-design/${item.feature_id}-${item.feature_name}-feature-spec.md
313
- skip_checkpoint: true
250
+ skip_analysis_checkpoint: true
314
251
  </field>
315
252
  </block>
316
253
 
317
- <block type="task" id="P3-B8" action="run-script" status="pending" desc="Update worker progress">
254
+ <block type="task" id="P3-B4" action="run-script" status="pending" desc="Update worker progress">
318
255
  <field name="command">node ${workspace_root}/scripts/update-progress.js update-task --file ${iteration_path}/02.feature-design/DISPATCH-PROGRESS.json --task-id ${item.feature_id} --status ${worker_status}</field>
319
256
  </block>
320
257
  </block>
@@ -404,6 +341,9 @@
404
341
  <field name="command">node ${workspace_root}/scripts/update-progress.js init --file ${iteration_path}/02.feature-design/DISPATCH-PROGRESS.json --stage 02_feature_design_api_contract --tasks-file ${iteration_path}/02.feature-design/.tasks-temp.json</field>
405
342
  </block>
406
343
 
344
+ <!-- MANDATORY: Dispatch prompt must contain ONLY skill path + context data parameters.
345
+ DO NOT include execution instructions, step sequences, or output directives.
346
+ Worker will read skill's workflow.agentflow.xml for execution plan. -->
407
347
  <!-- Dispatch Workers in batches of 6 -->
408
348
  <block type="loop" id="P4-L1" mode="batch" batch_size="6" desc="Dispatch API contract workers">
409
349
  <field name="items" value="${all_features}"/>
@@ -412,6 +352,7 @@
412
352
  <field name="agent">speccrew-task-worker</field>
413
353
  <field name="skill">speccrew-fd-api-contract</field>
414
354
  <field name="context">
355
+ workspace_path: ${workspace_root}
415
356
  feature_spec_path: ${item.spec_path}
416
357
  feature_id: ${item.feature_id}
417
358
  feature_name: ${item.feature_name}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "speccrew",
3
- "version": "0.7.29",
3
+ "version": "0.7.31",
4
4
  "description": "Spec-Driven Development toolkit for AI-powered IDEs",
5
5
  "author": "charlesmu99",
6
6
  "repository": {