speccrew 0.6.9 â 0.6.11
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.
|
@@ -93,33 +93,14 @@ Use Glob to search `{iterations_dir}/*/WORKFLOW-PROGRESS.json`
|
|
|
93
93
|
- If `01_prd.status` is `confirmed`, check resume state (Step 0.2)
|
|
94
94
|
3. **If WORKFLOW-PROGRESS.json does not exist**:
|
|
95
95
|
- **MUST use script to initialize:**
|
|
96
|
+
|
|
97
|
+
> ð **FORBIDDEN**: DO NOT manually create WORKFLOW-PROGRESS.json via Write/Edit tools. ALL initialization MUST be done via `update-progress.js` script.
|
|
98
|
+
|
|
96
99
|
```bash
|
|
97
100
|
node "{update_progress_script}" update-workflow \
|
|
98
|
-
--file {iterations_dir}/{
|
|
101
|
+
--file "{iterations_dir}/{iteration_name}/WORKFLOW-PROGRESS.json" \
|
|
99
102
|
--stage 01_prd --status in_progress
|
|
100
103
|
```
|
|
101
|
-
- **Fallback** (ONLY if script file does not exist):
|
|
102
|
-
Create manually with the following structure:
|
|
103
|
-
```json
|
|
104
|
-
{
|
|
105
|
-
"iteration": "{iteration-name}",
|
|
106
|
-
"current_stage": "01_prd",
|
|
107
|
-
"stages": {
|
|
108
|
-
"01_prd": {
|
|
109
|
-
"status": "in_progress",
|
|
110
|
-
"started_at": "<current-timestamp>",
|
|
111
|
-
"completed_at": null,
|
|
112
|
-
"confirmed_at": null,
|
|
113
|
-
"outputs": []
|
|
114
|
-
},
|
|
115
|
-
"02_feature_design": { "status": "pending" },
|
|
116
|
-
"03_system_design": { "status": "pending" },
|
|
117
|
-
"04_development": { "status": "pending" },
|
|
118
|
-
"05_deployment": { "status": "pending" },
|
|
119
|
-
"06_system_test": { "status": "pending" }
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
```
|
|
123
104
|
|
|
124
105
|
## Phase 0.2: Check Resume State (Checkpoint Recovery)
|
|
125
106
|
|
|
@@ -424,11 +405,42 @@ No knowledge base exists. A lightweight feature inventory scan is triggered to d
|
|
|
424
405
|
|
|
425
406
|
3. **After Worker completes**: Re-run Step 1.1 (dispatch detector again)
|
|
426
407
|
- **Verify** status changed from "none" to "lite"
|
|
427
|
-
- If status is now "lite" â **
|
|
428
|
-
- Path B will use **matcher** to identify modules relevant to the user's requirement
|
|
429
|
-
- Only those matched modules will be offered for deep initialization (module-initializer)
|
|
408
|
+
- If status is now "lite" â **Execute Path B immediately** (see MANDATORY instruction below)
|
|
430
409
|
- If status is still "none" â Initialization failed, proceed to Step 4
|
|
431
410
|
|
|
411
|
+
> ð **MANDATORY â Path C â Path B Sequence**:
|
|
412
|
+
> After init-features completes (features-*.json generated), you MUST immediately execute Path B:
|
|
413
|
+
> 1. Dispatch Worker with `speccrew-pm-module-matcher` skill to match requirement features against the generated features inventory
|
|
414
|
+
> 2. Based on matcher results, dispatch Worker with `speccrew-pm-module-initializer` skill to deep-initialize matched modules' knowledge base
|
|
415
|
+
> 3. Only after module initialization completes, proceed to Phase 2 (Requirement Clarification)
|
|
416
|
+
>
|
|
417
|
+
> DO NOT skip Path B. DO NOT proceed directly to Phase 2 after Path C.
|
|
418
|
+
> The features-*.json files are INPUT for Path B's matcher, not the final output of Phase 1.
|
|
419
|
+
|
|
420
|
+
**Agent Tool Invocation for Path B Step 1 (Matcher)**:
|
|
421
|
+
```
|
|
422
|
+
Use the Agent tool to invoke speccrew-task-worker:
|
|
423
|
+
- agent: speccrew-task-worker
|
|
424
|
+
- task: Execute speccrew-pm-module-matcher skill
|
|
425
|
+
- context:
|
|
426
|
+
skill: speccrew-pm-module-matcher
|
|
427
|
+
sync_state_bizs_dir: {sync_state_bizs_dir}
|
|
428
|
+
requirement_summary: <brief summary of user's requirement>
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
**Agent Tool Invocation for Path B Step 2 (Module Initializer)**:
|
|
432
|
+
```
|
|
433
|
+
Use the Agent tool to invoke speccrew-task-worker:
|
|
434
|
+
- agent: speccrew-task-worker
|
|
435
|
+
- task: Execute speccrew-pm-module-initializer skill
|
|
436
|
+
- context:
|
|
437
|
+
skill: speccrew-pm-module-initializer
|
|
438
|
+
workspace_path: {workspace_path}
|
|
439
|
+
matched_modules: <modules from matcher result>
|
|
440
|
+
sync_state_bizs_dir: {sync_state_bizs_dir}
|
|
441
|
+
ide_skills_dir: {ide_skills_dir}
|
|
442
|
+
```
|
|
443
|
+
|
|
432
444
|
4. **IF feature inventory fails**:
|
|
433
445
|
- Report to user: "Project structure scan encountered issues: [specific error]. Continuing without knowledge base context."
|
|
434
446
|
- Log the error details for debugging
|
|
@@ -626,6 +638,9 @@ Clarification File: {iteration_path}/01.product-requirement/.clarification-summa
|
|
|
626
638
|
|
|
627
639
|
- **IF user confirms** (explicit "įĄŪčŪĪ" or "OK"):
|
|
628
640
|
1. Update checkpoint to record user confirmation:
|
|
641
|
+
|
|
642
|
+
> ð **FORBIDDEN**: DO NOT manually edit .checkpoints.json via Write/Edit tools. ALL checkpoint updates MUST be done via `update-progress.js` script.
|
|
643
|
+
|
|
629
644
|
```bash
|
|
630
645
|
node "{update_progress_script}" write-checkpoint \
|
|
631
646
|
--file {iteration_path}/01.product-requirement/.checkpoints.json \
|
|
@@ -1089,6 +1104,8 @@ After all workers complete, report dispatch summary:
|
|
|
1089
1104
|
|
|
1090
1105
|
Update `.checkpoints.json` â `sub_prd_dispatch.passed = true` (only if all succeeded or user skips failures).
|
|
1091
1106
|
|
|
1107
|
+
> ð **MANDATORY**: After all Sub-PRDs are generated and checkpoint is recorded, you MUST immediately proceed to Phase 6 (Verification & User Review). DO NOT skip Phase 6. DO NOT directly ask the user if they want to continue to Feature Design. Phase 6 handles the formal verification, user review, and status update.
|
|
1108
|
+
|
|
1092
1109
|
---
|
|
1093
1110
|
|
|
1094
1111
|
## Phase 6: Verification & Confirmation
|
|
@@ -1256,10 +1273,14 @@ After presenting the documents above, you MUST stop and ask:
|
|
|
1256
1273
|
> - If NO â Return to Phase 6.2 and wait for confirmation
|
|
1257
1274
|
> - If YES â Proceed with the steps below
|
|
1258
1275
|
|
|
1276
|
+
> ð **FORBIDDEN**: DO NOT manually edit WORKFLOW-PROGRESS.json via Write/Edit tools. ALL updates to this file MUST be done via `update-progress.js` script through `run_in_terminal`.
|
|
1277
|
+
|
|
1259
1278
|
**5.3.1 Update Checkpoints**
|
|
1260
1279
|
|
|
1261
1280
|
Now update all checkpoints (user has confirmed):
|
|
1262
1281
|
|
|
1282
|
+
> ð **FORBIDDEN**: DO NOT manually edit .checkpoints.json via Write/Edit tools. ALL checkpoint updates MUST be done via `update-progress.js` script.
|
|
1283
|
+
|
|
1263
1284
|
```bash
|
|
1264
1285
|
# Update verification_checklist checkpoint
|
|
1265
1286
|
node "{update_progress_script}" write-checkpoint \
|
|
@@ -1276,10 +1297,14 @@ node "{update_progress_script}" write-checkpoint \
|
|
|
1276
1297
|
|
|
1277
1298
|
**5.3.2 Update WORKFLOW-PROGRESS.json**
|
|
1278
1299
|
|
|
1300
|
+
**Update workflow status to completed:**
|
|
1301
|
+
```bash
|
|
1302
|
+
node "{update_progress_script}" update-workflow --file "{iterations_dir}/{iteration_name}/WORKFLOW-PROGRESS.json" --stage 01_prd --status completed
|
|
1303
|
+
```
|
|
1304
|
+
|
|
1305
|
+
**Update workflow status to confirmed (after user confirms):**
|
|
1279
1306
|
```bash
|
|
1280
|
-
node "{update_progress_script}" update-workflow
|
|
1281
|
-
--file {iterations_dir}/{iteration}/WORKFLOW-PROGRESS.json \
|
|
1282
|
-
--stage 01_prd --status completed
|
|
1307
|
+
node "{update_progress_script}" update-workflow --file "{iterations_dir}/{iteration_name}/WORKFLOW-PROGRESS.json" --stage 01_prd --status confirmed
|
|
1283
1308
|
```
|
|
1284
1309
|
|
|
1285
1310
|
**5.3.3 Update PRD Status**
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"web": {
|
|
17
17
|
"react": {
|
|
18
18
|
"extensions": [".tsx", ".ts", ".jsx", ".js"],
|
|
19
|
-
"exclude_dirs": ["components", "hooks", "lib", "utils", "contexts", "hocs", "
|
|
19
|
+
"exclude_dirs": ["components", "hooks", "lib", "utils", "contexts", "hocs", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
20
20
|
"entry_patterns": ["src/pages/**/*.{tsx,jsx}", "src/components/**/*.{tsx,jsx}"],
|
|
21
21
|
"api_call_patterns": ["fetch(", "axios.", "apiClient.", "useQuery", "useMutation"],
|
|
22
22
|
"state_management": ["useState", "useReducer", "Redux", "Zustand", "MobX"],
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"vue": {
|
|
27
27
|
"extensions": [".vue", ".ts", ".js"],
|
|
28
|
-
"exclude_dirs": ["components", "composables", "hooks", "utils", "mixins", "directives", "
|
|
28
|
+
"exclude_dirs": ["components", "composables", "hooks", "utils", "mixins", "directives", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
29
29
|
"entry_patterns": ["src/views/**/*.vue", "src/components/**/*.vue", "pages/**/*.vue"],
|
|
30
30
|
"api_call_patterns": ["axios.", "fetch(", "$http", "useFetch"],
|
|
31
31
|
"state_management": ["Pinia", "Vuex", "ref", "reactive", "computed"],
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"angular": {
|
|
36
36
|
"extensions": [".ts", ".html", ".scss", ".css"],
|
|
37
|
-
"exclude_dirs": ["components", "directives", "pipes", "guards", "interceptors", "services", "
|
|
37
|
+
"exclude_dirs": ["components", "directives", "pipes", "guards", "interceptors", "services", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
38
38
|
"entry_patterns": ["src/app/components/**/*.ts", "src/app/pages/**/*.ts"],
|
|
39
39
|
"api_call_patterns": ["HttpClient", "http.get", "http.post"],
|
|
40
40
|
"state_management": ["RxJS", "NgRx", "BehaviorSubject", "Observable"],
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
},
|
|
44
44
|
"nextjs": {
|
|
45
45
|
"extensions": [".tsx", ".ts", ".jsx", ".js"],
|
|
46
|
-
"exclude_dirs": ["components", "hooks", "lib", "utils", "contexts", "api", "
|
|
46
|
+
"exclude_dirs": ["components", "hooks", "lib", "utils", "contexts", "api", "views", "pages", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
47
47
|
"entry_patterns": ["app/**/*.{tsx,jsx}", "pages/**/*.{tsx,jsx}"],
|
|
48
48
|
"api_call_patterns": ["fetch(", "axios.", "useSWR", "React Query"],
|
|
49
49
|
"state_management": ["useState", "Zustand", "Redux", "Context API"],
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
},
|
|
53
53
|
"nuxt": {
|
|
54
54
|
"extensions": [".vue", ".ts", ".js"],
|
|
55
|
-
"exclude_dirs": ["components", "composables", "utils", "plugins", "middleware", "
|
|
55
|
+
"exclude_dirs": ["components", "composables", "utils", "plugins", "middleware", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
56
56
|
"entry_patterns": ["pages/**/*.vue", "components/**/*.vue"],
|
|
57
57
|
"api_call_patterns": ["$fetch", "useFetch", "axios."],
|
|
58
58
|
"state_management": ["Pinia", "useState", "composables"],
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
},
|
|
62
62
|
"svelte": {
|
|
63
63
|
"extensions": [".svelte", ".ts", ".js"],
|
|
64
|
-
"exclude_dirs": ["components", "lib", "utils", "stores", "actions", "
|
|
64
|
+
"exclude_dirs": ["components", "lib", "utils", "stores", "actions", "views", "pages", "api", "layout", "layouts", "assets", "store", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
65
65
|
"entry_patterns": ["src/**/*.svelte", "routes/**/*.svelte"],
|
|
66
66
|
"api_call_patterns": ["fetch(", "axios."],
|
|
67
67
|
"state_management": ["writable", "readable", "derived", "Svelte Store"],
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
},
|
|
82
82
|
"react-native": {
|
|
83
83
|
"extensions": [".tsx", ".ts", ".jsx", ".js"],
|
|
84
|
-
"exclude_dirs": ["components", "hooks", "utils", "contexts", "navigations", "
|
|
84
|
+
"exclude_dirs": ["components", "hooks", "utils", "contexts", "navigations", "views", "pages", "api", "screens", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
|
|
85
85
|
"entry_patterns": ["src/screens/**/*.{tsx,jsx}", "src/components/**/*.{tsx,jsx}"],
|
|
86
86
|
"api_call_patterns": ["fetch(", "axios.", "apiClient."],
|
|
87
87
|
"state_management": ["useState", "Redux", "MobX", "Zustand", "Recoil"],
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
},
|
|
91
91
|
"uniapp": {
|
|
92
92
|
"extensions": [".vue", ".ts", ".js"],
|
|
93
|
-
"exclude_dirs": ["components", "composables", "utils", "mixins", "directives", "
|
|
93
|
+
"exclude_dirs": ["components", "composables", "utils", "mixins", "directives", "views", "pages", "api", "static", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs", "http", "tabbar", "constants", "common", "hooks", "style"],
|
|
94
94
|
"exclude_file_suffixes": [],
|
|
95
95
|
"strip_module_prefixes": ["pages-"],
|
|
96
96
|
"entry_patterns": ["pages/**/*.vue", "components/**/*.vue"],
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
},
|
|
118
118
|
"miniprogram": {
|
|
119
119
|
"extensions": [".js", ".ts", ".wxml", ".wxss", ".json"],
|
|
120
|
-
"exclude_dirs": ["components", "utils", "behaviors", "mixins", "
|
|
120
|
+
"exclude_dirs": ["components", "utils", "behaviors", "mixins", "views", "pages", "api", "static", "assets", "store", "stores", "router", "routes", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs", "http", "tabbar", "constants", "common", "hooks", "style"],
|
|
121
121
|
"exclude_file_suffixes": [],
|
|
122
122
|
"strip_module_prefixes": ["pages-"],
|
|
123
123
|
"entry_patterns": ["pages/**/*.js", "pages/**/*.ts", "components/**/*.js"],
|