speccrew 0.6.29 → 0.6.30

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.
@@ -0,0 +1,524 @@
1
+ ---
2
+ name: speccrew-knowledge-bizs-ui-analyze-xml
3
+ description: Analyze a single UI feature from source code to extract business functionality and generate feature documentation using XML Block workflow. 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 (XML Block Workflow)
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
+
35
+ ## Language Adaptation
36
+
37
+ **CRITICAL**: Generate all content in the language specified by the `{{language}}` parameter.
38
+
39
+ - `{{language}} == "zh"` → Generate all content in 中文
40
+ - `{{language}} == "en"` → Generate all content in English
41
+ - Other languages → Use the specified language
42
+
43
+ **All output content (feature names, descriptions, business rules) must be in the target language only.**
44
+
45
+ ## Output Variables
46
+
47
+ | Variable | Type | Description |
48
+ |----------|------|-------------|
49
+ | `{{status}}` | string | Analysis status: `"success"`, `"partial"`, or `"failed"` |
50
+ | `{{feature_name}}` | string | Name of the analyzed feature |
51
+ | `{{generated_file}}` | string | Path to the generated documentation file |
52
+ | `{{message}}` | string | Summary message for status update |
53
+
54
+ ## Output
55
+
56
+ **Generated Files (MANDATORY - Task is NOT complete until all files are written):**
57
+ 1. `{{documentPath}}` - Feature documentation file
58
+
59
+ **Return Value (JSON format):**
60
+ ```json
61
+ {
62
+ "status": "success|partial|failed",
63
+ "feature": {
64
+ "fileName": "index",
65
+ "sourcePath": "frontend-web/src/views/system/user/index.vue"
66
+ },
67
+ "platformType": "web",
68
+ "module": "system",
69
+ "featureName": "user-management",
70
+ "generatedFile": "speccrew-workspace/knowledges/bizs/web-vue/src/views/system/user/index.md",
71
+ "message": "Successfully analyzed user-management feature from index.vue"
72
+ }
73
+ ```
74
+
75
+ > **Note**: Graph data construction (nodes, edges, marker files) is handled by `speccrew-knowledge-bizs-ui-graph` Skill. This Skill only generates feature documentation.
76
+
77
+ ## Workflow
78
+
79
+ <!--
80
+ == Block Types ==
81
+ input : Workflow input parameters (required=mandatory, default=default value)
82
+ output : Workflow output results (from=data source variable)
83
+ task : Execute action (action: run-skill | run-script | dispatch-to-worker)
84
+ gateway : Conditional branch/gate (mode: exclusive | guard | parallel)
85
+ loop : Iterate over collection (over=collection, as=current item)
86
+ event : Log/confirm/signal (action: log | confirm | signal)
87
+ error-handler : Exception handling (try > catch > finally)
88
+ checkpoint : Persistent milestone (name=checkpoint name, verify=verification condition)
89
+ rule : Constraint declaration (level: forbidden | mandatory | note)
90
+ -->
91
+
92
+ ```xml
93
+ <workflow name="ui-feature-analysis" version="1.0">
94
+
95
+ <!-- ==================== INPUT PARAMETERS ==================== -->
96
+ <input name="feature" type="object" required="true" description="Complete feature object from features.json"/>
97
+ <input name="fileName" type="string" required="true" description="Feature file name"/>
98
+ <input name="sourcePath" type="string" required="true" description="Relative path to source file"/>
99
+ <input name="documentPath" type="string" required="true" description="Target path for generated document"/>
100
+ <input name="module" type="string" required="true" description="Business module name"/>
101
+ <input name="analyzed" type="boolean" required="true" description="Analysis status flag"/>
102
+ <input name="platform_type" type="string" required="true" description="Platform type: web, mobile, etc."/>
103
+ <input name="platform_subtype" type="string" required="true" description="Platform subtype: vue, react, etc."/>
104
+ <input name="tech_stack" type="array" required="true" description="Platform tech stack"/>
105
+ <input name="language" type="string" required="true" description="Target language for generated content"/>
106
+
107
+ <!-- ==================== CONSTRAINT RULES ==================== -->
108
+ <rule level="forbidden" id="no-create-file-for-docs">
109
+ NEVER use create_file to rewrite entire document. Documents MUST be created by copying template then filling with search_replace.
110
+ </rule>
111
+ <rule level="forbidden" id="no-file-deletion">
112
+ NEVER delete generated files. If a file is malformed, fix it with search_replace.
113
+ </rule>
114
+ <rule level="forbidden" id="no-full-rewrite">
115
+ NEVER rewrite entire document. Always use targeted search_replace on specific sections.
116
+ </rule>
117
+ <rule level="mandatory" id="template-first">
118
+ Template copying (Step 5a) MUST execute before section filling (Step 5b).
119
+ </rule>
120
+ <rule level="mandatory" id="all-sections-filled">
121
+ ALL sections in the template must be filled. Use "N/A" for unavailable data, never skip a section.
122
+ </rule>
123
+ <rule level="mandatory" id="language-compliance">
124
+ ALL content MUST be generated in the language specified by {{language}} parameter.
125
+ </rule>
126
+
127
+ <!-- ==================== STEP 0: CHECK ANALYSIS STATUS ==================== -->
128
+ <gateway name="check-analyzed-status" mode="exclusive">
129
+ <branch condition="{{analyzed}} == true">
130
+ <event action="log" level="info" message="Step 0 Status: SKIPPED (already analyzed)"/>
131
+ <output name="status" value="skipped"/>
132
+ <output name="message" value="Feature already analyzed, skipping"/>
133
+ <checkpoint name="skip-complete" verify="true"/>
134
+ </branch>
135
+ <branch condition="{{analyzed}} == false">
136
+ <event action="log" level="info" message="Step 0 Status: PROCEEDING (analysis required)"/>
137
+ </branch>
138
+ </gateway>
139
+
140
+ <!-- ==================== STEP 1: READ ANALYSIS TEMPLATE ==================== -->
141
+ <task name="step1-read-template" action="run-skill">
142
+ <description>Read the appropriate template based on platform type</description>
143
+ <parameter name="platform_type">{{platform_type}}</parameter>
144
+ <parameter name="platform_subtype">{{platform_subtype}}</parameter>
145
+ <script>
146
+ <!-- Template Selection Logic -->
147
+ <gateway name="template-selection" mode="exclusive">
148
+ <branch condition="{{platform_type}} == 'mobile'">
149
+ <output name="templateFile" value="../speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MOBILE.md"/>
150
+ </branch>
151
+ <branch condition="{{platform_type}} == 'miniapp'">
152
+ <output name="templateFile" value="../speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MINIAPP.md"/>
153
+ </branch>
154
+ <branch condition="{{platform_type}} == 'desktop' AND {{platform_subtype}} == 'electron'">
155
+ <output name="templateFile" value="../speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-ELECTRON.md"/>
156
+ </branch>
157
+ <branch condition="{{platform_type}} == 'desktop'">
158
+ <output name="templateFile" value="../speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-DESKTOP.md"/>
159
+ </branch>
160
+ <branch condition="default">
161
+ <output name="templateFile" value="../speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI.md"/>
162
+ </branch>
163
+ </gateway>
164
+
165
+ <!-- Read Template Content -->
166
+ <task action="read-file" target="{{templateFile}}">
167
+ <output name="templateContent" from="file.content"/>
168
+ </task>
169
+
170
+ <!-- Validate Template Structure -->
171
+ <checkpoint name="template-loaded" verify="{{templateContent}} != null AND {{templateContent}} != ''"/>
172
+ <event action="log" level="info" message="Step 1 Status: COMPLETED - Read template for {{platform_type}}/{{platform_subtype}}"/>
173
+ </script>
174
+ </task>
175
+
176
+ <!-- ==================== STEP 2: READ FEATURE FILE AND ANALYZE UI STRUCTURE ==================== -->
177
+ <task name="step2-read-source" action="run-skill">
178
+ <description>Read feature file and analyze UI structure, components, props, state management</description>
179
+ <parameter name="sourcePath">{{sourcePath}}</parameter>
180
+ <script>
181
+ <!-- Read Source File -->
182
+ <task action="read-file" target="{{sourcePath}}">
183
+ <output name="sourceContent" from="file.content"/>
184
+ <output name="lineCount" from="file.lineCount"/>
185
+ </task>
186
+
187
+ <!-- Analyze UI Structure -->
188
+ <task action="analyze-ui">
189
+ <input name="content">{{sourceContent}}</input>
190
+ <input name="tech_stack">{{tech_stack}}</input>
191
+ <output name="componentCount" from="analysis.components"/>
192
+ <output name="eventCount" from="analysis.events"/>
193
+ <output name="apiCalls" from="analysis.apis"/>
194
+ <output name="stateFields" from="analysis.state"/>
195
+ <output name="formFields" from="analysis.forms"/>
196
+ </task>
197
+
198
+ <checkpoint name="source-analyzed" verify="{{sourceContent}} != null"/>
199
+ <event action="log" level="info" message="Step 2 Status: COMPLETED - Read {{sourcePath}} ({{lineCount}} lines), Analyzed {{componentCount}} components, {{eventCount}} events"/>
200
+ </script>
201
+ </task>
202
+
203
+ <!-- ==================== STEP 3: EXTRACT BUSINESS FEATURES ==================== -->
204
+ <task name="step3-extract-features" action="run-skill">
205
+ <description>Extract business features, wireframes, and business flows from source analysis</description>
206
+ <parameter name="sourceContent">{{sourceContent}}</parameter>
207
+ <parameter name="language">{{language}}</parameter>
208
+ <script>
209
+ <!-- Read Mermaid Rules -->
210
+ <task action="read-file" target="speccrew-workspace/docs/rules/mermaid-rule.md">
211
+ <output name="mermaidRules" from="file.content"/>
212
+ </task>
213
+
214
+ <!-- Extract Wireframes -->
215
+ <task action="extract-wireframes">
216
+ <input name="content">{{sourceContent}}</input>
217
+ <input name="platform">{{platform_type}}</input>
218
+ <output name="wireframes" from="extraction.wireframes"/>
219
+ <output name="wireframeCount" from="extraction.count"/>
220
+ </task>
221
+
222
+ <!-- Extract Business Flows -->
223
+ <task action="extract-flows">
224
+ <input name="content">{{sourceContent}}</input>
225
+ <input name="events">{{eventCount}}</input>
226
+ <output name="flows" from="extraction.flows"/>
227
+ <output name="flowCount" from="extraction.count"/>
228
+ <output name="sequenceAnalysis" from="extraction.sequences"/>
229
+ <output name="boundaryScenarios" from="extraction.boundaries"/>
230
+ </task>
231
+
232
+ <!-- Extract Data Bindings -->
233
+ <task action="extract-data-bindings">
234
+ <input name="stateFields">{{stateFields}}</input>
235
+ <input name="formFields">{{formFields}}</input>
236
+ <output name="dataBindingMap" from="extraction.bindings"/>
237
+ <output name="reactiveDependencies" from="extraction.dependencies"/>
238
+ </task>
239
+
240
+ <checkpoint name="features-extracted" verify="{{flowCount}} &gt; 0 OR {{wireframeCount}} &gt; 0"/>
241
+ <event action="log" level="info" message="Step 3 Status: COMPLETED - Extracted {{wireframeCount}} wireframes, {{flowCount}} business flows"/>
242
+ </script>
243
+ </task>
244
+
245
+ <!-- ==================== STEP 4: FIND REFERENCING PAGES ==================== -->
246
+ <task name="step4-find-references" action="run-skill">
247
+ <description>Search other page files to find which pages reference/navigate to this page</description>
248
+ <parameter name="fileName">{{fileName}}</parameter>
249
+ <parameter name="sourcePath">{{sourcePath}}</parameter>
250
+ <script>
251
+ <!-- Search for Router Navigation -->
252
+ <task action="grep-search">
253
+ <input name="pattern">{{fileName}}</input>
254
+ <input name="glob">*.{vue,tsx,jsx}</input>
255
+ <output name="routerMatches" from="search.results"/>
256
+ </task>
257
+
258
+ <!-- Search for Component Imports -->
259
+ <task action="grep-search">
260
+ <input name="pattern">import.*{{fileName}}</input>
261
+ <input name="glob">*.{vue,tsx,jsx,ts,js}</input>
262
+ <output name="importMatches" from="search.results"/>
263
+ </task>
264
+
265
+ <!-- Compile Referencing Pages -->
266
+ <task action="compile-references">
267
+ <input name="routerMatches">{{routerMatches}}</input>
268
+ <input name="importMatches">{{importMatches}}</input>
269
+ <output name="referencingPages" from="compilation.pages"/>
270
+ <output name="referenceCount" from="compilation.count"/>
271
+ </task>
272
+
273
+ <event action="log" level="info" message="Step 4 Status: COMPLETED - Found {{referenceCount}} referencing pages"/>
274
+ </script>
275
+ </task>
276
+
277
+ <!-- ==================== STEP 5A: COPY TEMPLATE TO DOCUMENT PATH ==================== -->
278
+ <task name="step5a-copy-template" action="run-skill">
279
+ <description>Copy the appropriate template file to the target document path, replacing top-level placeholders</description>
280
+ <parameter name="templateContent">{{templateContent}}</parameter>
281
+ <parameter name="documentPath">{{documentPath}}</parameter>
282
+ <parameter name="fileName">{{fileName}}</parameter>
283
+ <parameter name="sourcePath">{{sourcePath}}</parameter>
284
+ <parameter name="language">{{language}}</parameter>
285
+ <script>
286
+ <!-- Prepare Placeholder Replacements -->
287
+ <task action="prepare-replacements">
288
+ <output name="featureName" from="i18n.featureName"/>
289
+ <output name="currentDate" from="date.now"/>
290
+ </task>
291
+
292
+ <!-- Replace Top-Level Placeholders -->
293
+ <task action="replace-placeholders">
294
+ <input name="template">{{templateContent}}</input>
295
+ <replacements>
296
+ <replacement from="{Feature Name}" to="{{featureName}}"/>
297
+ <replacement from="{documentPath}" to="{{documentPath}}"/>
298
+ <replacement from="{sourcePath}" to="{{sourcePath}}"/>
299
+ <replacement from="{Date}" to="{{currentDate}}"/>
300
+ <replacement from="{FeatureFile}.vue" to="{{fileName}}.vue"/>
301
+ </replacements>
302
+ <output name="documentSkeleton" from="result.content"/>
303
+ </task>
304
+
305
+ <!-- Write Document Skeleton -->
306
+ <task action="create-file" target="{{documentPath}}">
307
+ <content>{{documentSkeleton}}</content>
308
+ </task>
309
+
310
+ <checkpoint name="template-copied" verify="file.exists({{documentPath}})"/>
311
+ <event action="log" level="info" message="Step 5a Status: COMPLETED - Template copied to {{documentPath}}"/>
312
+ </script>
313
+ </task>
314
+
315
+ <!-- ==================== STEP 5B: FILL EACH SECTION USING SEARCH_REPLACE ==================== -->
316
+ <task name="step5b-fill-sections" action="run-skill">
317
+ <description>Fill each section of the copied template document using search_replace</description>
318
+ <parameter name="documentPath">{{documentPath}}</parameter>
319
+ <parameter name="analysisData">{{analysisData}}</parameter>
320
+ <parameter name="language">{{language}}</parameter>
321
+ <script>
322
+ <!-- Section 1: Content Overview -->
323
+ <task action="search_replace" target="{{documentPath}}">
324
+ <search>## 1. Content Overview.*?(?=## 2.|$)</search>
325
+ <replace>## 1. Content Overview
326
+
327
+ {{section1Content}}</replace>
328
+ </task>
329
+
330
+ <!-- Section 2: Interface Prototype -->
331
+ <task action="search_replace" target="{{documentPath}}">
332
+ <search>## 2. Interface Prototype.*?(?=## 3.|$)</search>
333
+ <replace>## 2. Interface Prototype
334
+
335
+ {{wireframes}}
336
+
337
+ ### Interface Element Description
338
+
339
+ {{elementDescriptions}}</replace>
340
+ </task>
341
+
342
+ <!-- Section 3: Business Flow -->
343
+ <task action="search_replace" target="{{documentPath}}">
344
+ <search>## 3. Business Flow.*?(?=## 4.|$)</search>
345
+ <replace>## 3. Business Flow
346
+
347
+ {{businessFlows}}
348
+
349
+ ### API Call Sequence Analysis
350
+
351
+ {{sequenceAnalysis}}
352
+
353
+ ### Boundary Scenarios
354
+
355
+ {{boundaryScenarios}}</replace>
356
+ </task>
357
+
358
+ <!-- Section 4: Data Field Definition -->
359
+ <task action="search_replace" target="{{documentPath}}">
360
+ <search>## 4. Data Field Definition.*?(?=## 5.|$)</search>
361
+ <replace>## 4. Data Field Definition
362
+
363
+ ### Page State Fields
364
+
365
+ {{stateFieldsTable}}
366
+
367
+ ### Form Fields
368
+
369
+ {{formFieldsTable}}
370
+
371
+ ### Data Binding Mapping
372
+
373
+ {{dataBindingMap}}
374
+
375
+ ### Reactive Dependency Chain
376
+
377
+ {{reactiveDependencies}}</replace>
378
+ </task>
379
+
380
+ <!-- Section 5: References -->
381
+ <task action="search_replace" target="{{documentPath}}">
382
+ <search>## 5. References.*?(?=## 6.|$)</search>
383
+ <replace>## 5. References
384
+
385
+ ### APIs
386
+
387
+ {{apiReferences}}
388
+
389
+ ### Shared Methods
390
+
391
+ {{sharedMethods}}
392
+
393
+ ### Shared Components
394
+
395
+ {{sharedComponents}}
396
+
397
+ ### Other Pages
398
+
399
+ {{otherPages}}
400
+
401
+ ### Referenced By
402
+
403
+ {{referencedBy}}</replace>
404
+ </task>
405
+
406
+ <!-- Section 6: Business Rule Constraints -->
407
+ <task action="search_replace" target="{{documentPath}}">
408
+ <search>## 6. Business Rule Constraints.*?(?=## 7.|$)</search>
409
+ <replace>## 6. Business Rule Constraints
410
+
411
+ ### Permission Rules
412
+
413
+ {{permissionRules}}
414
+
415
+ ### Business Logic Rules
416
+
417
+ {{businessRules}}
418
+
419
+ ### Validation Rules
420
+
421
+ {{validationRules}}</replace>
422
+ </task>
423
+
424
+ <!-- Section 7: Notes and Additional Information -->
425
+ <task action="search_replace" target="{{documentPath}}">
426
+ <search>## 7. Notes and Additional Information.*?(?=$)</search>
427
+ <replace>## 7. Notes and Additional Information
428
+
429
+ {{notes}}
430
+
431
+ ### Performance and Scalability Analysis
432
+
433
+ {{performanceAnalysis}}</replace>
434
+ </task>
435
+
436
+ <checkpoint name="all-sections-filled" verify="all.sections.filled"/>
437
+ <event action="log" level="info" message="Step 5b Status: COMPLETED - All sections filled using search_replace"/>
438
+ </script>
439
+ </task>
440
+
441
+ <!-- ==================== STEP 6: REPORT RESULTS ==================== -->
442
+ <task name="step6-report" action="run-skill">
443
+ <description>Return analysis result summary</description>
444
+ <script>
445
+ <output name="status" value="success"/>
446
+ <output name="feature_name" value="{{fileName}}"/>
447
+ <output name="generated_file" value="{{documentPath}}"/>
448
+ <output name="message" value="Successfully analyzed {{fileName}} feature from {{sourcePath}}"/>
449
+
450
+ <event action="log" level="info" message="Step 6 Status: COMPLETED - Analysis {{status}}: {{message}}"/>
451
+ </script>
452
+ </task>
453
+
454
+ <!-- ==================== FINAL OUTPUT ==================== -->
455
+ <output name="status" from="step6-report.status"/>
456
+ <output name="feature" from="step6-report.feature"/>
457
+ <output name="platformType" from="input.platform_type"/>
458
+ <output name="module" from="input.module"/>
459
+ <output name="featureName" from="step6-report.feature_name"/>
460
+ <output name="generatedFile" from="step6-report.generated_file"/>
461
+ <output name="message" from="step6-report.message"/>
462
+
463
+ <!-- ==================== ERROR HANDLING ==================== -->
464
+ <error-handler>
465
+ <catch type="file-not-found">
466
+ <event action="log" level="error" message="Source file not found: {{sourcePath}}"/>
467
+ <output name="status" value="failed"/>
468
+ <output name="message" value="Source file not found: {{sourcePath}}"/>
469
+ </catch>
470
+ <catch type="template-error">
471
+ <event action="log" level="error" message="Template processing error"/>
472
+ <output name="status" value="failed"/>
473
+ <output name="message" value="Failed to process template"/>
474
+ </catch>
475
+ <catch type="validation-error">
476
+ <event action="log" level="error" message="Validation failed: {{error.message}}"/>
477
+ <output name="status" value="partial"/>
478
+ <output name="message" value="Analysis completed with validation errors"/>
479
+ </catch>
480
+ <finally>
481
+ <event action="log" level="info" message="Workflow execution completed"/>
482
+ </finally>
483
+ </error-handler>
484
+
485
+ </workflow>
486
+ ```
487
+
488
+ ## Constraints
489
+
490
+ 1. **DO NOT analyze files outside the specified `{{sourcePath}}`**
491
+ 2. **DO NOT generate separate documents for embedded components**
492
+ 3. **All content MUST be in the language specified by `{{language}}`**
493
+ 4. **Use `search_replace` for section filling, NEVER rewrite entire document**
494
+ 5. **Mermaid diagrams MUST follow the rules in `mermaid-rule.md`**
495
+ 6. **All links MUST use relative paths, NEVER `file://` protocol**
496
+
497
+ ## Task Completion Report
498
+
499
+ When the task is complete, report the following:
500
+
501
+ **Status:** `success` | `partial` | `failed`
502
+
503
+ **Summary:**
504
+ - Feature analyzed: `{{feature_name}}`
505
+ - Document generated: `{{documentPath}}`
506
+ - Platform: `{{platform_type}}/{{platform_subtype}}`
507
+ - Module: `{{module}}`
508
+
509
+ **Files Generated:**
510
+ - `{{documentPath}}` - Feature documentation
511
+
512
+ **Note:** Graph data construction (nodes, edges, marker files) is handled by `speccrew-knowledge-bizs-ui-graph` Skill.
513
+
514
+ ## Checklist
515
+
516
+ - [ ] Template file selected based on `{{platform_type}}`
517
+ - [ ] Template content read successfully
518
+ - [ ] Source file read and analyzed
519
+ - [ ] Business features extracted with wireframes
520
+ - [ ] Referencing pages found
521
+ - [ ] Template copied to document path
522
+ - [ ] All sections filled using search_replace
523
+ - [ ] All content in target language (`{{language}}`)
524
+ - [ ] Results reported in JSON format