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.
Files changed (153) hide show
  1. package/.speccrew/agents/speccrew-feature-designer.md +142 -0
  2. package/.speccrew/agents/speccrew-product-manager.md +61 -0
  3. package/.speccrew/agents/speccrew-system-designer.md +200 -0
  4. package/.speccrew/agents/speccrew-system-developer.md +238 -0
  5. package/.speccrew/agents/speccrew-task-worker.md +80 -0
  6. package/.speccrew/agents/speccrew-team-leader.md +92 -0
  7. package/.speccrew/agents/speccrew-test-manager.md +313 -0
  8. package/.speccrew/skills/speccrew-create-agents/SKILL.md +98 -0
  9. package/.speccrew/skills/speccrew-create-agents/templates/agents/designer-agent.md +54 -0
  10. package/.speccrew/skills/speccrew-create-agents/templates/agents/dev-agent.md +79 -0
  11. package/.speccrew/skills/speccrew-create-agents/templates/agents/test-agent.md +80 -0
  12. package/.speccrew/skills/speccrew-dev-backend/SKILL.md +205 -0
  13. package/.speccrew/skills/speccrew-dev-backend/templates/TASK-RECORD-TEMPLATE.md +118 -0
  14. package/.speccrew/skills/speccrew-dev-desktop/SKILL.md +258 -0
  15. package/.speccrew/skills/speccrew-dev-desktop/templates/TASK-RECORD-TEMPLATE.md +161 -0
  16. package/.speccrew/skills/speccrew-dev-frontend/SKILL.md +202 -0
  17. package/.speccrew/skills/speccrew-dev-frontend/templates/TASK-RECORD-TEMPLATE.md +115 -0
  18. package/.speccrew/skills/speccrew-dev-mobile/SKILL.md +200 -0
  19. package/.speccrew/skills/speccrew-dev-mobile/templates/TASK-RECORD-TEMPLATE.md +125 -0
  20. package/.speccrew/skills/speccrew-fd-api-contract/SKILL.md +73 -0
  21. package/.speccrew/skills/speccrew-fd-api-contract/templates/API-CONTRACT-TEMPLATE.md +96 -0
  22. package/.speccrew/skills/speccrew-fd-feature-design/SKILL.md +395 -0
  23. package/.speccrew/skills/speccrew-fd-feature-design/templates/FEATURE-SPEC-TEMPLATE.md +387 -0
  24. package/.speccrew/skills/speccrew-get-timestamp/SKILL.md +80 -0
  25. package/.speccrew/skills/speccrew-get-timestamp/scripts/get-timestamp.js +35 -0
  26. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/SKILL.md +1116 -0
  27. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-FASTAPI.md +462 -0
  28. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-JAVA.md +480 -0
  29. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-NET.md +464 -0
  30. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE.md +480 -0
  31. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/MODULE-OVERVIEW-TEMPLATE.md +367 -0
  32. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/SKILL.md +667 -0
  33. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/STATUS-FORMATS.md +74 -0
  34. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/batch-orchestrator.js +176 -0
  35. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/get-next-batch.js +150 -0
  36. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/get-pending-features.js +106 -0
  37. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/mark-stale.js +249 -0
  38. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/process-batch-results.js +848 -0
  39. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/update-feature-status.js +226 -0
  40. package/.speccrew/skills/speccrew-knowledge-bizs-init-features/SKILL.md +264 -0
  41. package/.speccrew/skills/speccrew-knowledge-bizs-init-features/examples/features.json +34 -0
  42. package/.speccrew/skills/speccrew-knowledge-bizs-init-features/scripts/generate-inventory.js +867 -0
  43. package/.speccrew/skills/speccrew-knowledge-bizs-init-features/scripts/test-inventory.js +26 -0
  44. package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/SKILL.md +165 -0
  45. package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/apply-module-mapping.js +208 -0
  46. package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/extract-module-summary.js +180 -0
  47. package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/reindex-modules.js +358 -0
  48. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/SKILL.md +1055 -0
  49. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-DESKTOP.md +303 -0
  50. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-ELECTRON.md +327 -0
  51. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MINIAPP.md +292 -0
  52. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MOBILE.md +281 -0
  53. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI.md +324 -0
  54. package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/SKILL.md +270 -0
  55. package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/COMPONENT-PATTERN-TEMPLATE.md +33 -0
  56. package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/LAYOUT-PATTERN-TEMPLATE.md +33 -0
  57. package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/PAGE-TYPE-TEMPLATE.md +33 -0
  58. package/.speccrew/skills/speccrew-knowledge-graph-query/SKILL.md +229 -0
  59. package/.speccrew/skills/speccrew-knowledge-graph-query/scripts/graph-query.js +549 -0
  60. package/.speccrew/skills/speccrew-knowledge-graph-write/SKILL.md +181 -0
  61. package/.speccrew/skills/speccrew-knowledge-graph-write/scripts/graph-write.js +651 -0
  62. package/.speccrew/skills/speccrew-knowledge-module-summarize/SKILL.md +305 -0
  63. package/.speccrew/skills/speccrew-knowledge-module-summarize/templates/MODULE-OVERVIEW-TEMPLATE.md +400 -0
  64. package/.speccrew/skills/speccrew-knowledge-system-summarize/SKILL.md +351 -0
  65. package/.speccrew/skills/speccrew-knowledge-system-summarize/templates/SYSTEM-OVERVIEW-TEMPLATE.md +294 -0
  66. package/.speccrew/skills/speccrew-knowledge-techs-dispatch/SKILL.md +683 -0
  67. package/.speccrew/skills/speccrew-knowledge-techs-dispatch/STATUS-FORMATS.md +550 -0
  68. package/.speccrew/skills/speccrew-knowledge-techs-dispatch/templates/techs-manifest-EXAMPLE.json +35 -0
  69. package/.speccrew/skills/speccrew-knowledge-techs-generate/SKILL.md +1087 -0
  70. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/ARCHITECTURE-TEMPLATE.md +240 -0
  71. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/COLOR-SYSTEM-TEMPLATE.md +68 -0
  72. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/COMPONENT-LIBRARY-TEMPLATE.md +86 -0
  73. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-BUILD-TEMPLATE.md +466 -0
  74. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DATA-TEMPLATE.md +432 -0
  75. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DESIGN-TEMPLATE.md +1209 -0
  76. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DEV-TEMPLATE.md +1433 -0
  77. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-SYSTEM-TEST-TEMPLATE.md +1052 -0
  78. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-UNIT-TEST-TEMPLATE.md +946 -0
  79. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/INDEX-TEMPLATE.md +29 -0
  80. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/PAGE-LAYOUTS-TEMPLATE.md +69 -0
  81. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/PAGE-TYPE-SUMMARY-TEMPLATE.md +74 -0
  82. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/TECH-STACK-TEMPLATE.md +232 -0
  83. package/.speccrew/skills/speccrew-knowledge-techs-generate-conventions/SKILL.md +628 -0
  84. package/.speccrew/skills/speccrew-knowledge-techs-generate-ui-style/SKILL.md +392 -0
  85. package/.speccrew/skills/speccrew-knowledge-techs-index/SKILL.md +489 -0
  86. package/.speccrew/skills/speccrew-knowledge-techs-index/templates/INDEX-TEMPLATE.md +243 -0
  87. package/.speccrew/skills/speccrew-knowledge-techs-init/SKILL.md +269 -0
  88. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/SKILL.md +562 -0
  89. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/BUSINESS-COMPONENTS-TEMPLATE.md +171 -0
  90. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMMON-COMPONENTS-TEMPLATE.md +177 -0
  91. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMPONENT-INDIVIDUAL-TEMPLATE.md +80 -0
  92. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMPONENT-LIBRARY-TEMPLATE.md +118 -0
  93. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/LAYOUT-INDIVIDUAL-TEMPLATE.md +97 -0
  94. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/LAYOUT-PATTERNS-TEMPLATE.md +208 -0
  95. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/NAVIGATION-PATTERNS-TEMPLATE.md +157 -0
  96. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/PAGE-TYPE-INDIVIDUAL-TEMPLATE.md +123 -0
  97. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/PAGE-TYPE-SUMMARY-TEMPLATE.md +58 -0
  98. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/SPACING-TEMPLATE.md +119 -0
  99. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/STYLE-SYSTEM-TEMPLATE.md +117 -0
  100. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/TYPOGRAPHY-TEMPLATE.md +107 -0
  101. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/UI-STYLE-GUIDE-TEMPLATE.md +171 -0
  102. package/.speccrew/skills/speccrew-pm-requirement-analysis/SKILL.md +434 -0
  103. package/.speccrew/skills/speccrew-pm-requirement-analysis/templates/BIZS-MODELING-TEMPLATE.md +332 -0
  104. package/.speccrew/skills/speccrew-pm-requirement-analysis/templates/PRD-TEMPLATE.md +200 -0
  105. package/.speccrew/skills/speccrew-pm-requirement-assess/SKILL.md +195 -0
  106. package/.speccrew/skills/speccrew-project-diagnosis/SKILL.md +208 -0
  107. package/.speccrew/skills/speccrew-project-diagnosis/templates/DIAGNOSIS-REPORT-TEMPLATE.md +202 -0
  108. package/.speccrew/skills/speccrew-sd-backend/SKILL.md +188 -0
  109. package/.speccrew/skills/speccrew-sd-backend/templates/INDEX-TEMPLATE.md +85 -0
  110. package/.speccrew/skills/speccrew-sd-backend/templates/SD-BACKEND-TEMPLATE.md +269 -0
  111. package/.speccrew/skills/speccrew-sd-desktop/SKILL.md +192 -0
  112. package/.speccrew/skills/speccrew-sd-desktop/templates/INDEX-TEMPLATE.md +271 -0
  113. package/.speccrew/skills/speccrew-sd-desktop/templates/SD-DESKTOP-TEMPLATE.md +673 -0
  114. package/.speccrew/skills/speccrew-sd-frontend/SKILL.md +176 -0
  115. package/.speccrew/skills/speccrew-sd-frontend/templates/INDEX-TEMPLATE.md +184 -0
  116. package/.speccrew/skills/speccrew-sd-frontend/templates/SD-FRONTEND-TEMPLATE.md +382 -0
  117. package/.speccrew/skills/speccrew-sd-mobile/SKILL.md +189 -0
  118. package/.speccrew/skills/speccrew-sd-mobile/templates/INDEX-TEMPLATE.md +219 -0
  119. package/.speccrew/skills/speccrew-sd-mobile/templates/SD-MOBILE-TEMPLATE.md +534 -0
  120. package/.speccrew/skills/speccrew-test-case-design/SKILL.md +284 -0
  121. package/.speccrew/skills/speccrew-test-case-design/templates/TEST-CASE-DESIGN-TEMPLATE.md +263 -0
  122. package/.speccrew/skills/speccrew-test-code-gen/SKILL.md +313 -0
  123. package/.speccrew/skills/speccrew-test-code-gen/templates/TEST-CODE-PLAN-TEMPLATE.md +180 -0
  124. package/.speccrew/skills/speccrew-test-execute/SKILL.md +283 -0
  125. package/.speccrew/skills/speccrew-test-execute/templates/BUG-REPORT-TEMPLATE.md +50 -0
  126. package/.speccrew/skills/speccrew-test-execute/templates/TEST-REPORT-TEMPLATE.md +57 -0
  127. package/.speccrew/skills/speccrew-workflow-diagnose/SKILL.md +155 -0
  128. package/LICENSE +21 -0
  129. package/README.ar.md +318 -0
  130. package/README.en.md +318 -0
  131. package/README.es.md +318 -0
  132. package/README.md +340 -0
  133. package/bin/cli.js +62 -0
  134. package/lib/commands/doctor.js +138 -0
  135. package/lib/commands/init.js +231 -0
  136. package/lib/commands/list.js +114 -0
  137. package/lib/commands/uninstall.js +117 -0
  138. package/lib/commands/update.js +351 -0
  139. package/lib/ide-adapters.js +73 -0
  140. package/lib/utils.js +104 -0
  141. package/package.json +28 -0
  142. package/workspace-template/docs/configs/document-templates.json +667 -0
  143. package/workspace-template/docs/configs/platform-mapping.json +194 -0
  144. package/workspace-template/docs/configs/tech-stack-mappings.json +313 -0
  145. package/workspace-template/docs/configs/validation-rules.json +87 -0
  146. package/workspace-template/docs/rules/mermaid-rule.md +114 -0
  147. 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
  148. package/workspace-template/docs/solutions/agent-knowledge-map.md +238 -0
  149. package/workspace-template/docs/solutions/bizs-knowledge-pipeline.md +678 -0
  150. package/workspace-template/docs/solutions/harness.md +410 -0
  151. package/workspace-template/docs/solutions/knowledge-incremental-sync-spec.md +943 -0
  152. package/workspace-template/docs/solutions/techs-knowledge-pipeline.md +803 -0
  153. 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
+