speccrew 0.6.42 → 0.6.44
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/skills/speccrew-knowledge-bizs-api-analyze-xml/SKILL.md +505 -477
- package/.speccrew/skills/speccrew-knowledge-bizs-api-graph-xml/SKILL.md +290 -196
- package/.speccrew/skills/speccrew-knowledge-bizs-identify-entries-xml/SKILL.md +145 -145
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze-xml/SKILL.md +325 -376
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-graph-xml/SKILL.md +241 -129
- package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract-xml/SKILL.md +231 -209
- package/.speccrew/skills/speccrew-knowledge-module-summarize-xml/SKILL.md +301 -255
- package/.speccrew/skills/speccrew-knowledge-system-summarize-xml/SKILL.md +362 -278
- package/.speccrew/skills/speccrew-knowledge-techs-generate-conventions-xml/SKILL.md +722 -627
- package/.speccrew/skills/speccrew-knowledge-techs-generate-xml/SKILL.md +195 -117
- package/.speccrew/skills/speccrew-knowledge-techs-index-xml/SKILL.md +151 -99
- package/.speccrew/skills/speccrew-knowledge-techs-init-xml/SKILL.md +201 -99
- package/package.json +1 -1
|
@@ -70,236 +70,258 @@ Extract and aggregate **UI design patterns** from bizs pipeline analyzed feature
|
|
|
70
70
|
|
|
71
71
|
> **REQUIRED**: Before executing this workflow, read the XML workflow specification: `docs/rules/xml-workflow-spec.md`
|
|
72
72
|
|
|
73
|
-
<workflow>
|
|
74
|
-
|
|
75
|
-
<!--
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
<
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
<
|
|
92
|
-
<
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
73
|
+
<workflow id="ui-style-extract-main" status="pending" version="1.0" desc="Extract and aggregate UI design patterns from feature documents">
|
|
74
|
+
|
|
75
|
+
<!-- ============================================================
|
|
76
|
+
Input Parameters Definition
|
|
77
|
+
============================================================ -->
|
|
78
|
+
<block type="input" id="I1" desc="Workflow input parameters">
|
|
79
|
+
<field name="platform_id" required="true" type="string" desc="Platform identifier (e.g., web-vue, mobile-uniapp)"/>
|
|
80
|
+
<field name="platform_type" required="true" type="string" desc="Platform type (web, mobile, desktop)"/>
|
|
81
|
+
<field name="feature_docs_path" required="true" type="string" desc="Completed feature documents base path"/>
|
|
82
|
+
<field name="features_manifest_path" required="true" type="string" desc="Path to features-{platform}.json"/>
|
|
83
|
+
<field name="module_overviews_path" required="true" type="string" desc="Parent directory containing all module overview subdirectories"/>
|
|
84
|
+
<field name="output_path" required="true" type="string" desc="Output directory for pattern documents"/>
|
|
85
|
+
<field name="language" required="true" type="string" desc="User language code"/>
|
|
86
|
+
</block>
|
|
87
|
+
|
|
88
|
+
<!-- ============================================================
|
|
89
|
+
Global Constraints
|
|
90
|
+
============================================================ -->
|
|
91
|
+
<block type="rule" id="R1" level="forbidden" desc="Document generation constraints">
|
|
92
|
+
<field name="text">Using create_file to write pattern documents directly</field>
|
|
93
|
+
<field name="text">Full-file rewrite of pattern documents</field>
|
|
94
|
+
</block>
|
|
95
|
+
|
|
96
|
+
<block type="rule" id="R2" level="mandatory" desc="Document generation requirements">
|
|
97
|
+
<field name="text">Copy template MUST execute before filling sections for every pattern document</field>
|
|
98
|
+
<field name="text">All generated pattern documents must be in the specified language</field>
|
|
99
|
+
</block>
|
|
100
|
+
|
|
101
|
+
<!-- ============================================================
|
|
102
|
+
Global Continuous Execution Rules
|
|
103
|
+
============================================================ -->
|
|
104
|
+
<block type="rule" id="GLOBAL-R1" level="forbidden" desc="Continuous execution constraints — NEVER violate">
|
|
105
|
+
<field name="text">DO NOT ask user "Should I continue?" or "How would you like to proceed?" during execution</field>
|
|
106
|
+
<field name="text">DO NOT offer options like "Full execution / Partial / Stop" — always execute ALL tasks to completion</field>
|
|
107
|
+
<field name="text">DO NOT suggest "Due to context window limits, let me pause" — complete current task, use checkpoint for resumption</field>
|
|
108
|
+
<field name="text">DO NOT estimate workload and suggest breaking it into phases — execute ALL items in sequence</field>
|
|
109
|
+
<field name="text">DO NOT warn about "large number of files" or "this may take a while" — proceed with generation</field>
|
|
110
|
+
<field name="text">Context window management: if approaching limit, save progress to checkpoint file and resume — do NOT ask user for guidance</field>
|
|
111
|
+
</block>
|
|
112
|
+
|
|
113
|
+
<!-- ============================================================
|
|
114
|
+
Gateway: Platform Type Check
|
|
115
|
+
============================================================ -->
|
|
116
|
+
<block type="gateway" id="G1" mode="exclusive" desc="Check platform type for UI pattern extraction">
|
|
117
|
+
<branch test="${platform_type} NOT IN ['web', 'mobile', 'desktop']" name="Backend platform">
|
|
118
|
+
<block type="event" id="E1" action="log" level="info" desc="Log skip reason">Skipping skill: backend platforms do not have UI patterns</block>
|
|
119
|
+
<block type="task" id="B1" action="analyze" desc="Return skip status">
|
|
120
|
+
<field name="status" value="skipped"/>
|
|
121
|
+
<field name="reason" value="Backend platform does not have UI patterns"/>
|
|
122
|
+
<field name="output" var="summary"/>
|
|
123
|
+
</block>
|
|
101
124
|
</branch>
|
|
102
|
-
<branch
|
|
103
|
-
|
|
104
|
-
<!--
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
<
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
<
|
|
136
|
-
<
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
<
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
<
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
</script>
|
|
160
|
-
<extraction>
|
|
161
|
-
<item>Common page structures</item>
|
|
162
|
-
<item>Shared components</item>
|
|
163
|
-
<item>Navigation patterns</item>
|
|
164
|
-
</extraction>
|
|
165
|
-
<output name="module_context" />
|
|
166
|
-
</task>
|
|
125
|
+
<branch test="${platform_type} IN ['web', 'mobile', 'desktop']" name="UI platform">
|
|
126
|
+
|
|
127
|
+
<!-- ============================================================
|
|
128
|
+
Step 1: Load Features Manifest
|
|
129
|
+
============================================================ -->
|
|
130
|
+
<sequence id="S1" name="Step 1: Load Features Manifest" status="pending" desc="Read features manifest to identify completed features">
|
|
131
|
+
<block type="task" id="B2" action="read-file" desc="Read features manifest file">
|
|
132
|
+
<field name="path" value="${features_manifest_path}"/>
|
|
133
|
+
<field name="output" var="featuresManifest"/>
|
|
134
|
+
</block>
|
|
135
|
+
|
|
136
|
+
<block type="task" id="B3" action="analyze" desc="Filter completed features">
|
|
137
|
+
<field name="input" value="${featuresManifest}"/>
|
|
138
|
+
<field name="filter" value="status === 'completed'"/>
|
|
139
|
+
<field name="collect" value="featureId, module, documentPath"/>
|
|
140
|
+
<field name="output" var="completed_features"/>
|
|
141
|
+
</block>
|
|
142
|
+
</sequence>
|
|
143
|
+
|
|
144
|
+
<!-- ============================================================
|
|
145
|
+
Gateway: Check Completed Features
|
|
146
|
+
============================================================ -->
|
|
147
|
+
<block type="gateway" id="G2" mode="guard" desc="Check if completed features exist">
|
|
148
|
+
<branch test="${completed_features.length} > 0" name="Has completed features">
|
|
149
|
+
|
|
150
|
+
<!-- Step 1.5: Create Output Directory -->
|
|
151
|
+
<block type="task" id="B4" action="run-script" desc="Create output directory structure">
|
|
152
|
+
<field name="command">node -e "require('fs').mkdirSync('${output_path}/page-types', {recursive:true}); require('fs').mkdirSync('${output_path}/components', {recursive:true}); require('fs').mkdirSync('${output_path}/layouts', {recursive:true})"</field>
|
|
153
|
+
</block>
|
|
154
|
+
|
|
155
|
+
<!-- ============================================================
|
|
156
|
+
Step 2: Read Feature Documents
|
|
157
|
+
============================================================ -->
|
|
158
|
+
<sequence id="S2" name="Step 2: Read Feature Documents" status="pending" desc="Extract UI information from feature documents">
|
|
159
|
+
<block type="task" id="B5" action="analyze" desc="Extract UI-related information from feature documents">
|
|
160
|
+
<field name="input" value="${completed_features}"/>
|
|
161
|
+
<field name="feature_docs_path" value="${feature_docs_path}"/>
|
|
162
|
+
<field name="extract_section" value="Interface Prototype"/>
|
|
163
|
+
<field name="extract_items" value="ASCII wireframe diagrams, layout regions"/>
|
|
164
|
+
<field name="extract_section_2" value="Page Elements Table"/>
|
|
165
|
+
<field name="extract_items_2" value="Component names, types, responsibilities, interactions"/>
|
|
166
|
+
<field name="extract_section_3" value="Business Flow Description"/>
|
|
167
|
+
<field name="extract_items_3" value="User interaction sequences, navigation patterns"/>
|
|
168
|
+
<field name="output" var="ui_extracted_data"/>
|
|
169
|
+
</block>
|
|
170
|
+
</sequence>
|
|
171
|
+
|
|
172
|
+
<!-- ============================================================
|
|
173
|
+
Step 3: Read Module Overviews
|
|
174
|
+
============================================================ -->
|
|
175
|
+
<sequence id="S3" name="Step 3: Read Module Overviews" status="pending" desc="Gather module-level context">
|
|
176
|
+
<block type="task" id="B6" action="analyze" desc="Read module overview files for context">
|
|
177
|
+
<field name="glob_pattern" value="${module_overviews_path}/*/module-overview.md"/>
|
|
178
|
+
<field name="extract_items" value="Common page structures, Shared components, Navigation patterns"/>
|
|
179
|
+
<field name="output" var="module_context"/>
|
|
180
|
+
</block>
|
|
181
|
+
</sequence>
|
|
167
182
|
|
|
168
183
|
<!-- Checkpoint: Data Collection Complete -->
|
|
169
|
-
<checkpoint name="data-collection-complete"
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
<
|
|
182
|
-
<
|
|
183
|
-
<
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
<
|
|
187
|
-
<
|
|
188
|
-
<
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
<
|
|
184
|
+
<block type="checkpoint" id="CP1" name="data-collection-complete" desc="Data collection complete">
|
|
185
|
+
<field name="file" value="${output_path}/.progress.json"/>
|
|
186
|
+
<field name="verify" value="${ui_extracted_data} != null AND ${module_context} != null"/>
|
|
187
|
+
</block>
|
|
188
|
+
|
|
189
|
+
<!-- ============================================================
|
|
190
|
+
Step 4: Cross-Module Clustering Analysis
|
|
191
|
+
============================================================ -->
|
|
192
|
+
<sequence id="S4" name="Step 4: Cross-Module Clustering Analysis" status="pending" desc="Identify recurring UI patterns">
|
|
193
|
+
<block type="task" id="B7" action="analyze" desc="Perform cross-module clustering analysis">
|
|
194
|
+
<field name="input" value="${ui_extracted_data}"/>
|
|
195
|
+
<field name="module_context" value="${module_context}"/>
|
|
196
|
+
<field name="clustering_approach" value="Dynamic discovery - Agent automatically identifies and categorizes pattern types based on actual analysis results"/>
|
|
197
|
+
<field name="note" value="Templates only standardize output format, do not limit pattern types"/>
|
|
198
|
+
<field name="categories_page_types" value="Pages with similar structure and purpose (e.g., list-page, form-page, detail-page, tree-list-page, dashboard-page, wizard-page)"/>
|
|
199
|
+
<field name="categories_component_patterns" value="Reusable component combinations (e.g., search-filter-bar, data-table-pagination, modal-form, drawer-detail, tab-panel)"/>
|
|
200
|
+
<field name="categories_layout_patterns" value="Repeating structural layouts (e.g., sidebar-content, topbar-sidebar-content, full-screen)"/>
|
|
201
|
+
<field name="recognition_frequency" value="Pattern appears in 2+ features (stronger signal if across different modules)"/>
|
|
202
|
+
<field name="recognition_similarity" value="Structural similarity in ASCII wireframes"/>
|
|
203
|
+
<field name="recognition_semantic" value="Similar business purpose and interaction flow"/>
|
|
204
|
+
<field name="output" var="identified_patterns"/>
|
|
205
|
+
</block>
|
|
206
|
+
</sequence>
|
|
207
|
+
|
|
208
|
+
<!-- ============================================================
|
|
209
|
+
Gateway: Check Identified Patterns
|
|
210
|
+
============================================================ -->
|
|
211
|
+
<block type="gateway" id="G3" mode="exclusive" desc="Check if patterns were identified">
|
|
212
|
+
<branch test="${identified_patterns.length} == 0" name="No patterns">
|
|
213
|
+
<block type="event" id="E2" action="log" level="warn" desc="Log no patterns">No patterns identified from feature documents</block>
|
|
214
|
+
<block type="task" id="B8" action="analyze" desc="Return empty result">
|
|
215
|
+
<field name="status" value="completed"/>
|
|
216
|
+
<field name="platform_id" value="${platform_id}"/>
|
|
217
|
+
<field name="patterns_page_types" value='{"count": 0, "files": []}'/>
|
|
218
|
+
<field name="patterns_components" value='{"count": 0, "files": []}'/>
|
|
219
|
+
<field name="patterns_layouts" value='{"count": 0, "files": []}'/>
|
|
220
|
+
<field name="total_patterns" value="0"/>
|
|
221
|
+
<field name="output_path" value="${output_path}"/>
|
|
222
|
+
<field name="output" var="summary"/>
|
|
223
|
+
</block>
|
|
199
224
|
</branch>
|
|
200
|
-
<branch
|
|
225
|
+
<branch test="${identified_patterns.length} > 0" name="Has patterns">
|
|
201
226
|
|
|
202
|
-
<!--
|
|
203
|
-
|
|
227
|
+
<!-- ============================================================
|
|
228
|
+
Step 5: Generate Pattern Documents
|
|
229
|
+
============================================================ -->
|
|
230
|
+
<block type="loop" id="L1" over="${identified_patterns}" as="pattern" desc="Generate pattern documents">
|
|
204
231
|
|
|
205
232
|
<!-- 5.1 Template Selection -->
|
|
206
|
-
<gateway mode="exclusive">
|
|
207
|
-
<branch
|
|
208
|
-
<task
|
|
209
|
-
<
|
|
210
|
-
<
|
|
211
|
-
<
|
|
212
|
-
</
|
|
233
|
+
<block type="gateway" id="G4" mode="exclusive" desc="Select template based on pattern category">
|
|
234
|
+
<branch test="${pattern.category} == 'page-types'" name="Page type">
|
|
235
|
+
<block type="task" id="B9" action="analyze" desc="Select page type template">
|
|
236
|
+
<field name="template_path" value="../speccrew-knowledge-bizs-ui-style-extract/templates/PAGE-TYPE-TEMPLATE.md"/>
|
|
237
|
+
<field name="output_directory" value="${output_path}/page-types/"/>
|
|
238
|
+
<field name="output" var="selected_template"/>
|
|
239
|
+
</block>
|
|
213
240
|
</branch>
|
|
214
|
-
<branch
|
|
215
|
-
<task
|
|
216
|
-
<
|
|
217
|
-
<
|
|
218
|
-
<
|
|
219
|
-
</
|
|
241
|
+
<branch test="${pattern.category} == 'components'" name="Component pattern">
|
|
242
|
+
<block type="task" id="B10" action="analyze" desc="Select component pattern template">
|
|
243
|
+
<field name="template_path" value="../speccrew-knowledge-bizs-ui-style-extract/templates/COMPONENT-PATTERN-TEMPLATE.md"/>
|
|
244
|
+
<field name="output_directory" value="${output_path}/components/"/>
|
|
245
|
+
<field name="output" var="selected_template"/>
|
|
246
|
+
</block>
|
|
220
247
|
</branch>
|
|
221
|
-
<branch
|
|
222
|
-
<task
|
|
223
|
-
<
|
|
224
|
-
<
|
|
225
|
-
<
|
|
226
|
-
</
|
|
248
|
+
<branch test="${pattern.category} == 'layouts'" name="Layout pattern">
|
|
249
|
+
<block type="task" id="B11" action="analyze" desc="Select layout pattern template">
|
|
250
|
+
<field name="template_path" value="../speccrew-knowledge-bizs-ui-style-extract/templates/LAYOUT-PATTERN-TEMPLATE.md"/>
|
|
251
|
+
<field name="output_directory" value="${output_path}/layouts/"/>
|
|
252
|
+
<field name="output" var="selected_template"/>
|
|
253
|
+
</block>
|
|
227
254
|
</branch>
|
|
228
|
-
</
|
|
255
|
+
</block>
|
|
229
256
|
|
|
230
257
|
<!-- 5.2 Copy Template to Document Path -->
|
|
231
|
-
<task
|
|
232
|
-
<
|
|
233
|
-
<
|
|
234
|
-
<
|
|
235
|
-
<
|
|
236
|
-
|
|
237
|
-
</task>
|
|
258
|
+
<block type="task" id="B12" action="run-script" desc="Copy template to output path">
|
|
259
|
+
<field name="template" value="${selected_template}"/>
|
|
260
|
+
<field name="filename_format" value="kebab-case (e.g., list-page.md, search-filter-bar.md, sidebar-content.md)"/>
|
|
261
|
+
<field name="output_path" value="${selected_template.output_directory}/${pattern.name}.md"/>
|
|
262
|
+
<field name="output" var="document_path"/>
|
|
263
|
+
</block>
|
|
238
264
|
|
|
239
265
|
<!-- 5.3 Fill Sections Using search_replace -->
|
|
240
|
-
<task
|
|
241
|
-
<
|
|
242
|
-
<
|
|
243
|
-
<
|
|
244
|
-
<
|
|
245
|
-
<
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
<
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
<rule>Use graph TB/LR syntax only</rule>
|
|
256
|
-
<rule>No br/ tags, no style definitions, no nested subgraph</rule>
|
|
257
|
-
<rule>No direction keyword, no special symbols</rule>
|
|
258
|
-
</mermaid-diagrams>
|
|
259
|
-
</content-requirements>
|
|
260
|
-
<output name="filled_document" />
|
|
261
|
-
</task>
|
|
266
|
+
<block type="task" id="B13" action="analyze" desc="Fill pattern document sections">
|
|
267
|
+
<field name="document_path" value="${document_path}"/>
|
|
268
|
+
<field name="pattern" value="${pattern}"/>
|
|
269
|
+
<field name="language" value="${language}"/>
|
|
270
|
+
<field name="constraint_forbidden" value="Using create_file to rewrite the entire document"/>
|
|
271
|
+
<field name="constraint_mandatory" value="Use search_replace to fill each section individually"/>
|
|
272
|
+
<field name="constraint_sections" value="All section titles MUST be preserved"/>
|
|
273
|
+
<field name="content_ascii_wireframes" value="Must be generalized versions (not direct copies from specific features)"/>
|
|
274
|
+
<field name="content_instance_references" value="Must use relative paths to reference actual feature documents"/>
|
|
275
|
+
<field name="mermaid_rule" value="Follow speccrew-workspace/docs/rules/mermaid-rule.md rules"/>
|
|
276
|
+
<field name="mermaid_syntax" value="Use graph TB/LR syntax only"/>
|
|
277
|
+
<field name="mermaid_no_br" value="No br/ tags, no style definitions, no nested subgraph"/>
|
|
278
|
+
<field name="mermaid_no_direction" value="No direction keyword, no special symbols"/>
|
|
279
|
+
<field name="output" var="filled_document"/>
|
|
280
|
+
</block>
|
|
262
281
|
|
|
263
282
|
<!-- Checkpoint: Pattern Document Generated -->
|
|
264
|
-
<checkpoint name="pattern-document-generated"
|
|
283
|
+
<block type="checkpoint" id="CP2" name="pattern-document-generated" desc="Pattern document generated">
|
|
284
|
+
<field name="file" value="${output_path}/.progress.json"/>
|
|
285
|
+
<field name="verify" value="file_exists(${document_path}) AND document_has_all_sections(${document_path})"/>
|
|
286
|
+
</block>
|
|
265
287
|
|
|
266
|
-
</
|
|
288
|
+
</block>
|
|
289
|
+
|
|
290
|
+
<!-- Step 6: Return Summary -->
|
|
291
|
+
<block type="task" id="B14" action="analyze" desc="Generate summary of pattern documents">
|
|
292
|
+
<field name="collect_files" value="All generated file paths"/>
|
|
293
|
+
<field name="collect_counts" value="Pattern counts by category"/>
|
|
294
|
+
<field name="output" var="summary"/>
|
|
295
|
+
</block>
|
|
267
296
|
|
|
268
297
|
</branch>
|
|
269
|
-
</
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
<
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
<platform_id>{platform_id}</platform_id>
|
|
287
|
-
<patterns>
|
|
288
|
-
<page-types count="0" files="[]" />
|
|
289
|
-
<components count="0" files="[]" />
|
|
290
|
-
<layouts count="0" files="[]" />
|
|
291
|
-
</patterns>
|
|
292
|
-
<total_patterns>0</total_patterns>
|
|
293
|
-
<output_path>{output_path}</output_path>
|
|
294
|
-
</output>
|
|
295
|
-
</else>
|
|
296
|
-
</gateway>
|
|
298
|
+
</block>
|
|
299
|
+
|
|
300
|
+
</branch>
|
|
301
|
+
<branch test="${completed_features.length} == 0" name="No completed features">
|
|
302
|
+
<block type="event" id="E3" action="log" level="warn" desc="Log no features">No completed features found - returning empty result</block>
|
|
303
|
+
<block type="task" id="B15" action="analyze" desc="Return empty summary">
|
|
304
|
+
<field name="status" value="completed"/>
|
|
305
|
+
<field name="platform_id" value="${platform_id}"/>
|
|
306
|
+
<field name="patterns_page_types" value='{"count": 0, "files": []}'/>
|
|
307
|
+
<field name="patterns_components" value='{"count": 0, "files": []}'/>
|
|
308
|
+
<field name="patterns_layouts" value='{"count": 0, "files": []}'/>
|
|
309
|
+
<field name="total_patterns" value="0"/>
|
|
310
|
+
<field name="output_path" value="${output_path}"/>
|
|
311
|
+
<field name="output" var="summary"/>
|
|
312
|
+
</block>
|
|
313
|
+
</branch>
|
|
314
|
+
</block>
|
|
297
315
|
|
|
298
316
|
</branch>
|
|
299
|
-
</
|
|
300
|
-
|
|
301
|
-
<!--
|
|
302
|
-
|
|
317
|
+
</block>
|
|
318
|
+
|
|
319
|
+
<!-- ============================================================
|
|
320
|
+
Output Results
|
|
321
|
+
============================================================ -->
|
|
322
|
+
<block type="output" id="O1" desc="Workflow output results">
|
|
323
|
+
<field name="final_summary" from="${summary}" type="object" desc="Summary of generated pattern documents with file list and counts"/>
|
|
324
|
+
</block>
|
|
303
325
|
|
|
304
326
|
</workflow>
|
|
305
327
|
|