fix(core): introduce <output> tag for data emission in Core and BMM
The <template-output> tag was overloaded for two purposes: 1. Filling template sections (with file= attribute) 2. Emitting key-value data (without file= attribute) This change introduces a new <output> tag for the data emission pattern in Core and BMM modules, making the DSL semantically clearer: - <template-output file="path"> - saves content to file, pauses for user - <output> - emits key=value data, no file, no pause Updated workflow.xml DSL definition and converted occurrences in BMM workflow instruction files. Note: BMGD and CIS modules not included - see #1143 for ambiguity around CHECKPOINT PROTOCOL in those modules. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
9fe79882b2
commit
b2c9ec8e22
|
|
@ -5,7 +5,7 @@
|
|||
<mandate>Always read COMPLETE files - NEVER use offset/limit when reading any workflow related files</mandate>
|
||||
<mandate>Instructions are MANDATORY - either as file path, steps or embedded list in YAML, XML or markdown</mandate>
|
||||
<mandate>Execute ALL steps in instructions IN EXACT ORDER</mandate>
|
||||
<mandate>Save to template output file after EVERY "template-output" tag</mandate>
|
||||
<mandate>Save to template output file after EVERY "template-output" tag with file= attribute</mandate>
|
||||
<mandate>NEVER skip a step - YOU are responsible for every steps execution without fail or excuse</mandate>
|
||||
</llm>
|
||||
|
||||
|
|
@ -91,6 +91,13 @@
|
|||
</if>
|
||||
</substep>
|
||||
|
||||
<substep n="2c-data" title="Handle output Tags">
|
||||
<if tag="output">
|
||||
<action>Record the key=value data as workflow output</action>
|
||||
<action>Continue to next instruction without pausing</action>
|
||||
</if>
|
||||
</substep>
|
||||
|
||||
<substep n="2d" title="Step Completion">
|
||||
<check>If no special tags and NOT #yolo:</check>
|
||||
<ask>Continue to next step? (y/n/edit)</ask>
|
||||
|
|
@ -128,7 +135,8 @@
|
|||
<tag>invoke-protocol - Execute a reusable protocol (e.g., discover_inputs)</tag>
|
||||
</execution>
|
||||
<output>
|
||||
<tag>template-output - Save content checkpoint</tag>
|
||||
<tag>template-output file="path" - Save content to template file (pauses for user)</tag>
|
||||
<tag>output - Emit key=value data (no file, no pause)</tag>
|
||||
<tag>critical - Cannot be skipped</tag>
|
||||
<tag>example - Show example output</tag>
|
||||
</output>
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ Be conversational and insightful. Help {user_name} see their module through your
|
|||
</action>
|
||||
|
||||
<ask>Does this match your understanding of what this module should provide?</ask>
|
||||
<template-output>module_understanding</template-output>
|
||||
<output>module_understanding</output>
|
||||
</step>
|
||||
|
||||
<step n="2" goal="Discover improvement goals collaboratively">
|
||||
|
|
@ -105,7 +105,7 @@ Don't just list options - discuss them:
|
|||
Let the conversation flow naturally. Build a shared vision of what "better" looks like.
|
||||
</action>
|
||||
|
||||
<template-output>improvement_goals</template-output>
|
||||
<output>improvement_goals</output>
|
||||
</step>
|
||||
|
||||
<step n="3" goal="Facilitate improvements collaboratively" repeat="until-user-satisfied">
|
||||
|
|
@ -230,7 +230,7 @@ Connect improvements to broader BMAD principles without being preachy.
|
|||
- "How does this change affect users of the module?"
|
||||
</ask>
|
||||
|
||||
<template-output>improvement_implementation</template-output>
|
||||
<output>improvement_implementation</output>
|
||||
</step>
|
||||
|
||||
<step n="4" goal="Validate improvements holistically">
|
||||
|
|
@ -281,7 +281,7 @@ Your module is in great shape."
|
|||
</action>
|
||||
</check>
|
||||
|
||||
<template-output>validation_results</template-output>
|
||||
<output>validation_results</output>
|
||||
</step>
|
||||
|
||||
<step n="5" goal="Review improvements and guide next steps">
|
||||
|
|
@ -334,7 +334,7 @@ Be a helpful guide to what comes next, not just a task completer.
|
|||
- Work on a different module
|
||||
</ask>
|
||||
|
||||
<template-output>completion_summary</template-output>
|
||||
<output>completion_summary</output>
|
||||
</step>
|
||||
|
||||
</workflow>
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ If they're stuck, offer creative prompts:
|
|||
- "What repetitive tasks could be automated with agents?"
|
||||
- "What domain expertise could be captured in workflows?"
|
||||
|
||||
<template-output>module_vision</template-output>
|
||||
<output>module_vision</output>
|
||||
</step>
|
||||
|
||||
<step n="3" goal="Define module identity">
|
||||
|
|
@ -63,7 +63,7 @@ Based on the vision, work with user to define:
|
|||
- Should the module have a consistent personality across agents?
|
||||
- Star Trek crew? Fantasy party? Corporate team? Reality show cast?
|
||||
|
||||
<template-output>module_identity</template-output>
|
||||
<output>module_identity</output>
|
||||
</step>
|
||||
|
||||
<step n="4" goal="Agent architecture planning">
|
||||
|
|
@ -84,7 +84,7 @@ Suggest agent archetypes based on module type:
|
|||
- The Creator (generates content)
|
||||
- The Analyzer (processes and evaluates)
|
||||
|
||||
<template-output>agent_architecture</template-output>
|
||||
<output>agent_architecture</output>
|
||||
</step>
|
||||
|
||||
<step n="5" goal="Workflow ecosystem design">
|
||||
|
|
@ -113,7 +113,7 @@ For each workflow, define:
|
|||
- Input → Process → Output
|
||||
- Complexity (simple/standard/complex)
|
||||
|
||||
<template-output>workflow_ecosystem</template-output>
|
||||
<output>workflow_ecosystem</output>
|
||||
</step>
|
||||
|
||||
<step n="6" goal="User journey and scenarios">
|
||||
|
|
@ -131,7 +131,7 @@ Then walk through how they'd use the module:
|
|||
|
||||
This validates the module makes sense end-to-end.
|
||||
|
||||
<template-output>user_scenarios</template-output>
|
||||
<output>user_scenarios</output>
|
||||
</step>
|
||||
|
||||
<step n="7" goal="Technical and resource planning">
|
||||
|
|
@ -155,7 +155,7 @@ Assess technical requirements:
|
|||
- Standard (some integrations, moderate complexity)
|
||||
- Complex (multiple systems, advanced features)
|
||||
|
||||
<template-output>technical_planning</template-output>
|
||||
<output>technical_planning</output>
|
||||
</step>
|
||||
|
||||
<step n="8" goal="Success metrics and validation">
|
||||
|
|
@ -173,7 +173,7 @@ Define what success looks like:
|
|||
- Reliability requirements
|
||||
- User experience goals
|
||||
|
||||
<template-output>success_metrics</template-output>
|
||||
<output>success_metrics</output>
|
||||
</step>
|
||||
|
||||
<step n="9" goal="Development roadmap">
|
||||
|
|
@ -197,7 +197,7 @@ Create a phased approach:
|
|||
- Optimizations
|
||||
- Nice-to-haves
|
||||
|
||||
<template-output>development_roadmap</template-output>
|
||||
<output>development_roadmap</output>
|
||||
</step>
|
||||
|
||||
<step n="10" goal="Creative flourishes and special features" optional="true">
|
||||
|
|
@ -220,7 +220,7 @@ Create a phased approach:
|
|||
- Thematic elements
|
||||
- Consistent universe
|
||||
|
||||
<template-output>creative_features</template-output>
|
||||
<output>creative_features</output>
|
||||
</step>
|
||||
|
||||
<step n="11" goal="Risk assessment and mitigation">
|
||||
|
|
@ -246,7 +246,7 @@ Identify potential challenges:
|
|||
|
||||
For each risk, note mitigation strategy.
|
||||
|
||||
<template-output>risk_assessment</template-output>
|
||||
<output>risk_assessment</output>
|
||||
</step>
|
||||
|
||||
<step n="12" goal="Final review and export readiness">
|
||||
|
|
@ -262,7 +262,7 @@ For each risk, note mitigation strategy.
|
|||
|
||||
<action>Inform {user_name} in {communication_language} that this brief can be fed directly into create-module workflow</action>
|
||||
|
||||
<template-output>final_brief</template-output>
|
||||
<output>final_brief</output>
|
||||
</step>
|
||||
|
||||
</workflow>
|
||||
|
|
|
|||
|
|
@ -168,17 +168,17 @@ If the command targets a story, set `story_key={{next_story_id}}` when prompted.
|
|||
<step n="20" goal="Data mode output">
|
||||
<action>Load and parse {sprint_status_file} same as Step 2</action>
|
||||
<action>Compute recommendation same as Step 3</action>
|
||||
<template-output>next_workflow_id = {{next_workflow_id}}</template-output>
|
||||
<template-output>next_story_id = {{next_story_id}}</template-output>
|
||||
<template-output>count_backlog = {{count_backlog}}</template-output>
|
||||
<template-output>count_ready = {{count_ready}}</template-output>
|
||||
<template-output>count_in_progress = {{count_in_progress}}</template-output>
|
||||
<template-output>count_review = {{count_review}}</template-output>
|
||||
<template-output>count_done = {{count_done}}</template-output>
|
||||
<template-output>epic_backlog = {{epic_backlog}}</template-output>
|
||||
<template-output>epic_in_progress = {{epic_in_progress}}</template-output>
|
||||
<template-output>epic_done = {{epic_done}}</template-output>
|
||||
<template-output>risks = {{risks}}</template-output>
|
||||
<output>next_workflow_id = {{next_workflow_id}}</output>
|
||||
<output>next_story_id = {{next_story_id}}</output>
|
||||
<output>count_backlog = {{count_backlog}}</output>
|
||||
<output>count_ready = {{count_ready}}</output>
|
||||
<output>count_in_progress = {{count_in_progress}}</output>
|
||||
<output>count_review = {{count_review}}</output>
|
||||
<output>count_done = {{count_done}}</output>
|
||||
<output>epic_backlog = {{epic_backlog}}</output>
|
||||
<output>epic_in_progress = {{epic_in_progress}}</output>
|
||||
<output>epic_done = {{epic_done}}</output>
|
||||
<output>risks = {{risks}}</output>
|
||||
<action>Return to caller</action>
|
||||
</step>
|
||||
|
||||
|
|
@ -189,20 +189,20 @@ If the command targets a story, set `story_key={{next_story_id}}` when prompted.
|
|||
<step n="30" goal="Validate sprint-status file">
|
||||
<action>Check that {sprint_status_file} exists</action>
|
||||
<check if="missing">
|
||||
<template-output>is_valid = false</template-output>
|
||||
<template-output>error = "sprint-status.yaml missing"</template-output>
|
||||
<template-output>suggestion = "Run sprint-planning to create it"</template-output>
|
||||
<output>is_valid = false</output>
|
||||
<output>error = "sprint-status.yaml missing"</output>
|
||||
<output>suggestion = "Run sprint-planning to create it"</output>
|
||||
<action>Return</action>
|
||||
</check>
|
||||
<action>Read file and verify it has a development_status section with at least one entry</action>
|
||||
<check if="validation fails">
|
||||
<template-output>is_valid = false</template-output>
|
||||
<template-output>error = "development_status missing or empty"</template-output>
|
||||
<template-output>suggestion = "Re-run sprint-planning or repair the file manually"</template-output>
|
||||
<output>is_valid = false</output>
|
||||
<output>error = "development_status missing or empty"</output>
|
||||
<output>suggestion = "Re-run sprint-planning or repair the file manually"</output>
|
||||
<action>Return</action>
|
||||
</check>
|
||||
<template-output>is_valid = true</template-output>
|
||||
<template-output>message = "sprint-status.yaml present and parsable"</template-output>
|
||||
<output>is_valid = true</output>
|
||||
<output>message = "sprint-status.yaml present and parsable"</output>
|
||||
</step>
|
||||
|
||||
</workflow>
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ This will read EVERY file in this area. Proceed? [y/n]
|
|||
- Constants: `CONSTANT_NAME: Type` - Description - **Imports/Dependencies:** What it uses and why - **Used By:** Files that import this (dependents) - **Key Implementation Details:** Important logic, algorithms, patterns - **State Management:** If applicable (Redux, Context, local state) - **Side Effects:** API calls, database queries, file I/O, external services - **Error Handling:** Try/catch blocks, error boundaries, validation - **Testing:** Associated test files and coverage - **Comments/TODOs:** Any inline documentation or planned work
|
||||
</action>
|
||||
|
||||
<template-output>comprehensive_file_inventory</template-output>
|
||||
<output>comprehensive_file_inventory</output>
|
||||
</step>
|
||||
|
||||
<step n="13c" goal="Analyze relationships and data flow">
|
||||
|
|
@ -160,9 +160,9 @@ This will read EVERY file in this area. Proceed? [y/n]
|
|||
<action>Identify integration points: - External APIs consumed - Internal APIs/services called - Shared state accessed - Events published/subscribed - Database tables accessed
|
||||
</action>
|
||||
|
||||
<template-output>dependency_graph</template-output>
|
||||
<template-output>data_flow_analysis</template-output>
|
||||
<template-output>integration_points</template-output>
|
||||
<output>dependency_graph</output>
|
||||
<output>data_flow_analysis</output>
|
||||
<output>integration_points</output>
|
||||
</step>
|
||||
|
||||
<step n="13d" goal="Find related code and similar patterns">
|
||||
|
|
@ -180,8 +180,8 @@ This will read EVERY file in this area. Proceed? [y/n]
|
|||
<action>Find reference implementations: - Similar features in other parts of codebase - Established patterns to follow - Testing approaches used elsewhere
|
||||
</action>
|
||||
|
||||
<template-output>related_code_references</template-output>
|
||||
<template-output>reuse_opportunities</template-output>
|
||||
<output>related_code_references</output>
|
||||
<output>reuse_opportunities</output>
|
||||
</step>
|
||||
|
||||
<step n="13e" goal="Generate comprehensive deep-dive documentation">
|
||||
|
|
@ -197,7 +197,7 @@ This will read EVERY file in this area. Proceed? [y/n]
|
|||
<action>Write filled template to: {output_folder}/deep-dive-{{sanitized_target_name}}.md</action>
|
||||
<action>Validate deep-dive document completeness</action>
|
||||
|
||||
<template-output>deep_dive_documentation</template-output>
|
||||
<output>deep_dive_documentation</output>
|
||||
|
||||
<action>Update state file: - Add to deep_dive_targets array: {"target_name": "{{target_name}}", "target_path": "{{target_path}}", "files_analyzed": {{file_count}}, "output_file": "deep-dive-{{sanitized_target_name}}.md", "timestamp": "{{now}}"} - Add output to outputs_generated - Update last_updated timestamp
|
||||
</action>
|
||||
|
|
@ -231,7 +231,7 @@ Detailed exhaustive analysis of specific areas:
|
|||
|
||||
<action>Save updated index.md</action>
|
||||
|
||||
<template-output>updated_index</template-output>
|
||||
<output>updated_index</output>
|
||||
</step>
|
||||
|
||||
<step n="13g" goal="Offer to continue or complete">
|
||||
|
|
|
|||
|
|
@ -197,8 +197,8 @@ Is this correct? Should I document each part separately? [y/n]
|
|||
Does this look correct? [y/n/edit]
|
||||
</ask>
|
||||
|
||||
<template-output>project_structure</template-output>
|
||||
<template-output>project_parts_metadata</template-output>
|
||||
<output>project_structure</output>
|
||||
<output>project_parts_metadata</output>
|
||||
|
||||
<action>IMMEDIATELY update state file with step completion:
|
||||
|
||||
|
|
@ -239,8 +239,8 @@ Are there any other important documents or key areas I should focus on while ana
|
|||
|
||||
<action>Store user guidance as {{user_context}}</action>
|
||||
|
||||
<template-output>existing_documentation_inventory</template-output>
|
||||
<template-output>user_provided_context</template-output>
|
||||
<output>existing_documentation_inventory</output>
|
||||
<output>user_provided_context</output>
|
||||
|
||||
<action>Update state file:
|
||||
|
||||
|
|
@ -269,8 +269,8 @@ Are there any other important documents or key areas I should focus on while ana
|
|||
- Store as {{architecture_pattern}} for each part
|
||||
</action>
|
||||
|
||||
<template-output>technology_stack</template-output>
|
||||
<template-output>architecture_patterns</template-output>
|
||||
<output>technology_stack</output>
|
||||
<output>architecture_patterns</output>
|
||||
|
||||
<action>Update state file:
|
||||
|
||||
|
|
@ -329,7 +329,7 @@ findings.batches_completed: [
|
|||
<action>Validate document has all required sections</action>
|
||||
<action>Update state file with output generated</action>
|
||||
<action>PURGE detailed API data, keep only: "{{api_count}} endpoints documented"</action>
|
||||
<template-output>api_contracts\*{part_id}</template-output>
|
||||
<output>api_contracts\*{part_id}</output>
|
||||
</check>
|
||||
|
||||
<check if="requires_data_models == true">
|
||||
|
|
@ -350,14 +350,14 @@ findings.batches_completed: [
|
|||
<action>Validate document completeness</action>
|
||||
<action>Update state file with output generated</action>
|
||||
<action>PURGE detailed schema data, keep only: "{{table_count}} tables documented"</action>
|
||||
<template-output>data_models\*{part_id}</template-output>
|
||||
<output>data_models\*{part_id}</output>
|
||||
</check>
|
||||
|
||||
<check if="requires_state_management == true">
|
||||
<action>Analyze state management patterns</action>
|
||||
<action>Look for: Redux, Context API, MobX, Vuex, Pinia, Provider patterns</action>
|
||||
<action>Identify: stores, reducers, actions, state structure</action>
|
||||
<template-output>state_management_patterns_{part_id}</template-output>
|
||||
<output>state_management_patterns_{part_id}</output>
|
||||
</check>
|
||||
|
||||
<check if="requires_ui_components == true">
|
||||
|
|
@ -365,7 +365,7 @@ findings.batches_completed: [
|
|||
<action>Scan: components/, ui/, widgets/, views/ folders</action>
|
||||
<action>Categorize: Layout, Form, Display, Navigation, etc.</action>
|
||||
<action>Identify: Design system, component patterns, reusable elements</action>
|
||||
<template-output>ui_component_inventory_{part_id}</template-output>
|
||||
<output>ui_component_inventory_{part_id}</output>
|
||||
</check>
|
||||
|
||||
<check if="requires_hardware_docs == true">
|
||||
|
|
@ -379,14 +379,14 @@ findings.batches_completed: [
|
|||
If yes, please provide paths or links. [Provide paths or type 'none']
|
||||
</ask>
|
||||
<action>Store hardware docs references</action>
|
||||
<template-output>hardware*documentation*{part_id}</template-output>
|
||||
<output>hardware*documentation*{part_id}</output>
|
||||
</check>
|
||||
|
||||
<check if="requires_asset_inventory == true">
|
||||
<action>Scan and catalog assets using asset_patterns</action>
|
||||
<action>Categorize by: Images, Audio, 3D Models, Sprites, Textures, etc.</action>
|
||||
<action>Calculate: Total size, file counts, formats used</action>
|
||||
<template-output>asset_inventory_{part_id}</template-output>
|
||||
<output>asset_inventory_{part_id}</output>
|
||||
</check>
|
||||
|
||||
<action>Scan for additional patterns based on doc requirements:
|
||||
|
|
@ -402,7 +402,7 @@ If yes, please provide paths or links. [Provide paths or type 'none']
|
|||
|
||||
<action>Apply scan_level strategy to each pattern scan (quick=glob only, deep/exhaustive=read files)</action>
|
||||
|
||||
<template-output>comprehensive*analysis*{part_id}</template-output>
|
||||
<output>comprehensive*analysis*{part_id}</output>
|
||||
|
||||
<action>Update state file:
|
||||
|
||||
|
|
@ -451,8 +451,8 @@ project-root/
|
|||
|
||||
</action>
|
||||
|
||||
<template-output>source_tree_analysis</template-output>
|
||||
<template-output>critical_folders_summary</template-output>
|
||||
<output>source_tree_analysis</output>
|
||||
<output>critical_folders_summary</output>
|
||||
|
||||
<action>IMMEDIATELY write source-tree-analysis.md to disk</action>
|
||||
<action>Validate document structure</action>
|
||||
|
|
@ -493,9 +493,9 @@ project-root/
|
|||
</action>
|
||||
</action>
|
||||
|
||||
<template-output>development_instructions</template-output>
|
||||
<template-output>deployment_configuration</template-output>
|
||||
<template-output>contribution_guidelines</template-output>
|
||||
<output>development_instructions</output>
|
||||
<output>deployment_configuration</output>
|
||||
<output>contribution_guidelines</output>
|
||||
|
||||
<action>Update state file:
|
||||
|
||||
|
|
@ -524,7 +524,7 @@ project-root/
|
|||
<action>IMMEDIATELY write integration-architecture.md to disk</action>
|
||||
<action>Validate document completeness</action>
|
||||
|
||||
<template-output>integration_architecture</template-output>
|
||||
<output>integration_architecture</output>
|
||||
|
||||
<action>Update state file:
|
||||
|
||||
|
|
@ -566,7 +566,7 @@ project-root/
|
|||
- PURGE detailed architecture from context, keep only: "Architecture for {{part_id}} written"
|
||||
</action>
|
||||
|
||||
<template-output>architecture_document</template-output>
|
||||
<output>architecture_document</output>
|
||||
|
||||
<action>Update state file:
|
||||
|
||||
|
|
@ -680,7 +680,7 @@ project-root/
|
|||
<action>IMMEDIATELY write to disk</action>
|
||||
</action>
|
||||
|
||||
<template-output>supporting_documentation</template-output>
|
||||
<output>supporting_documentation</output>
|
||||
|
||||
<action>Update state file:
|
||||
|
||||
|
|
@ -791,7 +791,7 @@ When a document SHOULD be generated but wasn't (due to quick scan, missing data,
|
|||
<action>IMMEDIATELY write index.md to disk with appropriate _(To be generated)_ markers for missing files</action>
|
||||
<action>Validate index has all required sections and links are valid</action>
|
||||
|
||||
<template-output>index</template-output>
|
||||
<output>index</output>
|
||||
|
||||
<action>Update state file:
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<ask>What's your project called? {{#if project_name}}(Config shows: {{project_name}}){{/if}}</ask>
|
||||
<action>Store project_name</action>
|
||||
<template-output>project_name</template-output>
|
||||
<output>project_name</output>
|
||||
</step>
|
||||
|
||||
<step n="2" goal="Choose setup path">
|
||||
|
|
@ -119,8 +119,8 @@ Choice [1/2]:</ask>
|
|||
<output>🚀 **For Quick Flow (minimal planning, straight to code):**
|
||||
Load the **quick-flow-solo-dev** agent instead - use Quick Flow agent for faster development</output>
|
||||
|
||||
<template-output>field_type</template-output>
|
||||
<template-output>selected_track</template-output>
|
||||
<output>field_type</output>
|
||||
<output>selected_track</output>
|
||||
<action>Jump to step 6 (discovery options)</action>
|
||||
</step>
|
||||
|
||||
|
|
@ -161,8 +161,8 @@ Continue with software workflows? (y/n)</output>
|
|||
<action if="n">Exit workflow</action>
|
||||
</check>
|
||||
|
||||
<template-output>user_description</template-output>
|
||||
<template-output>field_type</template-output>
|
||||
<output>user_description</output>
|
||||
<output>field_type</output>
|
||||
<action>Continue to step 5</action>
|
||||
</step>
|
||||
|
||||
|
|
@ -227,7 +227,7 @@ Happy coding! 🚀</output>
|
|||
</check>
|
||||
|
||||
<action>Map choice to selected_track</action>
|
||||
<template-output>selected_track</template-output>
|
||||
<output>selected_track</output>
|
||||
</step>
|
||||
|
||||
<step n="6" goal="Discovery workflows selection (unified)">
|
||||
|
|
@ -264,9 +264,9 @@ Enter numbers (e.g., "1,2" or "none"): </ask>
|
|||
- product_brief_requested (if applicable)
|
||||
</action>
|
||||
|
||||
<template-output>brainstorm_requested</template-output>
|
||||
<template-output>research_requested</template-output>
|
||||
<template-output>product_brief_requested</template-output>
|
||||
<output>brainstorm_requested</output>
|
||||
<output>research_requested</output>
|
||||
<output>product_brief_requested</output>
|
||||
|
||||
<check if="brownfield">
|
||||
<output>💡 **Note:** For brownfield projects, run document-project workflow first to analyze your codebase.</output>
|
||||
|
|
@ -292,7 +292,7 @@ Enter numbers (e.g., "1,2" or "none"): </ask>
|
|||
Choice:</ask>
|
||||
|
||||
<action>Set selected_track</action>
|
||||
<template-output>selected_track</template-output>
|
||||
<output>selected_track</output>
|
||||
</step>
|
||||
|
||||
<step n="8" goal="Generate workflow path">
|
||||
|
|
@ -301,9 +301,9 @@ Choice:</ask>
|
|||
<action>Scan for existing completed work and update statuses</action>
|
||||
<action>Set generated date</action>
|
||||
|
||||
<template-output>generated</template-output>
|
||||
<template-output>workflow_path_file</template-output>
|
||||
<template-output>workflow_items</template-output>
|
||||
<output>generated</output>
|
||||
<output>workflow_path_file</output>
|
||||
<output>workflow_items</output>
|
||||
</step>
|
||||
|
||||
<step n="9" goal="Create tracking file">
|
||||
|
|
|
|||
|
|
@ -200,10 +200,10 @@ Your choice:</ask>
|
|||
<action>Read {output_folder}/bmm-workflow-status.yaml if exists</action>
|
||||
|
||||
<check if="status file not found">
|
||||
<template-output>status_exists = false</template-output>
|
||||
<template-output>should_proceed = true</template-output>
|
||||
<template-output>warning = "No status file found. Running without progress tracking."</template-output>
|
||||
<template-output>suggestion = "Consider running workflow-init first for progress tracking"</template-output>
|
||||
<output>status_exists = false</output>
|
||||
<output>should_proceed = true</output>
|
||||
<output>warning = "No status file found. Running without progress tracking."</output>
|
||||
<output>suggestion = "Consider running workflow-init first for progress tracking"</output>
|
||||
<action>Return to calling workflow</action>
|
||||
</check>
|
||||
|
||||
|
|
@ -213,48 +213,48 @@ Your choice:</ask>
|
|||
<action>Find first non-completed workflow in workflow_status (next workflow)</action>
|
||||
<action>Check if {{calling_workflow}} matches next workflow or is in the workflow list</action>
|
||||
|
||||
<template-output>status_exists = true</template-output>
|
||||
<template-output>project_level = {{project_level}}</template-output>
|
||||
<template-output>project_type = {{project_type}}</template-output>
|
||||
<template-output>field_type = {{field_type}}</template-output>
|
||||
<template-output>next_workflow = {{next_workflow_id}}</template-output>
|
||||
<output>status_exists = true</output>
|
||||
<output>project_level = {{project_level}}</output>
|
||||
<output>project_type = {{project_type}}</output>
|
||||
<output>field_type = {{field_type}}</output>
|
||||
<output>next_workflow = {{next_workflow_id}}</output>
|
||||
|
||||
<check if="calling_workflow == next_workflow">
|
||||
<template-output>should_proceed = true</template-output>
|
||||
<template-output>warning = ""</template-output>
|
||||
<template-output>suggestion = "Proceeding with planned next step"</template-output>
|
||||
<output>should_proceed = true</output>
|
||||
<output>warning = ""</output>
|
||||
<output>suggestion = "Proceeding with planned next step"</output>
|
||||
</check>
|
||||
|
||||
<check if="calling_workflow in workflow_status list">
|
||||
<action>Check the status of calling_workflow in YAML</action>
|
||||
|
||||
<check if="status is file path">
|
||||
<template-output>should_proceed = true</template-output>
|
||||
<template-output>warning = "⚠️ Workflow already completed: {{calling_workflow}}"</template-output>
|
||||
<template-output>suggestion = "This workflow was already completed. Re-running will overwrite: {{status}}"</template-output>
|
||||
<output>should_proceed = true</output>
|
||||
<output>warning = "⚠️ Workflow already completed: {{calling_workflow}}"</output>
|
||||
<output>suggestion = "This workflow was already completed. Re-running will overwrite: {{status}}"</output>
|
||||
</check>
|
||||
|
||||
<check if="status is optional/recommended">
|
||||
<template-output>should_proceed = true</template-output>
|
||||
<template-output>warning = "Running optional workflow {{calling_workflow}}"</template-output>
|
||||
<template-output>suggestion = "This is optional. Expected next: {{next_workflow}}"</template-output>
|
||||
<output>should_proceed = true</output>
|
||||
<output>warning = "Running optional workflow {{calling_workflow}}"</output>
|
||||
<output>suggestion = "This is optional. Expected next: {{next_workflow}}"</output>
|
||||
</check>
|
||||
|
||||
<check if="status is required but not next">
|
||||
<template-output>should_proceed = true</template-output>
|
||||
<template-output>warning = "⚠️ Out of sequence: Expected {{next_workflow}}, running {{calling_workflow}}"</template-output>
|
||||
<template-output>suggestion = "Consider running {{next_workflow}} instead, or continue if intentional"</template-output>
|
||||
<output>should_proceed = true</output>
|
||||
<output>warning = "⚠️ Out of sequence: Expected {{next_workflow}}, running {{calling_workflow}}"</output>
|
||||
<output>suggestion = "Consider running {{next_workflow}} instead, or continue if intentional"</output>
|
||||
</check>
|
||||
|
||||
</check>
|
||||
|
||||
<check if="calling_workflow NOT in workflow_status list">
|
||||
<template-output>should_proceed = true</template-output>
|
||||
<template-output>warning = "⚠️ Unknown workflow: {{calling_workflow}} not in workflow path"</template-output>
|
||||
<template-output>suggestion = "This workflow is not part of the defined path for this project"</template-output>
|
||||
<output>should_proceed = true</output>
|
||||
<output>warning = "⚠️ Unknown workflow: {{calling_workflow}} not in workflow path"</output>
|
||||
<output>suggestion = "This workflow is not part of the defined path for this project"</output>
|
||||
</check>
|
||||
|
||||
<template-output>status_file_path = {{path to bmm-workflow-status.yaml}}</template-output>
|
||||
<output>status_file_path = {{path to bmm-workflow-status.yaml}}</output>
|
||||
</check>
|
||||
|
||||
<action>Return control to calling workflow with all template outputs</action>
|
||||
|
|
@ -264,45 +264,45 @@ Your choice:</ask>
|
|||
<action>Read {output_folder}/bmm-workflow-status.yaml if exists</action>
|
||||
|
||||
<check if="status file not found">
|
||||
<template-output>status_exists = false</template-output>
|
||||
<template-output>error = "No status file to extract data from"</template-output>
|
||||
<output>status_exists = false</output>
|
||||
<output>error = "No status file to extract data from"</output>
|
||||
<action>Return to calling workflow</action>
|
||||
</check>
|
||||
|
||||
<check if="status file found">
|
||||
<action>Parse YAML file completely</action>
|
||||
<template-output>status_exists = true</template-output>
|
||||
<output>status_exists = true</output>
|
||||
|
||||
<check if="data_request == project_config">
|
||||
<template-output>project_name = {{project}}</template-output>
|
||||
<template-output>project_type = {{project_type}}</template-output>
|
||||
<template-output>project_level = {{project_level}}</template-output>
|
||||
<template-output>field_type = {{field_type}}</template-output>
|
||||
<template-output>workflow_path = {{workflow_path}}</template-output>
|
||||
<output>project_name = {{project}}</output>
|
||||
<output>project_type = {{project_type}}</output>
|
||||
<output>project_level = {{project_level}}</output>
|
||||
<output>field_type = {{field_type}}</output>
|
||||
<output>workflow_path = {{workflow_path}}</output>
|
||||
</check>
|
||||
|
||||
<check if="data_request == workflow_status">
|
||||
<action>Parse workflow_status section and return all workflow: status pairs</action>
|
||||
<template-output>workflow_status = {{workflow_status_object}}</template-output>
|
||||
<output>workflow_status = {{workflow_status_object}}</output>
|
||||
<action>Calculate completion stats:</action>
|
||||
<template-output>total_workflows = {{count all workflows}}</template-output>
|
||||
<template-output>completed_workflows = {{count file path statuses}}</template-output>
|
||||
<template-output>pending_workflows = {{count required/optional/etc}}</template-output>
|
||||
<template-output>skipped_workflows = {{count skipped}}</template-output>
|
||||
<output>total_workflows = {{count all workflows}}</output>
|
||||
<output>completed_workflows = {{count file path statuses}}</output>
|
||||
<output>pending_workflows = {{count required/optional/etc}}</output>
|
||||
<output>skipped_workflows = {{count skipped}}</output>
|
||||
</check>
|
||||
|
||||
<check if="data_request == all">
|
||||
<action>Return all parsed fields as template outputs</action>
|
||||
<template-output>project = {{project}}</template-output>
|
||||
<template-output>project_type = {{project_type}}</template-output>
|
||||
<template-output>project_level = {{project_level}}</template-output>
|
||||
<template-output>field_type = {{field_type}}</template-output>
|
||||
<template-output>workflow_path = {{workflow_path}}</template-output>
|
||||
<template-output>workflow_status = {{workflow_status_object}}</template-output>
|
||||
<template-output>generated = {{generated}}</template-output>
|
||||
<output>project = {{project}}</output>
|
||||
<output>project_type = {{project_type}}</output>
|
||||
<output>project_level = {{project_level}}</output>
|
||||
<output>field_type = {{field_type}}</output>
|
||||
<output>workflow_path = {{workflow_path}}</output>
|
||||
<output>workflow_status = {{workflow_status_object}}</output>
|
||||
<output>generated = {{generated}}</output>
|
||||
</check>
|
||||
|
||||
<template-output>status_file_path = {{path to bmm-workflow-status.yaml}}</template-output>
|
||||
<output>status_file_path = {{path to bmm-workflow-status.yaml}}</output>
|
||||
</check>
|
||||
|
||||
<action>Return control to calling workflow with requested data</action>
|
||||
|
|
@ -312,13 +312,13 @@ Your choice:</ask>
|
|||
<action>Check if {output_folder}/bmm-workflow-status.yaml exists</action>
|
||||
|
||||
<check if="exists">
|
||||
<template-output>status_exists = true</template-output>
|
||||
<template-output>suggestion = "Status file found. Ready to proceed."</template-output>
|
||||
<output>status_exists = true</output>
|
||||
<output>suggestion = "Status file found. Ready to proceed."</output>
|
||||
</check>
|
||||
|
||||
<check if="not exists">
|
||||
<template-output>status_exists = false</template-output>
|
||||
<template-output>suggestion = "No status file. Run workflow-init to create one (optional for progress tracking)"</template-output>
|
||||
<output>status_exists = false</output>
|
||||
<output>suggestion = "No status file. Run workflow-init to create one (optional for progress tracking)"</output>
|
||||
</check>
|
||||
|
||||
<action>Return immediately to calling workflow</action>
|
||||
|
|
@ -328,8 +328,8 @@ Your choice:</ask>
|
|||
<action>Read {output_folder}/bmm-workflow-status.yaml</action>
|
||||
|
||||
<check if="status file not found">
|
||||
<template-output>success = false</template-output>
|
||||
<template-output>error = "No status file found. Cannot update."</template-output>
|
||||
<output>success = false</output>
|
||||
<output>error = "No status file found. Cannot update."</output>
|
||||
<action>Return to calling workflow</action>
|
||||
</check>
|
||||
|
||||
|
|
@ -355,11 +355,11 @@ Your choice:</ask>
|
|||
|
||||
<action>Save updated YAML file preserving ALL structure and comments</action>
|
||||
|
||||
<template-output>success = true</template-output>
|
||||
<template-output>next_workflow = {{determined next workflow}}</template-output>
|
||||
<template-output>next_agent = {{determined next agent from path file}}</template-output>
|
||||
<template-output>completed_workflow = {{workflow_id}}</template-output>
|
||||
<template-output>output_file = {{output_file}}</template-output>
|
||||
<output>success = true</output>
|
||||
<output>next_workflow = {{determined next workflow}}</output>
|
||||
<output>next_agent = {{determined next agent from path file}}</output>
|
||||
<output>completed_workflow = {{workflow_id}}</output>
|
||||
<output>output_file = {{output_file}}</output>
|
||||
|
||||
</check>
|
||||
|
||||
|
|
@ -374,8 +374,8 @@ Your choice:</ask>
|
|||
|
||||
<action>Save updated YAML file</action>
|
||||
|
||||
<template-output>success = true</template-output>
|
||||
<template-output>skipped_workflow = {{workflow_id}}</template-output>
|
||||
<output>success = true</output>
|
||||
<output>skipped_workflow = {{workflow_id}}</output>
|
||||
|
||||
</check>
|
||||
|
||||
|
|
@ -383,8 +383,8 @@ Your choice:</ask>
|
|||
<!-- Unknown action -->
|
||||
<!-- ============================================= -->
|
||||
<check if="action not recognized">
|
||||
<template-output>success = false</template-output>
|
||||
<template-output>error = "Unknown action: {{action}}. Valid actions: complete_workflow, skip_workflow"</template-output>
|
||||
<output>success = false</output>
|
||||
<output>error = "Unknown action: {{action}}. Valid actions: complete_workflow, skip_workflow"</output>
|
||||
</check>
|
||||
|
||||
</check>
|
||||
|
|
|
|||
Loading…
Reference in New Issue