speccrew 0.1.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/.speccrew/agents/speccrew-feature-designer.md +142 -0
- package/.speccrew/agents/speccrew-product-manager.md +61 -0
- package/.speccrew/agents/speccrew-system-designer.md +200 -0
- package/.speccrew/agents/speccrew-system-developer.md +238 -0
- package/.speccrew/agents/speccrew-task-worker.md +80 -0
- package/.speccrew/agents/speccrew-team-leader.md +92 -0
- package/.speccrew/agents/speccrew-test-manager.md +313 -0
- package/.speccrew/skills/speccrew-create-agents/SKILL.md +98 -0
- package/.speccrew/skills/speccrew-create-agents/templates/agents/designer-agent.md +54 -0
- package/.speccrew/skills/speccrew-create-agents/templates/agents/dev-agent.md +79 -0
- package/.speccrew/skills/speccrew-create-agents/templates/agents/test-agent.md +80 -0
- package/.speccrew/skills/speccrew-dev-backend/SKILL.md +205 -0
- package/.speccrew/skills/speccrew-dev-backend/templates/TASK-RECORD-TEMPLATE.md +118 -0
- package/.speccrew/skills/speccrew-dev-desktop/SKILL.md +258 -0
- package/.speccrew/skills/speccrew-dev-desktop/templates/TASK-RECORD-TEMPLATE.md +161 -0
- package/.speccrew/skills/speccrew-dev-frontend/SKILL.md +202 -0
- package/.speccrew/skills/speccrew-dev-frontend/templates/TASK-RECORD-TEMPLATE.md +115 -0
- package/.speccrew/skills/speccrew-dev-mobile/SKILL.md +200 -0
- package/.speccrew/skills/speccrew-dev-mobile/templates/TASK-RECORD-TEMPLATE.md +125 -0
- package/.speccrew/skills/speccrew-fd-api-contract/SKILL.md +73 -0
- package/.speccrew/skills/speccrew-fd-api-contract/templates/API-CONTRACT-TEMPLATE.md +96 -0
- package/.speccrew/skills/speccrew-fd-feature-design/SKILL.md +395 -0
- package/.speccrew/skills/speccrew-fd-feature-design/templates/FEATURE-SPEC-TEMPLATE.md +387 -0
- package/.speccrew/skills/speccrew-get-timestamp/SKILL.md +80 -0
- package/.speccrew/skills/speccrew-get-timestamp/scripts/get-timestamp.js +35 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/SKILL.md +1116 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-FASTAPI.md +462 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-JAVA.md +480 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-NET.md +464 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE.md +480 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/MODULE-OVERVIEW-TEMPLATE.md +367 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/SKILL.md +667 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/STATUS-FORMATS.md +74 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/batch-orchestrator.js +176 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/get-next-batch.js +150 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/get-pending-features.js +106 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/mark-stale.js +249 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/process-batch-results.js +848 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/update-feature-status.js +226 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-init-features/SKILL.md +264 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-init-features/examples/features.json +34 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-init-features/scripts/generate-inventory.js +867 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-init-features/scripts/test-inventory.js +26 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/SKILL.md +165 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/apply-module-mapping.js +208 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/extract-module-summary.js +180 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/reindex-modules.js +358 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/SKILL.md +1055 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-DESKTOP.md +303 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-ELECTRON.md +327 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MINIAPP.md +292 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MOBILE.md +281 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI.md +324 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/SKILL.md +270 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/COMPONENT-PATTERN-TEMPLATE.md +33 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/LAYOUT-PATTERN-TEMPLATE.md +33 -0
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/PAGE-TYPE-TEMPLATE.md +33 -0
- package/.speccrew/skills/speccrew-knowledge-graph-query/SKILL.md +229 -0
- package/.speccrew/skills/speccrew-knowledge-graph-query/scripts/graph-query.js +549 -0
- package/.speccrew/skills/speccrew-knowledge-graph-write/SKILL.md +181 -0
- package/.speccrew/skills/speccrew-knowledge-graph-write/scripts/graph-write.js +651 -0
- package/.speccrew/skills/speccrew-knowledge-module-summarize/SKILL.md +305 -0
- package/.speccrew/skills/speccrew-knowledge-module-summarize/templates/MODULE-OVERVIEW-TEMPLATE.md +400 -0
- package/.speccrew/skills/speccrew-knowledge-system-summarize/SKILL.md +351 -0
- package/.speccrew/skills/speccrew-knowledge-system-summarize/templates/SYSTEM-OVERVIEW-TEMPLATE.md +294 -0
- package/.speccrew/skills/speccrew-knowledge-techs-dispatch/SKILL.md +683 -0
- package/.speccrew/skills/speccrew-knowledge-techs-dispatch/STATUS-FORMATS.md +550 -0
- package/.speccrew/skills/speccrew-knowledge-techs-dispatch/templates/techs-manifest-EXAMPLE.json +35 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/SKILL.md +1087 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/ARCHITECTURE-TEMPLATE.md +240 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/COLOR-SYSTEM-TEMPLATE.md +68 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/COMPONENT-LIBRARY-TEMPLATE.md +86 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-BUILD-TEMPLATE.md +466 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DATA-TEMPLATE.md +432 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DESIGN-TEMPLATE.md +1209 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DEV-TEMPLATE.md +1433 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-SYSTEM-TEST-TEMPLATE.md +1052 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-UNIT-TEST-TEMPLATE.md +946 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/INDEX-TEMPLATE.md +29 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/PAGE-LAYOUTS-TEMPLATE.md +69 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/PAGE-TYPE-SUMMARY-TEMPLATE.md +74 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/TECH-STACK-TEMPLATE.md +232 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate-conventions/SKILL.md +628 -0
- package/.speccrew/skills/speccrew-knowledge-techs-generate-ui-style/SKILL.md +392 -0
- package/.speccrew/skills/speccrew-knowledge-techs-index/SKILL.md +489 -0
- package/.speccrew/skills/speccrew-knowledge-techs-index/templates/INDEX-TEMPLATE.md +243 -0
- package/.speccrew/skills/speccrew-knowledge-techs-init/SKILL.md +269 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/SKILL.md +562 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/BUSINESS-COMPONENTS-TEMPLATE.md +171 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMMON-COMPONENTS-TEMPLATE.md +177 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMPONENT-INDIVIDUAL-TEMPLATE.md +80 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMPONENT-LIBRARY-TEMPLATE.md +118 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/LAYOUT-INDIVIDUAL-TEMPLATE.md +97 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/LAYOUT-PATTERNS-TEMPLATE.md +208 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/NAVIGATION-PATTERNS-TEMPLATE.md +157 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/PAGE-TYPE-INDIVIDUAL-TEMPLATE.md +123 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/PAGE-TYPE-SUMMARY-TEMPLATE.md +58 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/SPACING-TEMPLATE.md +119 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/STYLE-SYSTEM-TEMPLATE.md +117 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/TYPOGRAPHY-TEMPLATE.md +107 -0
- package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/UI-STYLE-GUIDE-TEMPLATE.md +171 -0
- package/.speccrew/skills/speccrew-pm-requirement-analysis/SKILL.md +434 -0
- package/.speccrew/skills/speccrew-pm-requirement-analysis/templates/BIZS-MODELING-TEMPLATE.md +332 -0
- package/.speccrew/skills/speccrew-pm-requirement-analysis/templates/PRD-TEMPLATE.md +200 -0
- package/.speccrew/skills/speccrew-pm-requirement-assess/SKILL.md +195 -0
- package/.speccrew/skills/speccrew-project-diagnosis/SKILL.md +208 -0
- package/.speccrew/skills/speccrew-project-diagnosis/templates/DIAGNOSIS-REPORT-TEMPLATE.md +202 -0
- package/.speccrew/skills/speccrew-sd-backend/SKILL.md +188 -0
- package/.speccrew/skills/speccrew-sd-backend/templates/INDEX-TEMPLATE.md +85 -0
- package/.speccrew/skills/speccrew-sd-backend/templates/SD-BACKEND-TEMPLATE.md +269 -0
- package/.speccrew/skills/speccrew-sd-desktop/SKILL.md +192 -0
- package/.speccrew/skills/speccrew-sd-desktop/templates/INDEX-TEMPLATE.md +271 -0
- package/.speccrew/skills/speccrew-sd-desktop/templates/SD-DESKTOP-TEMPLATE.md +673 -0
- package/.speccrew/skills/speccrew-sd-frontend/SKILL.md +176 -0
- package/.speccrew/skills/speccrew-sd-frontend/templates/INDEX-TEMPLATE.md +184 -0
- package/.speccrew/skills/speccrew-sd-frontend/templates/SD-FRONTEND-TEMPLATE.md +382 -0
- package/.speccrew/skills/speccrew-sd-mobile/SKILL.md +189 -0
- package/.speccrew/skills/speccrew-sd-mobile/templates/INDEX-TEMPLATE.md +219 -0
- package/.speccrew/skills/speccrew-sd-mobile/templates/SD-MOBILE-TEMPLATE.md +534 -0
- package/.speccrew/skills/speccrew-test-case-design/SKILL.md +284 -0
- package/.speccrew/skills/speccrew-test-case-design/templates/TEST-CASE-DESIGN-TEMPLATE.md +263 -0
- package/.speccrew/skills/speccrew-test-code-gen/SKILL.md +313 -0
- package/.speccrew/skills/speccrew-test-code-gen/templates/TEST-CODE-PLAN-TEMPLATE.md +180 -0
- package/.speccrew/skills/speccrew-test-execute/SKILL.md +283 -0
- package/.speccrew/skills/speccrew-test-execute/templates/BUG-REPORT-TEMPLATE.md +50 -0
- package/.speccrew/skills/speccrew-test-execute/templates/TEST-REPORT-TEMPLATE.md +57 -0
- package/.speccrew/skills/speccrew-workflow-diagnose/SKILL.md +155 -0
- package/LICENSE +21 -0
- package/README.ar.md +318 -0
- package/README.en.md +318 -0
- package/README.es.md +318 -0
- package/README.md +340 -0
- package/bin/cli.js +62 -0
- package/lib/commands/doctor.js +138 -0
- package/lib/commands/init.js +231 -0
- package/lib/commands/list.js +114 -0
- package/lib/commands/uninstall.js +117 -0
- package/lib/commands/update.js +351 -0
- package/lib/ide-adapters.js +73 -0
- package/lib/utils.js +104 -0
- package/package.json +28 -0
- package/workspace-template/docs/configs/document-templates.json +667 -0
- package/workspace-template/docs/configs/platform-mapping.json +194 -0
- package/workspace-template/docs/configs/tech-stack-mappings.json +313 -0
- package/workspace-template/docs/configs/validation-rules.json +87 -0
- package/workspace-template/docs/rules/mermaid-rule.md +114 -0
- package/workspace-template/docs/solutions/Agent/346/212/200/350/203/275/345/256/232/344/271/211+/351/234/200/346/261/202/346/226/207/346/241/243+UML/344/275/277/347/224/250/346/250/241/346/235/277/357/274/210ISA-95/345/205/255/346/256/265/345/274/217/350/236/215/345/220/210/347/211/210/357/274/211.md +586 -0
- package/workspace-template/docs/solutions/agent-knowledge-map.md +238 -0
- package/workspace-template/docs/solutions/bizs-knowledge-pipeline.md +678 -0
- package/workspace-template/docs/solutions/harness.md +410 -0
- package/workspace-template/docs/solutions/knowledge-incremental-sync-spec.md +943 -0
- package/workspace-template/docs/solutions/techs-knowledge-pipeline.md +803 -0
- package/workspace-template/docs/solutions/workspace-structure.md +318 -0
|
@@ -0,0 +1,1055 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: speccrew-knowledge-bizs-ui-analyze
|
|
3
|
+
description: Analyze a single UI feature from source code to extract business functionality and generate feature documentation. Used by Worker Agent in parallel execution during knowledge base initialization Stage 2. Each worker analyzes one feature (e.g., one Vue/React page component).
|
|
4
|
+
tools: Read, Write, Edit, Glob, Grep, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# UI Feature Analysis - Single Feature
|
|
8
|
+
|
|
9
|
+
> **CRITICAL CONSTRAINT**: DO NOT create temporary scripts, batch files, or workaround code files (`.py`, `.bat`, `.sh`, `.ps1`, etc.) under any circumstances. If execution encounters errors, STOP and report the exact error. Fixes must be applied to the Skill definition or source scripts — not patched at runtime.
|
|
10
|
+
|
|
11
|
+
Analyze one specific UI feature from source code, extract business functionality, and generate feature documentation. This skill operates at feature granularity - one worker per feature file.
|
|
12
|
+
|
|
13
|
+
## Trigger Scenarios
|
|
14
|
+
|
|
15
|
+
- "Analyze feature {fileName} from source code"
|
|
16
|
+
- "Extract UI functionality from feature {fileName}"
|
|
17
|
+
- "Generate documentation for feature {fileName}"
|
|
18
|
+
- "Analyze UI feature from features.json"
|
|
19
|
+
|
|
20
|
+
## Input Variables
|
|
21
|
+
|
|
22
|
+
| Variable | Type | Description | Example |
|
|
23
|
+
|----------|------|-------------|---------|
|
|
24
|
+
| `{{feature}}` | object | Complete feature object from features.json | - |
|
|
25
|
+
| `{{fileName}}` | string | Feature file name | `"index"`, `"UserForm"` |
|
|
26
|
+
| `{{sourcePath}}` | string | Relative path to source file | `"frontend-web/src/views/system/user/index.vue"` |
|
|
27
|
+
| `{{documentPath}}` | string | Target path for generated document | `"speccrew-workspace/knowledges/bizs/web-vue/src/views/system/user/index.md"` |
|
|
28
|
+
| `{{module}}` | string | Business module name (from feature.module) | `"system"`, `"trade"`, `"_root"` |
|
|
29
|
+
| `{{analyzed}}` | boolean | Analysis status flag | `true` / `false` |
|
|
30
|
+
| `{{platform_type}}` | string | Platform type | `"web"`, `"mobile"` |
|
|
31
|
+
| `{{platform_subtype}}` | string | Platform subtype | `"vue"`, `"react"` |
|
|
32
|
+
| `{{tech_stack}}` | array | Platform tech stack | `["vue", "typescript"]` |
|
|
33
|
+
| `{{language}}` | string | **REQUIRED** - Target language for generated content | `"zh"`, `"en"` |
|
|
34
|
+
| `{{completed_dir}}` | string | Marker files output directory | `"speccrew-workspace/knowledges/base/sync-state/knowledge-bizs/completed"` |
|
|
35
|
+
| `{{sourceFile}}` | string | Source features JSON file name | `"features-web-vue.json"` |
|
|
36
|
+
|
|
37
|
+
## Language Adaptation
|
|
38
|
+
|
|
39
|
+
**CRITICAL**: Generate all content in the language specified by the `{{language}}` parameter.
|
|
40
|
+
|
|
41
|
+
- `{{language}} == "zh"` → Generate all content in 中文
|
|
42
|
+
- `{{language}} == "en"` → Generate all content in English
|
|
43
|
+
- Other languages → Use the specified language
|
|
44
|
+
|
|
45
|
+
**All output content (feature names, descriptions, business rules) must be in the target language only.**
|
|
46
|
+
|
|
47
|
+
## Output Variables
|
|
48
|
+
|
|
49
|
+
| Variable | Type | Description |
|
|
50
|
+
|----------|------|-------------|
|
|
51
|
+
| `{{status}}` | string | Analysis status: `"success"`, `"partial"`, or `"failed"` |
|
|
52
|
+
| `{{feature_name}}` | string | Name of the analyzed feature |
|
|
53
|
+
| `{{generated_file}}` | string | Path to the generated documentation file |
|
|
54
|
+
| `{{message}}` | string | Summary message for status update |
|
|
55
|
+
|
|
56
|
+
## Output
|
|
57
|
+
|
|
58
|
+
## 🚫 ABSOLUTE PROHIBITIONS (ZERO TOLERANCE)
|
|
59
|
+
|
|
60
|
+
> **These rules apply to ALL steps. Violation = task failure.**
|
|
61
|
+
|
|
62
|
+
1. **FORBIDDEN: `create_file` for documents** — NEVER use `create_file` to write the analysis document (`{{documentPath}}`). Documents MUST be created by copying the template (Step 5a) then filling sections with `search_replace` (Step 5b). `create_file` produces truncated output on large files.
|
|
63
|
+
|
|
64
|
+
2. **FORBIDDEN: File deletion** — NEVER use `Remove-Item`, `del`, `rm`, `fs.unlinkSync`, or any delete command on generated files. If a file is malformed, fix it with `search_replace`.
|
|
65
|
+
|
|
66
|
+
3. **FORBIDDEN: Full-file rewrite** — NEVER replace the entire document content in a single operation. Always use targeted `search_replace` on specific sections.
|
|
67
|
+
|
|
68
|
+
4. **MANDATORY: Template-first workflow** — Step 5a (copy template) MUST execute before Step 5b (fill sections). Skipping Step 5a and writing content directly is FORBIDDEN.
|
|
69
|
+
|
|
70
|
+
## Output (Files)
|
|
71
|
+
|
|
72
|
+
**Generated Files (MANDATORY - Task is NOT complete until all files are written):**
|
|
73
|
+
1. `{{documentPath}}` - Feature documentation file
|
|
74
|
+
2. `{{completed_dir}}/{{fileName}}.done.json` - Completion status marker
|
|
75
|
+
3. `{{completed_dir}}/{{fileName}}.graph.json` - Graph data marker
|
|
76
|
+
|
|
77
|
+
**Return Value (JSON format):**
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"status": "success|partial|failed",
|
|
81
|
+
"feature": {
|
|
82
|
+
"fileName": "index",
|
|
83
|
+
"sourcePath": "frontend-web/src/views/system/user/index.vue"
|
|
84
|
+
},
|
|
85
|
+
"platformType": "web",
|
|
86
|
+
"module": "system",
|
|
87
|
+
"featureName": "user-management",
|
|
88
|
+
"generatedFile": "speccrew-workspace/knowledges/bizs/web-vue/src/views/system/user/index.md",
|
|
89
|
+
"message": "Successfully analyzed user-management feature from index.vue"
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The return value is used by dispatch to update the feature status in `features-{platform}.json`.
|
|
94
|
+
|
|
95
|
+
## Workflow
|
|
96
|
+
|
|
97
|
+
```mermaid
|
|
98
|
+
graph TB
|
|
99
|
+
Start([Start]) --> Step1[Step 1 Read Analysis Template]
|
|
100
|
+
Step1 --> Step2[Step 2 Read Feature File and Analyze UI Structure]
|
|
101
|
+
Step2 --> Step3[Step 3 Extract Business Features]
|
|
102
|
+
Step3 --> Step4[Step 4 Find Referencing Pages]
|
|
103
|
+
Step4 --> Step5a[Step 5a Copy Template to Document Path]
|
|
104
|
+
Step5a --> Step5b[Step 5b Fill Each Section Using search_replace]
|
|
105
|
+
Step5b --> Step6[Step 6 Report Results]
|
|
106
|
+
Step6 --> Step7[Step 7 Write Completion Markers]
|
|
107
|
+
Step7 --> End([End])
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### Step 1: Read Analysis Template
|
|
113
|
+
|
|
114
|
+
**Step 1 Status: 🔄 IN PROGRESS**
|
|
115
|
+
|
|
116
|
+
1. **Check Analysis Status:**
|
|
117
|
+
- If `{{analyzed}}` is `true`, output "Step 1 Status: ⏭️ SKIPPED (already analyzed)" and skip to Step 6 with status="skipped"
|
|
118
|
+
- If `{{analyzed}}` is `false`, proceed
|
|
119
|
+
|
|
120
|
+
2. **Read the appropriate template based on platform type:**
|
|
121
|
+
|
|
122
|
+
**Template Selection:**
|
|
123
|
+
|
|
124
|
+
| Platform Type | Template File | Description |
|
|
125
|
+
|--------------|---------------|-------------|
|
|
126
|
+
| Web (Vue/React/Angular) | `templates/FEATURE-DETAIL-TEMPLATE-UI.md` | Default/Generic web template |
|
|
127
|
+
| Mobile Native (iOS/Android) | `templates/FEATURE-DETAIL-TEMPLATE-UI-MOBILE.md` | Swift/Kotlin/React Native/Flutter |
|
|
128
|
+
| Mini Program | `templates/FEATURE-DETAIL-TEMPLATE-UI-MINIAPP.md` | WeChat/Alipay/ByteDance |
|
|
129
|
+
| Desktop (WinForms/WPF) | `templates/FEATURE-DETAIL-TEMPLATE-UI-DESKTOP.md` | C# .NET Desktop |
|
|
130
|
+
| Desktop (Electron) | `templates/FEATURE-DETAIL-TEMPLATE-UI-ELECTRON.md` | HTML/JS Desktop |
|
|
131
|
+
| Unknown/Other | `templates/FEATURE-DETAIL-TEMPLATE-UI.md` | Default to generic web template |
|
|
132
|
+
|
|
133
|
+
Select template based on `{{platform_type}}` and `{{platform_subtype}}` parameters.
|
|
134
|
+
|
|
135
|
+
3. **Understand template structure:**
|
|
136
|
+
- Read the template content
|
|
137
|
+
- Understand the required information dimensions and sections
|
|
138
|
+
- Note the analysis requirements for each section
|
|
139
|
+
- Output: "Step 1 Status: ✅ COMPLETED - Read template for {{platform_type}}/{{platform_subtype}}"
|
|
140
|
+
|
|
141
|
+
> ⚠️ CRITICAL: The template defines the EXACT output structure. You MUST:
|
|
142
|
+
> - Generate ALL sections listed in the template, in the SAME order
|
|
143
|
+
> - Fill ALL tables defined in the template (use "N/A" for unavailable data, never skip a table)
|
|
144
|
+
> - Follow the EXACT heading hierarchy and numbering from the template
|
|
145
|
+
> - Do NOT invent your own section structure or reorganize sections
|
|
146
|
+
|
|
147
|
+
### Step 2: Read Feature File and Analyze UI Structure
|
|
148
|
+
|
|
149
|
+
**Step 2 Status: 🔄 IN PROGRESS**
|
|
150
|
+
|
|
151
|
+
**Prerequisites:**
|
|
152
|
+
- Template has been read and understood
|
|
153
|
+
- Feature file is a page/component file (e.g., `frontend-web/src/views/system/user/index.vue`)
|
|
154
|
+
|
|
155
|
+
**Actions:**
|
|
156
|
+
1. **Locate and Read the feature file:**
|
|
157
|
+
- Use `{{sourcePath}}` as the relative file path from project root
|
|
158
|
+
- Read the feature file content
|
|
159
|
+
|
|
160
|
+
2. **Analyze page/screen/window structure, components, props, state management** guided by the template requirements
|
|
161
|
+
|
|
162
|
+
> ⚠️ When analyzing, systematically gather information for EVERY section in the template:
|
|
163
|
+
> - For each template section, identify what source code information is needed
|
|
164
|
+
> - If source code doesn't provide enough info for a section, note it for "N/A" filling later
|
|
165
|
+
> - Do NOT skip gathering info just because it seems minor
|
|
166
|
+
|
|
167
|
+
3. **Deep Analysis Requirements:**
|
|
168
|
+
- Analyze complete component interfaces: props, events, slots
|
|
169
|
+
- Trace API call chains and data flow paths
|
|
170
|
+
- Analyze routing configuration and state management integration
|
|
171
|
+
- Document component dependencies and injection patterns
|
|
172
|
+
|
|
173
|
+
**Analysis Scope:**
|
|
174
|
+
|
|
175
|
+
| Template Section | Information to Extract | Source |
|
|
176
|
+
|------------------|------------------------|--------|
|
|
177
|
+
| 1. Content Overview | Feature name, document path, source path, description | `{{fileName}}`, `{{documentPath}}`, `{{sourcePath}}` |
|
|
178
|
+
| 2. Interface Prototype | Main page and embedded modals ASCII wireframes, element descriptions | Component template, JSX/Vue template |
|
|
179
|
+
| 3. Business Flow | Page initialization, component events (onClick/onChange/etc), timer/websocket, page close flows; **MUST also include API call sequence analysis and boundary scenarios (see below)** | Event handlers, lifecycle hooks, timers |
|
|
180
|
+
| 4. Data Field Definition | Page state fields, form fields with validation; **MUST also include data binding mapping and reactive dependency chain (see below)** | State definitions, form schemas, v-model bindings, watch/computed |
|
|
181
|
+
| 5. References | APIs, shared methods, shared components, other pages this page references, pages that reference this page | API calls, imports, navigation, search other pages for references to this page |
|
|
182
|
+
| 6. Business Rules | Permission rules, business logic rules, validation rules | Code logic, comments |
|
|
183
|
+
| 7. Notes and Additional Info | Compatibility, pending confirmations, extension notes; **MUST also include performance and scalability analysis (see below)** | Full source analysis |
|
|
184
|
+
|
|
185
|
+
**Enhanced Analysis Requirements:**
|
|
186
|
+
|
|
187
|
+
#### A. API Call Sequence Analysis (MUST include in Section 3 Business Flow)
|
|
188
|
+
|
|
189
|
+
For EVERY business flow that involves multiple API calls, Worker MUST analyze:
|
|
190
|
+
- Whether API calls are executed **serially** or **in parallel** (Promise.all vs sequential await)
|
|
191
|
+
- The timing logic inside `try/catch/finally` blocks (e.g., when loading state is set and restored)
|
|
192
|
+
- Whether **race conditions** exist between multiple API calls
|
|
193
|
+
- If one API fails, whether subsequent APIs will still execute
|
|
194
|
+
|
|
195
|
+
Add a **时序分析 / Sequence Analysis** note block after each multi-API flow:
|
|
196
|
+
```markdown
|
|
197
|
+
**时序分析**:
|
|
198
|
+
- getUserRoleList 和 getSimpleRoleList 为串行调用
|
|
199
|
+
- formLoading 在 finally 中恢复,但 getSimpleRoleList 在 finally 之外执行
|
|
200
|
+
- ⚠️ 竞态风险:getUserRoleList 失败时,getSimpleRoleList 仍会执行
|
|
201
|
+
```
|
|
202
|
+
If a flow only has a single API call, SHOULD still note "单一 API 调用,无竞态风险" for clarity.
|
|
203
|
+
|
|
204
|
+
#### B. Boundary Scenario Flows (MUST include in Section 3 Business Flow)
|
|
205
|
+
|
|
206
|
+
Beyond the main happy-path flow, Worker MUST identify and document key boundary scenarios:
|
|
207
|
+
- **Empty data / empty list**: What is displayed when API returns empty results?
|
|
208
|
+
- **Error / exception branches**: What happens on API failure, network timeout, or server error?
|
|
209
|
+
- **State reset / cleanup**: When and how is form/state reset (e.g., dialog close, cancel button)?
|
|
210
|
+
- **Concurrent operation scenarios**: What happens on rapid consecutive clicks (double submit risk)?
|
|
211
|
+
|
|
212
|
+
Document these as additional sub-sections or a dedicated **边界场景 / Boundary Scenarios** table within the relevant flow:
|
|
213
|
+
```markdown
|
|
214
|
+
**边界场景**:
|
|
215
|
+
| 场景 | 触发条件 | 处理方式 |
|
|
216
|
+
|------|----------|----------|
|
|
217
|
+
| 空列表 | API 返回 data=[] | 展示空状态提示 |
|
|
218
|
+
| API 失败 | 网络超时/服务端报错 | ElMessage 提示错误信息 |
|
|
219
|
+
| 状态重置 | 关闭弹窗 | resetForm() 清空所有字段 |
|
|
220
|
+
| 重复提交 | 按钮未 disable | ⚠️ 存在重复提交风险 |
|
|
221
|
+
```
|
|
222
|
+
If no boundary scenarios are identifiable from code, SHOULD explicitly state "无明显边界场景处理".
|
|
223
|
+
|
|
224
|
+
#### C. Data Binding Relationship (MUST include in Section 4 Data Field Definition)
|
|
225
|
+
|
|
226
|
+
Beyond the static field definition tables, Worker MUST supplement:
|
|
227
|
+
|
|
228
|
+
**Data Binding Mapping Table** — for each reactive field, trace its full binding chain:
|
|
229
|
+
|
|
230
|
+
```markdown
|
|
231
|
+
**数据绑定映射**:
|
|
232
|
+
| 字段 | UI 绑定 | 数据流向 | 同步时机 |
|
|
233
|
+
|------|---------|----------|----------|
|
|
234
|
+
| formData.roleIds | `<el-transfer v-model>` | 组件内部 ↔ formData | 用户操作穿梭框时实时同步 |
|
|
235
|
+
| roleList | `<el-transfer :data>` | API → roleList | 弹窗打开时一次性加载 |
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Reactive Dependency Chain** — document all `watch` and `computed` dependencies:
|
|
239
|
+
```markdown
|
|
240
|
+
**响应式依赖链**:
|
|
241
|
+
- watch(props.userId) → 触发 getUserRoleList() → 更新 formData.roleIds
|
|
242
|
+
- computed: 无
|
|
243
|
+
```
|
|
244
|
+
If the component has no `watch` or `computed`, MUST explicitly state "无响应式依赖(无 watch / computed)".
|
|
245
|
+
|
|
246
|
+
#### D. Performance and Scalability Analysis (MUST include in Section 7 Notes)
|
|
247
|
+
|
|
248
|
+
Worker MUST proactively analyze and document in Section 7:
|
|
249
|
+
- **Full-load performance risks**: Identify any dropdown/selector that loads ALL records without pagination (e.g., `getSimpleRoleList` fetching all roles)
|
|
250
|
+
- **Large-data UI performance risks**: Assess UI component behavior under large datasets (e.g., el-transfer with thousands of items)
|
|
251
|
+
- **Scalability limitations**: Document any hardcoded assumptions that limit extensibility
|
|
252
|
+
- **Pending confirmations (design questions)**: SHOULD raise questions about design reasonability and suggest improvements
|
|
253
|
+
|
|
254
|
+
Example format:
|
|
255
|
+
```markdown
|
|
256
|
+
### 7.x 性能与可扩展性考量
|
|
257
|
+
|
|
258
|
+
- ⚠️ **全量加载风险**:getSimpleRoleList 全量加载角色列表,角色数量大时存在性能隐患
|
|
259
|
+
- ⚠️ **UI 渲染风险**:el-transfer 组件在角色数量超过 500 条时渲染性能明显下降
|
|
260
|
+
- **可扩展性限制**:当前设计不支持角色分页搜索
|
|
261
|
+
|
|
262
|
+
**待确认事项**:
|
|
263
|
+
- [ ] 是否需要对角色列表增加搜索过滤功能?
|
|
264
|
+
- [ ] 是否应将全量加载改为分页 + 搜索模式以支持大规模角色场景?
|
|
265
|
+
```
|
|
266
|
+
If no obvious performance risks exist, SHOULD explicitly note "当前数据规模下无明显性能风险".
|
|
267
|
+
|
|
268
|
+
**Output:** "Step 2 Status: ✅ COMPLETED - Read {{sourcePath}} ({{lineCount}} lines), Analyzed {{componentCount}} components, {{eventCount}} events"
|
|
269
|
+
|
|
270
|
+
### Step 3: Extract Business Features
|
|
271
|
+
|
|
272
|
+
**Step 3 Status: 🔄 IN PROGRESS**
|
|
273
|
+
|
|
274
|
+
Each user interaction or page initialization in the feature file = one business feature.
|
|
275
|
+
|
|
276
|
+
**CRITICAL - Analysis Scope Limitation:**
|
|
277
|
+
|
|
278
|
+
- **ONLY analyze the single feature file specified by `{{sourcePath}}`**
|
|
279
|
+
- **DO NOT analyze or generate documentation for other files in the same directory**
|
|
280
|
+
- **DO NOT generate separate documents for embedded components/modals**
|
|
281
|
+
|
|
282
|
+
**Extraction Guidelines:**
|
|
283
|
+
|
|
284
|
+
- Draw ASCII wireframes for **main page only** and **embedded modals/dialogs that are defined within the same file**
|
|
285
|
+
- For **external pages/components** (imported from other files):
|
|
286
|
+
- Only add reference links in Section 5.4 (Other Pages) or 5.3 (Shared Components)
|
|
287
|
+
- DO NOT draw wireframes for them
|
|
288
|
+
- DO NOT analyze their internal implementation
|
|
289
|
+
- Document ALL business flows: page init, component events (onClick/onChange/onBlur/etc), timers, websocket, page close
|
|
290
|
+
- **MUST analyze API call sequences**: identify serial vs parallel calls, try/catch/finally timing, race conditions
|
|
291
|
+
- **MUST document boundary scenarios**: empty data, error branches, state reset, concurrent operations
|
|
292
|
+
- For APIs and shared methods in flowcharts: show name, type, and main function only (no deep analysis)
|
|
293
|
+
- **Generate Mermaid flowcharts following `speccrew-workspace/docs/rules/mermaid-rule.md` guidelines:**
|
|
294
|
+
- Use `graph TB` or `graph LR` syntax (not `flowchart`)
|
|
295
|
+
- No parentheses `()` in node text (e.g., use `open method` instead of `open()`)
|
|
296
|
+
- No HTML tags like `<br/>`
|
|
297
|
+
- No `style` definitions
|
|
298
|
+
- No nested `subgraph`
|
|
299
|
+
- No special characters in node text
|
|
300
|
+
- Use `{{language}}` for all extracted content naming
|
|
301
|
+
|
|
302
|
+
4. **Build Graph Data** (per feature file):
|
|
303
|
+
|
|
304
|
+
While analyzing the feature, simultaneously extract graph nodes and edges:
|
|
305
|
+
|
|
306
|
+
**Nodes to Extract:**
|
|
307
|
+
|
|
308
|
+
| Node Type | Source | ID Format | Context Fields |
|
|
309
|
+
|-----------|--------|-----------|----------------|
|
|
310
|
+
| `page` | The analyzed page/screen | `page-{module}-{name}` | `route`, `components`, `events`, `platform` |
|
|
311
|
+
| `component` | Embedded or local components used | `component-{module}-{name}` | `props`, `events`, `slots` |
|
|
312
|
+
|
|
313
|
+
**Edges to Extract:**
|
|
314
|
+
|
|
315
|
+
| Edge Type | Direction | When to Create |
|
|
316
|
+
|-----------|-----------|----------------|
|
|
317
|
+
| `calls` | page → api | Page calls an API endpoint (from API service imports / HTTP requests) |
|
|
318
|
+
| `navigates-to` | page → page | Page navigates to another page (router.push, link, etc.) |
|
|
319
|
+
| `uses` | page → component | Page uses a shared/local component |
|
|
320
|
+
|
|
321
|
+
**CRITICAL - API Extraction Requirements (100% Coverage Mandatory):**
|
|
322
|
+
|
|
323
|
+
To ensure complete API coverage in the graph data, you MUST follow these requirements:
|
|
324
|
+
|
|
325
|
+
1. **Extract ALL Imported API Functions:**
|
|
326
|
+
- Scan the entire source file for ALL `import { ... } from '@/api/...'` or similar API import statements
|
|
327
|
+
- EVERY function imported from API modules MUST be extracted as a `calls` edge
|
|
328
|
+
- Do NOT filter or select only "main" or "core" APIs - include ALL of them
|
|
329
|
+
|
|
330
|
+
2. **API Call Categories to Cover:**
|
|
331
|
+
| Category | Examples | Where to Look |
|
|
332
|
+
|----------|----------|---------------|
|
|
333
|
+
| Page Initialization | `getList`, `getDetail`, `getPage` | `onMounted`, `created`, `useEffect` |
|
|
334
|
+
| Data Query | `getUserList`, `searchOrders` | Search forms, filter changes |
|
|
335
|
+
| Create Operations | `createUser`, `addOrder` | Form submission handlers |
|
|
336
|
+
| Update Operations | `updateUser`, `editOrder` | Edit form submissions |
|
|
337
|
+
| **Status Update** | `updateUserStatus`, `toggleEnable`, `setActive` | Status switch handlers, toggle buttons |
|
|
338
|
+
| **Special Operations** | `resetPassword`, `exportData`, `importData`, `batchDelete` | Action buttons, toolbar buttons |
|
|
339
|
+
| Delete Operations | `deleteUser`, `removeOrder` | Delete confirmation handlers |
|
|
340
|
+
| Dictionary/Options | `getDictList`, `getOptions` | Dropdown initialization |
|
|
341
|
+
|
|
342
|
+
3. **How to Identify API Calls:**
|
|
343
|
+
- Look for: `import { func1, func2 } from '@/api/xxx'` statements
|
|
344
|
+
- Look for: Direct API function calls in event handlers (`@click="handleSubmit"` → `handleSubmit()` calls API)
|
|
345
|
+
- Look for: API calls in lifecycle hooks (Vue: `onMounted`, React: `useEffect`)
|
|
346
|
+
- Look for: API calls in watch/computed setters
|
|
347
|
+
|
|
348
|
+
4. **API Coverage Verification Checklist:**
|
|
349
|
+
- [ ] List ALL imported API functions from the source file
|
|
350
|
+
- [ ] For each imported API, verify there is a corresponding `calls` edge
|
|
351
|
+
- [ ] Check event handlers (button clicks, form submits) for API calls
|
|
352
|
+
- [ ] Check lifecycle hooks for initialization API calls
|
|
353
|
+
- [ ] Check status toggles, action buttons for special operation APIs
|
|
354
|
+
- [ ] Verify no imported API is left unmapped
|
|
355
|
+
|
|
356
|
+
5. **Edge Metadata Requirements:**
|
|
357
|
+
- `trigger`: Event name (e.g., "onClick", "onMounted", "onSubmit")
|
|
358
|
+
- `method`: The API function name being called
|
|
359
|
+
- `context`: Brief description of when/why this API is called
|
|
360
|
+
|
|
361
|
+
**Node ID Naming Convention:**
|
|
362
|
+
```
|
|
363
|
+
{type}-{module}-{name}
|
|
364
|
+
Examples:
|
|
365
|
+
page-system-user-list
|
|
366
|
+
page-system-user-detail
|
|
367
|
+
component-system-user-form
|
|
368
|
+
component-shared-delete-confirm
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**IMPORTANT:**
|
|
372
|
+
- `module` comes from `{{module}}` input variable
|
|
373
|
+
- `name` should be a short, readable slug derived from the page/component name
|
|
374
|
+
- Each node must include `sourcePath` and `documentPath` (if applicable)
|
|
375
|
+
- For `calls` edges: the `target` is the API node ID (format `api-{module}-{name}`), which will be matched with api-analyze output
|
|
376
|
+
- Edge `metadata` should include trigger info (event name, lifecycle hook, etc.)
|
|
377
|
+
|
|
378
|
+
**Output:** "Step 3 Status: ✅ COMPLETED - Extracted {{wireframeCount}} wireframes, {{flowCount}} business flows, {{nodeCount}} graph nodes, {{edgeCount}} graph edges"
|
|
379
|
+
|
|
380
|
+
### Step 4: Find Referencing Pages
|
|
381
|
+
|
|
382
|
+
**Step 4 Status: 🔄 IN PROGRESS**
|
|
383
|
+
|
|
384
|
+
Search other page files in the codebase to find which pages reference/navigate to this page.
|
|
385
|
+
|
|
386
|
+
**Search Methods:**
|
|
387
|
+
- Search for router navigation calls containing this page's route path
|
|
388
|
+
- Search for imports of this page component
|
|
389
|
+
- Search for links/buttons that navigate to this page
|
|
390
|
+
|
|
391
|
+
**For Each Referencing Page, Record:**
|
|
392
|
+
| Field | Description |
|
|
393
|
+
|-------|-------------|
|
|
394
|
+
| Page Name | Name of the page that references this page |
|
|
395
|
+
| Function Description | How/why it references this page (e.g., "Click order ID to navigate to detail page") |
|
|
396
|
+
| Source Path | Relative path to the referencing page source file |
|
|
397
|
+
| Document Path | Path to the referencing page's generated document |
|
|
398
|
+
|
|
399
|
+
**Output:** "Step 4 Status: ✅ COMPLETED - Found {{referenceCount}} referencing pages"
|
|
400
|
+
|
|
401
|
+
### Step 5a: Copy Template to Document Path
|
|
402
|
+
|
|
403
|
+
**Step 5a Status: 🔄 IN PROGRESS**
|
|
404
|
+
|
|
405
|
+
**Objective:** Copy the appropriate template file to the target document path, replacing top-level placeholders.
|
|
406
|
+
|
|
407
|
+
**Actions:**
|
|
408
|
+
|
|
409
|
+
1. **Select Template Based on Platform Type:**
|
|
410
|
+
|
|
411
|
+
| Platform Type | Template File |
|
|
412
|
+
|--------------|---------------|
|
|
413
|
+
| `web` | `templates/FEATURE-DETAIL-TEMPLATE-UI.md` |
|
|
414
|
+
| `mobile` | `templates/FEATURE-DETAIL-TEMPLATE-UI-MOBILE.md` |
|
|
415
|
+
| `miniapp` | `templates/FEATURE-DETAIL-TEMPLATE-UI-MINIAPP.md` |
|
|
416
|
+
| `desktop` | `templates/FEATURE-DETAIL-TEMPLATE-UI-DESKTOP.md` |
|
|
417
|
+
| `electron` | `templates/FEATURE-DETAIL-TEMPLATE-UI-ELECTRON.md` |
|
|
418
|
+
| Unknown/Other | `templates/FEATURE-DETAIL-TEMPLATE-UI.md` |
|
|
419
|
+
|
|
420
|
+
2. **Read the Selected Template File:**
|
|
421
|
+
- Read the template file content from the skill's templates directory
|
|
422
|
+
- Example path: `d:/dev/speccrew/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI.md`
|
|
423
|
+
|
|
424
|
+
3. **Replace Top-Level Placeholders:**
|
|
425
|
+
|
|
426
|
+
Replace the following placeholders in the template content:
|
|
427
|
+
|
|
428
|
+
| Placeholder | Replacement | Example |
|
|
429
|
+
|-------------|-------------|---------|
|
|
430
|
+
| `{Feature Name}` | Human-readable feature name extracted from analysis | `"用户管理列表"` |
|
|
431
|
+
| `{documentPath}` | `{{documentPath}}` input variable | `"speccrew-workspace/knowledges/bizs/web-vue/src/views/system/user/index.md"` |
|
|
432
|
+
| `{sourcePath}` | `{{sourcePath}}` input variable | `"frontend-web/src/views/system/user/index.vue"` |
|
|
433
|
+
| `{Date}` | Current date | `"2026-04-04"` |
|
|
434
|
+
| `{FeatureFile}.vue` | `{{fileName}}` with appropriate extension | `"index.vue"` |
|
|
435
|
+
|
|
436
|
+
4. **Write the Document Using create_file:**
|
|
437
|
+
|
|
438
|
+
Use `create_file` to write the placeholder-replaced template content to `{{documentPath}}`.
|
|
439
|
+
|
|
440
|
+
**Example:**
|
|
441
|
+
```
|
|
442
|
+
create_file(
|
|
443
|
+
file_path: "{{documentPath}}",
|
|
444
|
+
file_content: "<template content with top-level placeholders replaced>"
|
|
445
|
+
)
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**Pre-write Checklist:**
|
|
449
|
+
- [ ] Template file selected based on `{{platform_type}}`
|
|
450
|
+
- [ ] Template content read successfully
|
|
451
|
+
- [ ] All top-level placeholders replaced
|
|
452
|
+
- [ ] Document path is valid
|
|
453
|
+
|
|
454
|
+
**Output:** "Step 5a Status: ✅ COMPLETED - Template copied to {{documentPath}}"
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
### Step 5b: Fill Each Section Using search_replace
|
|
459
|
+
|
|
460
|
+
**Step 5b Status: 🔄 IN PROGRESS**
|
|
461
|
+
|
|
462
|
+
**Objective:** Fill each section of the copied template document using `search_replace`, preserving section structure.
|
|
463
|
+
|
|
464
|
+
**CRITICAL Rules:**
|
|
465
|
+
- ⚠️ **NEVER use `create_file` to rewrite the entire document** — this defeats the purpose of template-based generation
|
|
466
|
+
- ⚠️ **ALWAYS use `search_replace` to update specific sections**
|
|
467
|
+
- ⚠️ **Section titles and numbering MUST be preserved**
|
|
468
|
+
- ⚠️ **If a section has no corresponding information, replace placeholder content with "N/A"**
|
|
469
|
+
|
|
470
|
+
**Section Filling Order:**
|
|
471
|
+
|
|
472
|
+
#### 1. Section 1 - Content Overview
|
|
473
|
+
|
|
474
|
+
**Anchor:** The `description:` line under Section 1 header
|
|
475
|
+
|
|
476
|
+
**Operation:** Replace the placeholder description with actual feature description:
|
|
477
|
+
|
|
478
|
+
```markdown
|
|
479
|
+
# Before (template)
|
|
480
|
+
description: Feature overview.
|
|
481
|
+
|
|
482
|
+
# After (filled)
|
|
483
|
+
description: 用户管理列表页面,提供用户查询、新增、编辑、删除、状态切换等功能。
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
**search_replace Example:**
|
|
487
|
+
```
|
|
488
|
+
original_text: "description: Feature overview."
|
|
489
|
+
new_text: "description: 用户管理列表页面,提供用户查询、新增、编辑、删除、状态切换等功能。"
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
#### 2. Section 2 - Interface Prototype
|
|
495
|
+
|
|
496
|
+
**Anchor:** The ASCII wireframe block under each `### 2.x` subsection
|
|
497
|
+
|
|
498
|
+
**Operation:** Replace the example ASCII wireframe with actual wireframe drawn in Step 3
|
|
499
|
+
|
|
500
|
+
**search_replace Example:**
|
|
501
|
+
```
|
|
502
|
+
original_text: |
|
|
503
|
+
```
|
|
504
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
505
|
+
│ [Page Title] {e.g., Product Management List} │
|
|
506
|
+
├─────────────────────────────────────────────────────────────┤
|
|
507
|
+
... (entire example wireframe block)
|
|
508
|
+
└─────────────────────────────────────────────────────────────┘
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
new_text: |
|
|
512
|
+
```
|
|
513
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
514
|
+
│ 用户管理 │
|
|
515
|
+
├─────────────────────────────────────────────────────────────┤
|
|
516
|
+
│ 昵称: [________] 用户名: [________] 状态: [全部 ▼] │
|
|
517
|
+
│ [查询] [重置] [新增] │
|
|
518
|
+
...
|
|
519
|
+
```
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
**For Interface Element Description table:**
|
|
523
|
+
- Replace each example row with actual element descriptions
|
|
524
|
+
- Use `search_replace` to replace the entire table content
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
#### 3. Section 3 - Business Flow
|
|
529
|
+
|
|
530
|
+
**Anchors:** Each `### 3.x` and `#### 3.x.x` subsection with its Mermaid diagram
|
|
531
|
+
|
|
532
|
+
**Operation:** Replace example Mermaid diagrams with actual flow diagrams from Step 3
|
|
533
|
+
|
|
534
|
+
**Required Flow Types (from template):**
|
|
535
|
+
- `3.1` Page Initialization Flow
|
|
536
|
+
- `3.2.x` Component Event Flows (onClick, onChange, etc.)
|
|
537
|
+
- `3.3.x` Timer/WebSocket Flows (if applicable)
|
|
538
|
+
- `3.4` Page Close/Cleanup Flow (if applicable)
|
|
539
|
+
|
|
540
|
+
**search_replace Example:**
|
|
541
|
+
```
|
|
542
|
+
original_text: |
|
|
543
|
+
```mermaid
|
|
544
|
+
graph TB
|
|
545
|
+
Start([Page Load]) --> Init[Initialize Page State]
|
|
546
|
+
Init --> CheckParams[Parse URL Parameters]
|
|
547
|
+
... (example flow)
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
new_text: |
|
|
551
|
+
```mermaid
|
|
552
|
+
graph TB
|
|
553
|
+
Start([页面加载]) --> Init[初始化页面状态]
|
|
554
|
+
Init --> GetUserList[获取用户列表]
|
|
555
|
+
GetUserList --> API1[API getUserList - 查询API - 获取用户列表]
|
|
556
|
+
...
|
|
557
|
+
```
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
**Flow Description Table:** Replace the example table with actual step descriptions
|
|
561
|
+
|
|
562
|
+
**Referenced Items Table:** Replace with actual API/method references
|
|
563
|
+
|
|
564
|
+
**MANDATORY Additions for Section 3:**
|
|
565
|
+
|
|
566
|
+
After each multi-API flow, add **时序分析 / Sequence Analysis**:
|
|
567
|
+
|
|
568
|
+
```markdown
|
|
569
|
+
**时序分析**:
|
|
570
|
+
- getUserRoleList 和 getSimpleRoleList 为串行调用
|
|
571
|
+
- formLoading 在 finally 中恢复
|
|
572
|
+
- ⚠️ 竞态风险:getUserRoleList 失败时,getSimpleRoleList 仍会执行
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
After flow descriptions, add **边界场景 / Boundary Scenarios** table:
|
|
576
|
+
|
|
577
|
+
```markdown
|
|
578
|
+
**边界场景**:
|
|
579
|
+
| 场景 | 触发条件 | 处理方式 |
|
|
580
|
+
|------|----------|----------|
|
|
581
|
+
| 空列表 | API 返回 data=[] | 展示空状态提示 |
|
|
582
|
+
| API 失败 | 网络超时/服务端报错 | ElMessage 提示错误信息 |
|
|
583
|
+
| 状态重置 | 关闭弹窗 | resetForm() 清空所有字段 |
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
---
|
|
587
|
+
|
|
588
|
+
#### 4. Section 4 - Data Field Definition
|
|
589
|
+
|
|
590
|
+
**Anchors:**
|
|
591
|
+
- `### 4.1 Page State Fields` table
|
|
592
|
+
- `### 4.2 Form Fields` table
|
|
593
|
+
|
|
594
|
+
**Operation:** Replace example field rows with actual field definitions from Step 2 analysis
|
|
595
|
+
|
|
596
|
+
**search_replace Example:**
|
|
597
|
+
```
|
|
598
|
+
original_text: |
|
|
599
|
+
| Field Name | Field Type | Description | Source |
|
|
600
|
+
|------------|------------|-------------|--------|
|
|
601
|
+
| {Field 1} | String/Number/Boolean/Array/Object | {Description} | [Source]({pathPrefix}{sourcePath}) |
|
|
602
|
+
| {Field 2} | String | {Description} | [Source]({pathPrefix}{sourcePath}) |
|
|
603
|
+
|
|
604
|
+
new_text: |
|
|
605
|
+
| Field Name | Field Type | Description | Source |
|
|
606
|
+
|------------|------------|-------------|--------|
|
|
607
|
+
| userList | Array | 用户列表数据 | [Source](../../../../../../frontend-web/src/views/system/user/index.vue) |
|
|
608
|
+
| loading | Boolean | 列表加载状态 | [Source](../../../../../../frontend-web/src/views/system/user/index.vue) |
|
|
609
|
+
| queryParams | Object | 查询参数对象 | [Source](../../../../../../frontend-web/src/views/system/user/index.vue) |
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
> **Note**: The example above assumes `documentPath` has 8 levels (e.g., `speccrew-workspace/knowledges/bizs/web-vue3/src/views/system/user/index.md`), so `{pathPrefix}` = `../../../../../../`. Adjust the number of `../` based on actual `documentPath` depth.
|
|
613
|
+
|
|
614
|
+
**MANDATORY Additions for Section 4:**
|
|
615
|
+
|
|
616
|
+
After the field tables, add **数据绑定映射 / Data Binding Mapping** table:
|
|
617
|
+
|
|
618
|
+
```markdown
|
|
619
|
+
**数据绑定映射**:
|
|
620
|
+
| 字段 | UI 绑定 | 数据流向 | 同步时机 |
|
|
621
|
+
|------|---------|----------|----------|
|
|
622
|
+
| formData.roleIds | `<el-transfer v-model>` | 组件内部 ↔ formData | 用户操作穿梭框时实时同步 |
|
|
623
|
+
| roleList | `<el-transfer :data>` | API → roleList | 弹窗打开时一次性加载 |
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
Add **响应式依赖链 / Reactive Dependency Chain**:
|
|
627
|
+
|
|
628
|
+
```markdown
|
|
629
|
+
**响应式依赖链**:
|
|
630
|
+
- watch(props.userId) → 触发 getUserRoleList() → 更新 formData.roleIds
|
|
631
|
+
- computed: 无
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
---
|
|
635
|
+
|
|
636
|
+
#### 5. Section 5 - References
|
|
637
|
+
|
|
638
|
+
**Anchors:** Tables under `### 5.1` through `### 5.5`
|
|
639
|
+
|
|
640
|
+
**Operation:** Replace each reference table with actual references found in analysis
|
|
641
|
+
|
|
642
|
+
**Subsections to Fill:**
|
|
643
|
+
- `5.1 APIs` — All API functions imported and called
|
|
644
|
+
- `5.2 Frontend Shared Methods` — Utility functions used
|
|
645
|
+
- `5.3 Shared Components` — External components used
|
|
646
|
+
- `5.4 Other Pages (This Page References)` — Pages navigated to
|
|
647
|
+
- `5.5 Referenced By (Other Pages Reference This Page)` — From Step 4 results
|
|
648
|
+
|
|
649
|
+
**search_replace Example:**
|
|
650
|
+
```
|
|
651
|
+
original_text: |
|
|
652
|
+
| API Name | Type | Main Function | Source | Document Path |
|
|
653
|
+
|----------|------|---------------|--------|---------------|
|
|
654
|
+
| {API Name} | Query/Mutation | {Brief description} | [Source]({pathPrefix}{apiSourcePath}) | [API Doc]({pathPrefix}apis/{api-name}.md) |
|
|
655
|
+
|
|
656
|
+
new_text: |
|
|
657
|
+
| API Name | Type | Main Function | Source | Document Path |
|
|
658
|
+
|----------|------|---------------|--------|---------------|
|
|
659
|
+
| getUserList | Query | 获取用户列表 | [Source](../../../../../../frontend-web/src/api/system/user.ts) | [API Doc](../../../../../../apis/system/user/getUserList.md) |
|
|
660
|
+
| updateUserStatus | Mutation | 更新用户状态 | [Source](../../../../../../frontend-web/src/api/system/user.ts) | [API Doc](../../../../../../apis/system/user/updateUserStatus.md) |
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
> **Note**: The example above assumes `documentPath` has 8 levels (e.g., `speccrew-workspace/knowledges/bizs/web-vue3/src/views/system/user/index.md`), so `{pathPrefix}` = `../../../../../../`. Adjust the number of `../` based on actual `documentPath` depth.
|
|
664
|
+
|
|
665
|
+
---
|
|
666
|
+
|
|
667
|
+
#### 6. Section 6 - Business Rule Constraints
|
|
668
|
+
|
|
669
|
+
**Anchors:** Tables and lists under `### 6.1`, `### 6.2`, `### 6.3`
|
|
670
|
+
|
|
671
|
+
**Operation:** Replace with actual business rules extracted from code
|
|
672
|
+
|
|
673
|
+
**Subsections to Fill:**
|
|
674
|
+
- `6.1 Permission Rules` — Role/permission requirements
|
|
675
|
+
- `6.2 Business Logic Rules` — Domain rules and constraints
|
|
676
|
+
- `6.3 Validation Rules` — Form validation rules
|
|
677
|
+
|
|
678
|
+
---
|
|
679
|
+
|
|
680
|
+
#### 7. Section 7 - Notes and Additional Information
|
|
681
|
+
|
|
682
|
+
**Anchors:** Content under `### 7.1`, `### 7.2`, `### 7.3`
|
|
683
|
+
|
|
684
|
+
**Operation:** Replace with actual notes from analysis
|
|
685
|
+
|
|
686
|
+
**MANDATORY Addition for Section 7:**
|
|
687
|
+
|
|
688
|
+
Add **性能与可扩展性考量** subsection:
|
|
689
|
+
|
|
690
|
+
```markdown
|
|
691
|
+
### 7.x 性能与可扩展性考量
|
|
692
|
+
|
|
693
|
+
- ⚠️ **全量加载风险**:getSimpleRoleList 全量加载角色列表,角色数量大时存在性能隐患
|
|
694
|
+
- ⚠️ **UI 渲染风险**:el-transfer 组件在角色数量超过 500 条时渲染性能明显下降
|
|
695
|
+
- **可扩展性限制**:当前设计不支持角色分页搜索
|
|
696
|
+
|
|
697
|
+
**待确认事项**:
|
|
698
|
+
- [ ] 是否需要对角色列表增加搜索过滤功能?
|
|
699
|
+
- [ ] 是否应将全量加载改为分页 + 搜索模式?
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
---
|
|
703
|
+
|
|
704
|
+
**Section Filling Checklist:**
|
|
705
|
+
- [ ] Section 1: Content Overview — description filled
|
|
706
|
+
- [ ] Section 2: Interface Prototype — ASCII wireframes replaced
|
|
707
|
+
- [ ] Section 2: Interface Element Description table filled
|
|
708
|
+
- [ ] Section 3.1: Page Initialization Flow — Mermaid diagram replaced
|
|
709
|
+
- [ ] Section 3.2.x: All Component Event Flows — diagrams and descriptions filled
|
|
710
|
+
- [ ] Section 3: **API call sequence analysis** added for multi-API flows
|
|
711
|
+
- [ ] Section 3: **Boundary scenarios** documented
|
|
712
|
+
- [ ] Section 4.1: Page State Fields table filled
|
|
713
|
+
- [ ] Section 4.2: Form Fields table filled
|
|
714
|
+
- [ ] Section 4: **Data binding mapping** table added
|
|
715
|
+
- [ ] Section 4: **Reactive dependency chain** documented
|
|
716
|
+
- [ ] Section 5.1-5.4: All reference tables filled
|
|
717
|
+
- [ ] Section 5.5: Referenced By table filled (from Step 4)
|
|
718
|
+
- [ ] Section 6.1-6.3: All business rules tables filled
|
|
719
|
+
- [ ] Section 7.1-7.3: Notes filled
|
|
720
|
+
- [ ] Section 7: **Performance and scalability analysis** added
|
|
721
|
+
|
|
722
|
+
**Output:** "Step 5b Status: ✅ COMPLETED - All sections filled using search_replace"
|
|
723
|
+
|
|
724
|
+
---
|
|
725
|
+
|
|
726
|
+
**CRITICAL - Link Format Rules:**
|
|
727
|
+
|
|
728
|
+
❌ **NEVER use `file://` protocol in links** — This breaks Markdown preview
|
|
729
|
+
✅ **ALWAYS use relative paths** — Markdown links work correctly
|
|
730
|
+
|
|
731
|
+
**Dynamic Path Calculation:**
|
|
732
|
+
The document path depth is variable depending on `{platform_id}` and `{module_path}`. You MUST dynamically calculate the relative path prefix:
|
|
733
|
+
|
|
734
|
+
1. **Calculate path depth from `documentPath`:**
|
|
735
|
+
- Count the number of directory separators in `{{documentPath}}` from project root
|
|
736
|
+
- Example: `speccrew-workspace/knowledges/bizs/web-vue3/src/views/system/user/index.md` = 8 levels
|
|
737
|
+
- Example: `speccrew-workspace/knowledges/bizs/mobile-uniapp/bpm/category-form-index.md` = 5 levels
|
|
738
|
+
|
|
739
|
+
2. **Generate the path prefix:**
|
|
740
|
+
- For each level in `documentPath`, add one `../`
|
|
741
|
+
- Example: 5 levels → `../../../../../`
|
|
742
|
+
- Example: 8 levels → `../../../../../../`
|
|
743
|
+
|
|
744
|
+
3. **Construct the final link:**
|
|
745
|
+
- Source link: `[Source]({pathPrefix}{sourcePath})`
|
|
746
|
+
- Document link: `[Doc]({pathPrefix}{documentPath})`
|
|
747
|
+
|
|
748
|
+
**Source Traceability Format:**
|
|
749
|
+
Use relative path from current document to source file:
|
|
750
|
+
- Format: `[Source]({pathPrefix}{sourcePath})`
|
|
751
|
+
- Example for 5-level depth: `[Source](../../../../../yudao-ui/yudao-ui-admin-vue3/src/views/system/user/index.vue)`
|
|
752
|
+
- Example for 8-level depth: `[Source](../../../../../../yudao-ui/yudao-ui-admin-vue3/src/views/system/user/index.vue)`
|
|
753
|
+
|
|
754
|
+
**Document Link Format:**
|
|
755
|
+
Use relative path from current document:
|
|
756
|
+
- Format: `[Doc]({pathPrefix}{documentPath})`
|
|
757
|
+
- Example for 5-level depth: `[Doc](../../../../../speccrew-workspace/knowledges/bizs/web-vue3/src/views/system/user/index.md)`
|
|
758
|
+
|
|
759
|
+
### Step 6: Report Results
|
|
760
|
+
|
|
761
|
+
**Step 6 Status: 🔄 IN PROGRESS**
|
|
762
|
+
|
|
763
|
+
Return analysis result summary to dispatch:
|
|
764
|
+
|
|
765
|
+
```json
|
|
766
|
+
{
|
|
767
|
+
"status": "{{status}}",
|
|
768
|
+
"feature": {
|
|
769
|
+
"fileName": "{{fileName}}",
|
|
770
|
+
"sourcePath": "{{sourcePath}}"
|
|
771
|
+
},
|
|
772
|
+
"platformType": "{{platform_type}}",
|
|
773
|
+
"module": "{{module}}",
|
|
774
|
+
"featureName": "{{feature_name}}",
|
|
775
|
+
"generatedFile": "{{generated_file}}",
|
|
776
|
+
"message": "{{message}}"
|
|
777
|
+
}
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
Or in case of failure:
|
|
781
|
+
|
|
782
|
+
```json
|
|
783
|
+
{
|
|
784
|
+
"status": "{{status}}",
|
|
785
|
+
"feature": {
|
|
786
|
+
"fileName": "{{fileName}}",
|
|
787
|
+
"sourcePath": "{{sourcePath}}"
|
|
788
|
+
},
|
|
789
|
+
"message": "{{message}}"
|
|
790
|
+
}
|
|
791
|
+
```
|
|
792
|
+
|
|
793
|
+
---
|
|
794
|
+
|
|
795
|
+
### Step 7: Write Completion Markers
|
|
796
|
+
|
|
797
|
+
**Step 7 Status: 🔄 IN PROGRESS**
|
|
798
|
+
|
|
799
|
+
**⚠️ MANDATORY - This step MUST be executed. The task is NOT complete until marker files are written.**
|
|
800
|
+
|
|
801
|
+
After analysis is complete, write the results to marker files for dispatch to process.
|
|
802
|
+
|
|
803
|
+
**Prerequisites:**
|
|
804
|
+
- Step 6 completed successfully
|
|
805
|
+
- `{{completed_dir}}` - Marker files output directory (e.g., `speccrew-workspace/knowledges/base/sync-state/knowledge-bizs/completed`)
|
|
806
|
+
- `{{sourceFile}}` - Source features JSON file name
|
|
807
|
+
|
|
808
|
+
> **ASSUMPTION**: The `completed_dir` directory already exists (pre-created by dispatch Stage 2). If write fails, report error — do NOT attempt to create directories.
|
|
809
|
+
|
|
810
|
+
### Pre-write Checklist (VERIFY before writing each file):
|
|
811
|
+
- [ ] Filename follows `{fileName}` pattern (file name only)
|
|
812
|
+
- [ ] File content is valid JSON (not empty)
|
|
813
|
+
- [ ] All required fields are present and non-empty
|
|
814
|
+
- [ ] File is written with UTF-8 encoding
|
|
815
|
+
|
|
816
|
+
**Actions:**
|
|
817
|
+
|
|
818
|
+
**Pre-write Verification (MUST check before writing):**
|
|
819
|
+
- [ ] `.done.json` JSON: `fileName` does NOT contain file extension
|
|
820
|
+
- [ ] `.done.json` JSON: `sourceFile` matches `features-{platform}.json` pattern
|
|
821
|
+
- [ ] `.done.json` JSON: `module` field is present and non-empty
|
|
822
|
+
- [ ] `.graph.json` JSON: root-level `module` field is present (MANDATORY)
|
|
823
|
+
- [ ] `.graph.json` JSON: `nodes` and `edges` are arrays (can be empty)
|
|
824
|
+
- [ ] Both files: valid JSON (no trailing commas, all strings quoted)
|
|
825
|
+
|
|
826
|
+
---
|
|
827
|
+
|
|
828
|
+
### **CRITICAL - Marker File Naming Convention (STRICT RULES)**
|
|
829
|
+
|
|
830
|
+
**✅ CORRECT Format - MUST USE:**
|
|
831
|
+
```
|
|
832
|
+
{completed_dir}/{fileName}.done.json ← Completion status marker (JSON format)
|
|
833
|
+
{completed_dir}/{fileName}.graph.json ← Graph data marker (JSON format)
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
**Examples:**
|
|
837
|
+
- `d:/dev/speccrew/speccrew-workspace/knowledges/base/sync-state/knowledge-bizs/completed/index.done.json`
|
|
838
|
+
- `d:/dev/speccrew/speccrew-workspace/knowledges/base/sync-state/knowledge-bizs/completed/index.graph.json`
|
|
839
|
+
|
|
840
|
+
**❌ WRONG Format - NEVER USE:**
|
|
841
|
+
```
|
|
842
|
+
{fileName}.completed.json ← WRONG extension
|
|
843
|
+
{fileName}.done ← WRONG extension (missing .json)
|
|
844
|
+
{fileName}.done.txt ← WRONG extension
|
|
845
|
+
{fileName}_done.json ← WRONG separator and extension
|
|
846
|
+
{fileName}-completed.json ← WRONG separator and extension
|
|
847
|
+
```
|
|
848
|
+
|
|
849
|
+
**❌ WRONG Filename Examples - NEVER USE:**
|
|
850
|
+
- `index.completed.json` - WRONG: uses `.completed.json` instead of `.done.json`
|
|
851
|
+
- `index.done` - WRONG: uses `.done` instead of `.done.json`
|
|
852
|
+
- `index.done.txt` - WRONG: uses `.done.txt` instead of `.done.json`
|
|
853
|
+
- `index_done.json` - WRONG: uses underscore and wrong extension
|
|
854
|
+
- `dict-index.done.json` - WRONG: has module prefix
|
|
855
|
+
- `system-index.done.json` - WRONG: has module prefix
|
|
856
|
+
|
|
857
|
+
---
|
|
858
|
+
|
|
859
|
+
### **CRITICAL - Path Format Rules (STRICT RULES)**
|
|
860
|
+
|
|
861
|
+
**Path Variables:**
|
|
862
|
+
- `{{completed_dir}}` - Absolute path to marker files directory (passed from dispatch)
|
|
863
|
+
- `{{sourcePath}}` - Relative path to source file (from features JSON)
|
|
864
|
+
- `{{documentPath}}` - Relative path to generated document (from features JSON)
|
|
865
|
+
|
|
866
|
+
**Path Format Requirements:**
|
|
867
|
+
|
|
868
|
+
| Field | Format | Example |
|
|
869
|
+
|-------|--------|---------|
|
|
870
|
+
| `sourcePath` in `.done` | Project-root-relative path | `yudao-ui/yudao-ui-admin-uniapp/src/pages/bpm/index.vue` |
|
|
871
|
+
| `documentPath` in `.done` | Relative path (as-is from input) | `speccrew-workspace/knowledges/bizs/web-vue/src/views/system/user/index.md` |
|
|
872
|
+
| `sourcePath` in `.graph.json` nodes | Project-root-relative path | `yudao-ui/yudao-ui-admin-uniapp/src/pages/bpm/index.vue` |
|
|
873
|
+
| `documentPath` in `.graph.json` nodes | Relative path (as-is from input) | `speccrew-workspace/knowledges/bizs/web-vue/src/views/system/user/index.md` |
|
|
874
|
+
|
|
875
|
+
**⚠️ CRITICAL - sourcePath Validation Rules:**
|
|
876
|
+
- `sourcePath` MUST be a project-root-relative path (e.g., `yudao-ui/yudao-ui-admin-uniapp/src/pages/bpm/index.vue`, `yudao-module-system/src/main/java/.../UserController.java`)
|
|
877
|
+
- NEVER use platform-source-relative short paths (e.g., `pages/bpm/index.vue`, `pages-bpm/category/index.vue`, `controller/admin/user/UserController.java`)
|
|
878
|
+
- Exception: `node_modules/` and third-party library paths are kept as-is (e.g., `node_modules/wot-design-uni/components/wd-icon/wd-icon.vue`)
|
|
879
|
+
|
|
880
|
+
**⚠️ CRITICAL - documentPath Rules:**
|
|
881
|
+
- When no corresponding document exists for a component/API, `documentPath` MUST be `"N/A"`
|
|
882
|
+
- NEVER use empty string `""` for `documentPath` — this causes downstream processing issues
|
|
883
|
+
|
|
884
|
+
**⚠️ CRITICAL: NEVER convert relative paths to absolute paths in the JSON content!**
|
|
885
|
+
|
|
886
|
+
**Correct vs Wrong Example:**
|
|
887
|
+
```json
|
|
888
|
+
// ✅ CORRECT - .done file content:
|
|
889
|
+
{
|
|
890
|
+
"fileName": "index",
|
|
891
|
+
"sourcePath": "yudao-ui/yudao-ui-admin-uniapp/src/pages/bpm/index.vue",
|
|
892
|
+
"sourceFile": "features-web-vue.json",
|
|
893
|
+
"module": "system",
|
|
894
|
+
"status": "success",
|
|
895
|
+
"analysisNotes": "Successfully analyzed user management page"
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
// ❌ WRONG - .done file content (DO NOT DO THIS):
|
|
899
|
+
{
|
|
900
|
+
"fileName": "index",
|
|
901
|
+
"sourcePath": "d:/dev/project/yudao-ui/yudao-ui-admin-uniapp/src/pages/bpm/index.vue", ← WRONG: absolute path
|
|
902
|
+
"sourceFile": "features-web-vue.json",
|
|
903
|
+
"module": "system",
|
|
904
|
+
"status": "success"
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
// ❌ WRONG - documentPath empty string (DO NOT DO THIS):
|
|
908
|
+
{
|
|
909
|
+
"fileName": "index",
|
|
910
|
+
"sourcePath": "yudao-ui/yudao-ui-admin-uniapp/src/pages/bpm/index.vue",
|
|
911
|
+
"documentPath": "", ← WRONG: use "N/A" when no document exists
|
|
912
|
+
"sourceFile": "features-web-vue.json",
|
|
913
|
+
"module": "system",
|
|
914
|
+
"status": "success"
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
// ✅ CORRECT - documentPath N/A when no document:
|
|
918
|
+
{
|
|
919
|
+
"fileName": "index",
|
|
920
|
+
"sourcePath": "yudao-ui/yudao-ui-admin-uniapp/src/pages/bpm/index.vue",
|
|
921
|
+
"documentPath": "N/A",
|
|
922
|
+
"sourceFile": "features-web-vue.json",
|
|
923
|
+
"module": "system",
|
|
924
|
+
"status": "success"
|
|
925
|
+
}
|
|
926
|
+
```
|
|
927
|
+
|
|
928
|
+
---
|
|
929
|
+
|
|
930
|
+
1. **Write .done.json file (MANDATORY):**
|
|
931
|
+
|
|
932
|
+
> **🚨 CRITICAL - JSON FORMAT MANDATORY**: The `.done.json` file **MUST** be valid JSON. Writing plain text, status messages, or progress updates into this file is **STRICTLY FORBIDDEN**.
|
|
933
|
+
>
|
|
934
|
+
> **❌ FORBIDDEN - NEVER DO THIS:**
|
|
935
|
+
> ```
|
|
936
|
+
> Scanning files...
|
|
937
|
+
> Analysis complete
|
|
938
|
+
> ```
|
|
939
|
+
>
|
|
940
|
+
> **✅ CORRECT - ONLY VALID JSON:**
|
|
941
|
+
> ```json
|
|
942
|
+
> {"fileName": "index", "status": "success", ...}
|
|
943
|
+
> ```
|
|
944
|
+
|
|
945
|
+
Use the Write tool to create file at `{{completed_dir}}/{{fileName}}.done.json`:
|
|
946
|
+
|
|
947
|
+
**Full path example:** `d:/dev/speccrew/speccrew-workspace/knowledges/base/sync-state/knowledge-bizs/completed/index.done.json`
|
|
948
|
+
|
|
949
|
+
**Complete JSON Template (ALL fields required):**
|
|
950
|
+
```json
|
|
951
|
+
{
|
|
952
|
+
"fileName": "{{fileName}}",
|
|
953
|
+
"sourcePath": "{{sourcePath}}",
|
|
954
|
+
"sourceFile": "{{sourceFile}}",
|
|
955
|
+
"module": "{{module}}",
|
|
956
|
+
"documentPath": "{{documentPath}}",
|
|
957
|
+
"status": "{{status}}",
|
|
958
|
+
"analysisNotes": "{{message}}"
|
|
959
|
+
}
|
|
960
|
+
```
|
|
961
|
+
|
|
962
|
+
**Field Descriptions:**
|
|
963
|
+
| Field | Required | Description | Example |
|
|
964
|
+
|-------|----------|-------------|---------|
|
|
965
|
+
| `fileName` | ✅ YES | Feature file name **WITHOUT extension** | `"index"` |
|
|
966
|
+
| `sourcePath` | ✅ YES | Relative path to source file | `"frontend-web/src/views/system/user/index.vue"` |
|
|
967
|
+
| `sourceFile` | ✅ YES | Source features JSON filename | `"features-web-vue.json"` |
|
|
968
|
+
| `module` | ✅ YES | Business module name | `"system"` |
|
|
969
|
+
| `documentPath` | ✅ YES | Path to generated document (same as Step 5a) | `"speccrew-workspace/knowledges/bizs/web-vue/src/views/system/user/index.md"` |
|
|
970
|
+
| `status` | ✅ YES | Analysis status | `"success"`, `"partial"`, or `"failed"` |
|
|
971
|
+
| `analysisNotes` | ✅ YES | Summary message | `"Successfully analyzed user management page"` |
|
|
972
|
+
|
|
973
|
+
> **⚠️ CRITICAL - fileName Field Rules:**
|
|
974
|
+
> - The `fileName` field MUST contain only the feature file name **WITHOUT file extension**
|
|
975
|
+
> - ✅ CORRECT: `"fileName": "index"`
|
|
976
|
+
> - ✅ CORRECT: `"fileName": "UserForm"`
|
|
977
|
+
> - ❌ WRONG: `"fileName": "index.vue"` (includes extension)
|
|
978
|
+
> - ❌ WRONG: `"fileName": "UserForm.tsx"` (includes extension)
|
|
979
|
+
|
|
980
|
+
> **⚠️ CRITICAL**: The `sourceFile` field is MANDATORY. It MUST be the features JSON filename (e.g., `features-web-vue.json`). Missing this field will cause pipeline failure.
|
|
981
|
+
|
|
982
|
+
> **⚠️ CRITICAL**: The `documentPath` field is MANDATORY. It MUST match the `{{documentPath}}` variable from Step 5a. This is used to verify the document was created successfully.
|
|
983
|
+
|
|
984
|
+
⚠️ **CRITICAL NAMING RULE:** Filename MUST be `{fileName}.done.json`, where `fileName` is the feature file name (e.g., `index`, `UserForm`, `AiKnowledgeDocumentCreateListReqVO`).
|
|
985
|
+
- ✅ CORRECT: `index.done.json` (using file name directly)
|
|
986
|
+
- ✅ CORRECT: `UserForm.done.json` (using file name directly)
|
|
987
|
+
- ❌ WRONG: `index.done` (missing .json extension)
|
|
988
|
+
- ❌ WRONG: `dict-index.done.json` (using old featureId format)
|
|
989
|
+
- ❌ WRONG: `system-index.done.json` (using module prefix)
|
|
990
|
+
|
|
991
|
+
⚠️ **CRITICAL:** The file MUST contain valid JSON content. Empty files or files with only whitespace will cause processing failures.
|
|
992
|
+
|
|
993
|
+
2. **Write .graph.json file (MANDATORY):**
|
|
994
|
+
|
|
995
|
+
> **⚠️ CRITICAL FORMAT REQUIREMENT**: The `.graph.json` file MUST be valid JSON and **MUST include the root-level `module` field**. Do NOT rely on scripts to infer the module from `.done` file - the `module` field MUST be explicitly present at the root level of `.graph.json`.
|
|
996
|
+
|
|
997
|
+
Use the Write tool to create file at `{{completed_dir}}/{{fileName}}.graph.json`:
|
|
998
|
+
|
|
999
|
+
**Full path example:** `d:/dev/speccrew/speccrew-workspace/knowledges/base/sync-state/knowledge-bizs/completed/index.graph.json`
|
|
1000
|
+
|
|
1001
|
+
```json
|
|
1002
|
+
{
|
|
1003
|
+
"module": "{{module}}",
|
|
1004
|
+
"nodes": [
|
|
1005
|
+
{
|
|
1006
|
+
"id": "page-{{module}}-{{feature-name}}",
|
|
1007
|
+
"type": "page",
|
|
1008
|
+
"name": "<display name>",
|
|
1009
|
+
"module": "{{module}}",
|
|
1010
|
+
"sourcePath": "{{sourcePath}}",
|
|
1011
|
+
"documentPath": "{{documentPath}}",
|
|
1012
|
+
"description": "...",
|
|
1013
|
+
"tags": [...],
|
|
1014
|
+
"keywords": [...],
|
|
1015
|
+
"context": { "route": "...", "components": [...] }
|
|
1016
|
+
}
|
|
1017
|
+
],
|
|
1018
|
+
"edges": [
|
|
1019
|
+
{
|
|
1020
|
+
"source": "page-...",
|
|
1021
|
+
"target": "api-... or component-...",
|
|
1022
|
+
"type": "calls|uses|navigates-to",
|
|
1023
|
+
"metadata": { "trigger": "...", "method": "..." }
|
|
1024
|
+
}
|
|
1025
|
+
]
|
|
1026
|
+
}
|
|
1027
|
+
```
|
|
1028
|
+
|
|
1029
|
+
> **⚠️ CRITICAL - module Field Requirement:**
|
|
1030
|
+
> - The `.graph.json` file **MUST** have a root-level `module` field
|
|
1031
|
+
> - Do NOT assume scripts will fall back to reading from `.done` file
|
|
1032
|
+
> - Missing `module` field will cause the graph merge pipeline to reject this file
|
|
1033
|
+
|
|
1034
|
+
⚠️ **CRITICAL NAMING RULE:** Filename MUST be `{fileName}.graph.json`, where `fileName` is the feature file name (e.g., `index`, `UserForm`, `AiKnowledgeDocumentCreateListReqVO`).
|
|
1035
|
+
- ✅ CORRECT: `index.graph.json` (using file name directly)
|
|
1036
|
+
- ✅ CORRECT: `UserForm.graph.json` (using file name directly)
|
|
1037
|
+
- ❌ WRONG: `dict-index.graph.json` (using old featureId format)
|
|
1038
|
+
- ❌ WRONG: `system-index.graph.json` (using module prefix)
|
|
1039
|
+
|
|
1040
|
+
⚠️ **CRITICAL:** The file MUST contain valid JSON content. Empty files or files with only whitespace will cause processing failures.
|
|
1041
|
+
|
|
1042
|
+
**CRITICAL - API Coverage Check:**
|
|
1043
|
+
Before writing the graph.json file, verify:
|
|
1044
|
+
- [ ] ALL imported API functions from `@/api/...` modules are represented as `calls` edges
|
|
1045
|
+
- [ ] Status update APIs (updateStatus, toggleEnable) are included
|
|
1046
|
+
- [ ] Special operation APIs (resetPassword, exportData, importData) are included
|
|
1047
|
+
- [ ] Each `calls` edge has proper metadata with trigger information
|
|
1048
|
+
- [ ] No API import is left without a corresponding edge
|
|
1049
|
+
|
|
1050
|
+
**Output:** "Step 7 Status: ✅ COMPLETED - Marker files written ({{completed_dir}}/{{fileName}}.done, .graph.json)"
|
|
1051
|
+
|
|
1052
|
+
**On Failure:** "Step 7 Status: ⚠️ PARTIAL - Marker file write failed, but analysis completed"
|
|
1053
|
+
|
|
1054
|
+
**⚠️ IMPORTANT: If this step fails, the dispatch script will NOT be able to process your analysis results. You MUST ensure both marker files are written successfully.**
|
|
1055
|
+
|