refactor: delete dead YAML/XML workflow engine files
Remove 5 files made obsolete by the workflow.yaml → workflow.md migration: - workflow.xml (the YAML workflow interpreter engine) - dev-story/instructions.xml (superseded by workflow.md) - 3 installer templates for YAML workflow command generation References in CLI code will be cleaned up in follow-up commits. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
775297e1e0
commit
b23c4f0e0c
|
|
@ -1,412 +0,0 @@
|
||||||
<workflow>
|
|
||||||
<critical>The workflow execution engine is governed by: {project-root}/_bmad/core/tasks/workflow.xml</critical>
|
|
||||||
<critical>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
|
|
||||||
<critical>Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}</critical>
|
|
||||||
<critical>Generate all documents in {document_output_language}</critical>
|
|
||||||
<critical>Only modify the story file in these areas: Tasks/Subtasks checkboxes, Dev Agent Record (Debug Log, Completion Notes), File List,
|
|
||||||
Change Log, and Status</critical>
|
|
||||||
<critical>Execute ALL steps in exact order; do NOT skip steps</critical>
|
|
||||||
<critical>Absolutely DO NOT stop because of "milestones", "significant progress", or "session boundaries". Continue in a single execution
|
|
||||||
until the story is COMPLETE (all ACs satisfied and all tasks/subtasks checked) UNLESS a HALT condition is triggered or the USER gives
|
|
||||||
other instruction.</critical>
|
|
||||||
<critical>Do NOT schedule a "next session" or request review pauses unless a HALT condition applies. Only Step 6 decides completion.</critical>
|
|
||||||
<critical>User skill level ({user_skill_level}) affects conversation style ONLY, not code updates.</critical>
|
|
||||||
|
|
||||||
<step n="1" goal="Find next ready story and load it" tag="sprint-status">
|
|
||||||
<check if="{{story_path}} is provided">
|
|
||||||
<action>Use {{story_path}} directly</action>
|
|
||||||
<action>Read COMPLETE story file</action>
|
|
||||||
<action>Extract story_key from filename or metadata</action>
|
|
||||||
<goto anchor="task_check" />
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<!-- Sprint-based story discovery -->
|
|
||||||
<check if="{{sprint_status}} file exists">
|
|
||||||
<critical>MUST read COMPLETE sprint-status.yaml file from start to end to preserve order</critical>
|
|
||||||
<action>Load the FULL file: {{sprint_status}}</action>
|
|
||||||
<action>Read ALL lines from beginning to end - do not skip any content</action>
|
|
||||||
<action>Parse the development_status section completely to understand story order</action>
|
|
||||||
|
|
||||||
<action>Find the FIRST story (by reading in order from top to bottom) where:
|
|
||||||
- Key matches pattern: number-number-name (e.g., "1-2-user-auth")
|
|
||||||
- NOT an epic key (epic-X) or retrospective (epic-X-retrospective)
|
|
||||||
- Status value equals "ready-for-dev"
|
|
||||||
</action>
|
|
||||||
|
|
||||||
<check if="no ready-for-dev or in-progress story found">
|
|
||||||
<output>📋 No ready-for-dev stories found in sprint-status.yaml
|
|
||||||
|
|
||||||
**Current Sprint Status:** {{sprint_status_summary}}
|
|
||||||
|
|
||||||
**What would you like to do?**
|
|
||||||
1. Run `create-story` to create next story from epics with comprehensive context
|
|
||||||
2. Run `*validate-create-story` to improve existing stories before development (recommended quality check)
|
|
||||||
3. Specify a particular story file to develop (provide full path)
|
|
||||||
4. Check {{sprint_status}} file to see current sprint status
|
|
||||||
|
|
||||||
💡 **Tip:** Stories in `ready-for-dev` may not have been validated. Consider running `validate-create-story` first for a quality
|
|
||||||
check.
|
|
||||||
</output>
|
|
||||||
<ask>Choose option [1], [2], [3], or [4], or specify story file path:</ask>
|
|
||||||
|
|
||||||
<check if="user chooses '1'">
|
|
||||||
<action>HALT - Run create-story to create next story</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="user chooses '2'">
|
|
||||||
<action>HALT - Run validate-create-story to improve existing stories</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="user chooses '3'">
|
|
||||||
<ask>Provide the story file path to develop:</ask>
|
|
||||||
<action>Store user-provided story path as {{story_path}}</action>
|
|
||||||
<goto anchor="task_check" />
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="user chooses '4'">
|
|
||||||
<output>Loading {{sprint_status}} for detailed status review...</output>
|
|
||||||
<action>Display detailed sprint status analysis</action>
|
|
||||||
<action>HALT - User can review sprint status and provide story path</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="user provides story file path">
|
|
||||||
<action>Store user-provided story path as {{story_path}}</action>
|
|
||||||
<goto anchor="task_check" />
|
|
||||||
</check>
|
|
||||||
</check>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<!-- Non-sprint story discovery -->
|
|
||||||
<check if="{{sprint_status}} file does NOT exist">
|
|
||||||
<action>Search {implementation_artifacts} for stories directly</action>
|
|
||||||
<action>Find stories with "ready-for-dev" status in files</action>
|
|
||||||
<action>Look for story files matching pattern: *-*-*.md</action>
|
|
||||||
<action>Read each candidate story file to check Status section</action>
|
|
||||||
|
|
||||||
<check if="no ready-for-dev stories found in story files">
|
|
||||||
<output>📋 No ready-for-dev stories found
|
|
||||||
|
|
||||||
**Available Options:**
|
|
||||||
1. Run `create-story` to create next story from epics with comprehensive context
|
|
||||||
2. Run `*validate-create-story` to improve existing stories
|
|
||||||
3. Specify which story to develop
|
|
||||||
</output>
|
|
||||||
<ask>What would you like to do? Choose option [1], [2], or [3]:</ask>
|
|
||||||
|
|
||||||
<check if="user chooses '1'">
|
|
||||||
<action>HALT - Run create-story to create next story</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="user chooses '2'">
|
|
||||||
<action>HALT - Run validate-create-story to improve existing stories</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="user chooses '3'">
|
|
||||||
<ask>It's unclear what story you want developed. Please provide the full path to the story file:</ask>
|
|
||||||
<action>Store user-provided story path as {{story_path}}</action>
|
|
||||||
<action>Continue with provided story file</action>
|
|
||||||
</check>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="ready-for-dev story found in files">
|
|
||||||
<action>Use discovered story file and extract story_key</action>
|
|
||||||
</check>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<action>Store the found story_key (e.g., "1-2-user-authentication") for later status updates</action>
|
|
||||||
<action>Find matching story file in {implementation_artifacts} using story_key pattern: {{story_key}}.md</action>
|
|
||||||
<action>Read COMPLETE story file from discovered path</action>
|
|
||||||
|
|
||||||
<anchor id="task_check" />
|
|
||||||
|
|
||||||
<action>Parse sections: Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status</action>
|
|
||||||
|
|
||||||
<action>Load comprehensive context from story file's Dev Notes section</action>
|
|
||||||
<action>Extract developer guidance from Dev Notes: architecture requirements, previous learnings, technical specifications</action>
|
|
||||||
<action>Use enhanced story context to inform implementation decisions and approaches</action>
|
|
||||||
|
|
||||||
<action>Identify first incomplete task (unchecked [ ]) in Tasks/Subtasks</action>
|
|
||||||
|
|
||||||
<action if="no incomplete tasks">
|
|
||||||
<goto step="6">Completion sequence</goto>
|
|
||||||
</action>
|
|
||||||
<action if="story file inaccessible">HALT: "Cannot develop story without access to story file"</action>
|
|
||||||
<action if="incomplete task or subtask requirements ambiguous">ASK user to clarify or HALT</action>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="2" goal="Load project context and story information">
|
|
||||||
<critical>Load all available context to inform implementation</critical>
|
|
||||||
|
|
||||||
<action>Load {project_context} for coding standards and project-wide patterns (if exists)</action>
|
|
||||||
<action>Parse sections: Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status</action>
|
|
||||||
<action>Load comprehensive context from story file's Dev Notes section</action>
|
|
||||||
<action>Extract developer guidance from Dev Notes: architecture requirements, previous learnings, technical specifications</action>
|
|
||||||
<action>Use enhanced story context to inform implementation decisions and approaches</action>
|
|
||||||
<output>✅ **Context Loaded**
|
|
||||||
Story and project context available for implementation
|
|
||||||
</output>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="3" goal="Detect review continuation and extract review context">
|
|
||||||
<critical>Determine if this is a fresh start or continuation after code review</critical>
|
|
||||||
|
|
||||||
<action>Check if "Senior Developer Review (AI)" section exists in the story file</action>
|
|
||||||
<action>Check if "Review Follow-ups (AI)" subsection exists under Tasks/Subtasks</action>
|
|
||||||
|
|
||||||
<check if="Senior Developer Review section exists">
|
|
||||||
<action>Set review_continuation = true</action>
|
|
||||||
<action>Extract from "Senior Developer Review (AI)" section:
|
|
||||||
- Review outcome (Approve/Changes Requested/Blocked)
|
|
||||||
- Review date
|
|
||||||
- Total action items with checkboxes (count checked vs unchecked)
|
|
||||||
- Severity breakdown (High/Med/Low counts)
|
|
||||||
</action>
|
|
||||||
<action>Count unchecked [ ] review follow-up tasks in "Review Follow-ups (AI)" subsection</action>
|
|
||||||
<action>Store list of unchecked review items as {{pending_review_items}}</action>
|
|
||||||
|
|
||||||
<output>⏯️ **Resuming Story After Code Review** ({{review_date}})
|
|
||||||
|
|
||||||
**Review Outcome:** {{review_outcome}}
|
|
||||||
**Action Items:** {{unchecked_review_count}} remaining to address
|
|
||||||
**Priorities:** {{high_count}} High, {{med_count}} Medium, {{low_count}} Low
|
|
||||||
|
|
||||||
**Strategy:** Will prioritize review follow-up tasks (marked [AI-Review]) before continuing with regular tasks.
|
|
||||||
</output>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="Senior Developer Review section does NOT exist">
|
|
||||||
<action>Set review_continuation = false</action>
|
|
||||||
<action>Set {{pending_review_items}} = empty</action>
|
|
||||||
|
|
||||||
<output>🚀 **Starting Fresh Implementation**
|
|
||||||
|
|
||||||
Story: {{story_key}}
|
|
||||||
Story Status: {{current_status}}
|
|
||||||
First incomplete task: {{first_task_description}}
|
|
||||||
</output>
|
|
||||||
</check>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="4" goal="Mark story in-progress" tag="sprint-status">
|
|
||||||
<check if="{{sprint_status}} file exists">
|
|
||||||
<action>Load the FULL file: {{sprint_status}}</action>
|
|
||||||
<action>Read all development_status entries to find {{story_key}}</action>
|
|
||||||
<action>Get current status value for development_status[{{story_key}}]</action>
|
|
||||||
|
|
||||||
<check if="current status == 'ready-for-dev' OR review_continuation == true">
|
|
||||||
<action>Update the story in the sprint status report to = "in-progress"</action>
|
|
||||||
<action>Update last_updated field to current date</action>
|
|
||||||
<output>🚀 Starting work on story {{story_key}}
|
|
||||||
Status updated: ready-for-dev → in-progress
|
|
||||||
</output>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="current status == 'in-progress'">
|
|
||||||
<output>⏯️ Resuming work on story {{story_key}}
|
|
||||||
Story is already marked in-progress
|
|
||||||
</output>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="current status is neither ready-for-dev nor in-progress">
|
|
||||||
<output>⚠️ Unexpected story status: {{current_status}}
|
|
||||||
Expected ready-for-dev or in-progress. Continuing anyway...
|
|
||||||
</output>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<action>Store {{current_sprint_status}} for later use</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="{{sprint_status}} file does NOT exist">
|
|
||||||
<output>ℹ️ No sprint status file exists - story progress will be tracked in story file only</output>
|
|
||||||
<action>Set {{current_sprint_status}} = "no-sprint-tracking"</action>
|
|
||||||
</check>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="5" goal="Implement task following red-green-refactor cycle">
|
|
||||||
<critical>FOLLOW THE STORY FILE TASKS/SUBTASKS SEQUENCE EXACTLY AS WRITTEN - NO DEVIATION</critical>
|
|
||||||
|
|
||||||
<action>Review the current task/subtask from the story file - this is your authoritative implementation guide</action>
|
|
||||||
<action>Plan implementation following red-green-refactor cycle</action>
|
|
||||||
|
|
||||||
<!-- RED PHASE -->
|
|
||||||
<action>Write FAILING tests first for the task/subtask functionality</action>
|
|
||||||
<action>Confirm tests fail before implementation - this validates test correctness</action>
|
|
||||||
|
|
||||||
<!-- GREEN PHASE -->
|
|
||||||
<action>Implement MINIMAL code to make tests pass</action>
|
|
||||||
<action>Run tests to confirm they now pass</action>
|
|
||||||
<action>Handle error conditions and edge cases as specified in task/subtask</action>
|
|
||||||
|
|
||||||
<!-- REFACTOR PHASE -->
|
|
||||||
<action>Improve code structure while keeping tests green</action>
|
|
||||||
<action>Ensure code follows architecture patterns and coding standards from Dev Notes</action>
|
|
||||||
|
|
||||||
<action>Document technical approach and decisions in Dev Agent Record → Implementation Plan</action>
|
|
||||||
|
|
||||||
<action if="new dependencies required beyond story specifications">HALT: "Additional dependencies need user approval"</action>
|
|
||||||
<action if="3 consecutive implementation failures occur">HALT and request guidance</action>
|
|
||||||
<action if="required configuration is missing">HALT: "Cannot proceed without necessary configuration files"</action>
|
|
||||||
|
|
||||||
<critical>NEVER implement anything not mapped to a specific task/subtask in the story file</critical>
|
|
||||||
<critical>NEVER proceed to next task until current task/subtask is complete AND tests pass</critical>
|
|
||||||
<critical>Execute continuously without pausing until all tasks/subtasks are complete or explicit HALT condition</critical>
|
|
||||||
<critical>Do NOT propose to pause for review until Step 9 completion gates are satisfied</critical>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="6" goal="Author comprehensive tests">
|
|
||||||
<action>Create unit tests for business logic and core functionality introduced/changed by the task</action>
|
|
||||||
<action>Add integration tests for component interactions specified in story requirements</action>
|
|
||||||
<action>Include end-to-end tests for critical user flows when story requirements demand them</action>
|
|
||||||
<action>Cover edge cases and error handling scenarios identified in story Dev Notes</action>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="7" goal="Run validations and tests">
|
|
||||||
<action>Determine how to run tests for this repo (infer test framework from project structure)</action>
|
|
||||||
<action>Run all existing tests to ensure no regressions</action>
|
|
||||||
<action>Run the new tests to verify implementation correctness</action>
|
|
||||||
<action>Run linting and code quality checks if configured in project</action>
|
|
||||||
<action>Validate implementation meets ALL story acceptance criteria; enforce quantitative thresholds explicitly</action>
|
|
||||||
<action if="regression tests fail">STOP and fix before continuing - identify breaking changes immediately</action>
|
|
||||||
<action if="new tests fail">STOP and fix before continuing - ensure implementation correctness</action>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="8" goal="Validate and mark task complete ONLY when fully done">
|
|
||||||
<critical>NEVER mark a task complete unless ALL conditions are met - NO LYING OR CHEATING</critical>
|
|
||||||
|
|
||||||
<!-- VALIDATION GATES -->
|
|
||||||
<action>Verify ALL tests for this task/subtask ACTUALLY EXIST and PASS 100%</action>
|
|
||||||
<action>Confirm implementation matches EXACTLY what the task/subtask specifies - no extra features</action>
|
|
||||||
<action>Validate that ALL acceptance criteria related to this task are satisfied</action>
|
|
||||||
<action>Run full test suite to ensure NO regressions introduced</action>
|
|
||||||
|
|
||||||
<!-- REVIEW FOLLOW-UP HANDLING -->
|
|
||||||
<check if="task is review follow-up (has [AI-Review] prefix)">
|
|
||||||
<action>Extract review item details (severity, description, related AC/file)</action>
|
|
||||||
<action>Add to resolution tracking list: {{resolved_review_items}}</action>
|
|
||||||
|
|
||||||
<!-- Mark task in Review Follow-ups section -->
|
|
||||||
<action>Mark task checkbox [x] in "Tasks/Subtasks → Review Follow-ups (AI)" section</action>
|
|
||||||
|
|
||||||
<!-- CRITICAL: Also mark corresponding action item in review section -->
|
|
||||||
<action>Find matching action item in "Senior Developer Review (AI) → Action Items" section by matching description</action>
|
|
||||||
<action>Mark that action item checkbox [x] as resolved</action>
|
|
||||||
|
|
||||||
<action>Add to Dev Agent Record → Completion Notes: "✅ Resolved review finding [{{severity}}]: {{description}}"</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<!-- ONLY MARK COMPLETE IF ALL VALIDATION PASS -->
|
|
||||||
<check if="ALL validation gates pass AND tests ACTUALLY exist and pass">
|
|
||||||
<action>ONLY THEN mark the task (and subtasks) checkbox with [x]</action>
|
|
||||||
<action>Update File List section with ALL new, modified, or deleted files (paths relative to repo root)</action>
|
|
||||||
<action>Add completion notes to Dev Agent Record summarizing what was ACTUALLY implemented and tested</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="ANY validation fails">
|
|
||||||
<action>DO NOT mark task complete - fix issues first</action>
|
|
||||||
<action>HALT if unable to fix validation failures</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="review_continuation == true and {{resolved_review_items}} is not empty">
|
|
||||||
<action>Count total resolved review items in this session</action>
|
|
||||||
<action>Add Change Log entry: "Addressed code review findings - {{resolved_count}} items resolved (Date: {{date}})"</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<action>Save the story file</action>
|
|
||||||
<action>Determine if more incomplete tasks remain</action>
|
|
||||||
<action if="more tasks remain">
|
|
||||||
<goto step="5">Next task</goto>
|
|
||||||
</action>
|
|
||||||
<action if="no tasks remain">
|
|
||||||
<goto step="9">Completion</goto>
|
|
||||||
</action>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="9" goal="Story completion and mark for review" tag="sprint-status">
|
|
||||||
<action>Verify ALL tasks and subtasks are marked [x] (re-scan the story document now)</action>
|
|
||||||
<action>Run the full regression suite (do not skip)</action>
|
|
||||||
<action>Confirm File List includes every changed file</action>
|
|
||||||
<action>Execute enhanced definition-of-done validation</action>
|
|
||||||
<action>Update the story Status to: "review"</action>
|
|
||||||
|
|
||||||
<!-- Enhanced Definition of Done Validation -->
|
|
||||||
<action>Validate definition-of-done checklist with essential requirements:
|
|
||||||
- All tasks/subtasks marked complete with [x]
|
|
||||||
- Implementation satisfies every Acceptance Criterion
|
|
||||||
- Unit tests for core functionality added/updated
|
|
||||||
- Integration tests for component interactions added when required
|
|
||||||
- End-to-end tests for critical flows added when story demands them
|
|
||||||
- All tests pass (no regressions, new tests successful)
|
|
||||||
- Code quality checks pass (linting, static analysis if configured)
|
|
||||||
- File List includes every new/modified/deleted file (relative paths)
|
|
||||||
- Dev Agent Record contains implementation notes
|
|
||||||
- Change Log includes summary of changes
|
|
||||||
- Only permitted story sections were modified
|
|
||||||
</action>
|
|
||||||
|
|
||||||
<!-- Mark story ready for review - sprint status conditional -->
|
|
||||||
<check if="{sprint_status} file exists AND {{current_sprint_status}} != 'no-sprint-tracking'">
|
|
||||||
<action>Load the FULL file: {sprint_status}</action>
|
|
||||||
<action>Find development_status key matching {{story_key}}</action>
|
|
||||||
<action>Verify current status is "in-progress" (expected previous state)</action>
|
|
||||||
<action>Update development_status[{{story_key}}] = "review"</action>
|
|
||||||
<action>Update last_updated field to current date</action>
|
|
||||||
<action>Save file, preserving ALL comments and structure including STATUS DEFINITIONS</action>
|
|
||||||
<output>✅ Story status updated to "review" in sprint-status.yaml</output>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="{sprint_status} file does NOT exist OR {{current_sprint_status}} == 'no-sprint-tracking'">
|
|
||||||
<output>ℹ️ Story status updated to "review" in story file (no sprint tracking configured)</output>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<check if="story key not found in sprint status">
|
|
||||||
<output>⚠️ Story file updated, but sprint-status update failed: {{story_key}} not found
|
|
||||||
|
|
||||||
Story status is set to "review" in file, but sprint-status.yaml may be out of sync.
|
|
||||||
</output>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<!-- Final validation gates -->
|
|
||||||
<action if="any task is incomplete">HALT - Complete remaining tasks before marking ready for review</action>
|
|
||||||
<action if="regression failures exist">HALT - Fix regression issues before completing</action>
|
|
||||||
<action if="File List is incomplete">HALT - Update File List with all changed files</action>
|
|
||||||
<action if="definition-of-done validation fails">HALT - Address DoD failures before completing</action>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="10" goal="Completion communication and user support">
|
|
||||||
<action>Execute the enhanced definition-of-done checklist using the validation framework</action>
|
|
||||||
<action>Prepare a concise summary in Dev Agent Record → Completion Notes</action>
|
|
||||||
|
|
||||||
<action>Communicate to {user_name} that story implementation is complete and ready for review</action>
|
|
||||||
<action>Summarize key accomplishments: story ID, story key, title, key changes made, tests added, files modified</action>
|
|
||||||
<action>Provide the story file path and current status (now "review")</action>
|
|
||||||
|
|
||||||
<action>Based on {user_skill_level}, ask if user needs any explanations about:
|
|
||||||
- What was implemented and how it works
|
|
||||||
- Why certain technical decisions were made
|
|
||||||
- How to test or verify the changes
|
|
||||||
- Any patterns, libraries, or approaches used
|
|
||||||
- Anything else they'd like clarified
|
|
||||||
</action>
|
|
||||||
|
|
||||||
<check if="user asks for explanations">
|
|
||||||
<action>Provide clear, contextual explanations tailored to {user_skill_level}</action>
|
|
||||||
<action>Use examples and references to specific code when helpful</action>
|
|
||||||
</check>
|
|
||||||
|
|
||||||
<action>Once explanations are complete (or user indicates no questions), suggest logical next steps</action>
|
|
||||||
<action>Recommended next steps (flexible based on project setup):
|
|
||||||
- Review the implemented story and test the changes
|
|
||||||
- Verify all acceptance criteria are met
|
|
||||||
- Ensure deployment readiness if applicable
|
|
||||||
- Run `code-review` workflow for peer review
|
|
||||||
- Optional: If Test Architect module installed, run `/bmad:tea:automate` to expand guardrail tests
|
|
||||||
</action>
|
|
||||||
|
|
||||||
<output>💡 **Tip:** For best results, run `code-review` using a **different** LLM than the one that implemented this story.</output>
|
|
||||||
<check if="{sprint_status} file exists">
|
|
||||||
<action>Suggest checking {sprint_status} to see project progress</action>
|
|
||||||
</check>
|
|
||||||
<action>Remain flexible - allow user to choose their own path or ask for other assistance</action>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
</workflow>
|
|
||||||
|
|
@ -1,235 +0,0 @@
|
||||||
<task id="_bmad/core/tasks/workflow.xml" name="Execute Workflow" internal="true">
|
|
||||||
<objective>Execute given workflow by loading its configuration, following instructions, and producing output</objective>
|
|
||||||
|
|
||||||
<llm critical="true">
|
|
||||||
<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>NEVER skip a step - YOU are responsible for every steps execution without fail or excuse</mandate>
|
|
||||||
</llm>
|
|
||||||
|
|
||||||
<WORKFLOW-RULES critical="true">
|
|
||||||
<rule n="1">Steps execute in exact numerical order (1, 2, 3...)</rule>
|
|
||||||
<rule n="2">Optional steps: Ask user unless #yolo mode active</rule>
|
|
||||||
<rule n="3">Template-output tags: Save content, discuss with the user the section completed, and NEVER proceed until the users indicates
|
|
||||||
to proceed (unless YOLO mode has been activated)</rule>
|
|
||||||
</WORKFLOW-RULES>
|
|
||||||
|
|
||||||
<flow>
|
|
||||||
<step n="1" title="Load and Initialize Workflow">
|
|
||||||
<substep n="1a" title="Load Configuration and Resolve Variables">
|
|
||||||
<action>Read workflow.yaml from provided path</action>
|
|
||||||
<mandate>Load config_source (REQUIRED for all modules)</mandate>
|
|
||||||
<phase n="1">Load external config from config_source path</phase>
|
|
||||||
<phase n="2">Resolve all {config_source}: references with values from config</phase>
|
|
||||||
<phase n="3">Resolve system variables (date:system-generated) and paths ({project-root}, {installed_path})</phase>
|
|
||||||
<phase n="4">Ask user for input of any variables that are still unknown</phase>
|
|
||||||
</substep>
|
|
||||||
|
|
||||||
<substep n="1b" title="Load Required Components">
|
|
||||||
<mandate>Instructions: Read COMPLETE file from path OR embedded list (REQUIRED)</mandate>
|
|
||||||
<check>If template path → Read COMPLETE template file</check>
|
|
||||||
<check>If validation path → Note path for later loading when needed</check>
|
|
||||||
<check>If template: false → Mark as action-workflow (else template-workflow)</check>
|
|
||||||
<note>Data files (csv, json) → Store paths only, load on-demand when instructions reference them</note>
|
|
||||||
</substep>
|
|
||||||
|
|
||||||
<substep n="1c" title="Initialize Output" if="template-workflow">
|
|
||||||
<action>Resolve default_output_file path with all variables and {{date}}</action>
|
|
||||||
<action>Create output directory if doesn't exist</action>
|
|
||||||
<action>If template-workflow → Write template to output file with placeholders</action>
|
|
||||||
<action>If action-workflow → Skip file creation</action>
|
|
||||||
</substep>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="2" title="Process Each Instruction Step in Order">
|
|
||||||
<iterate>For each step in instructions:</iterate>
|
|
||||||
|
|
||||||
<substep n="2a" title="Handle Step Attributes">
|
|
||||||
<check>If optional="true" and NOT #yolo → Ask user to include</check>
|
|
||||||
<check>If if="condition" → Evaluate condition</check>
|
|
||||||
<check>If for-each="item" → Repeat step for each item</check>
|
|
||||||
<check>If repeat="n" → Repeat step n times</check>
|
|
||||||
</substep>
|
|
||||||
|
|
||||||
<substep n="2b" title="Execute Step Content">
|
|
||||||
<action>Process step instructions (markdown or XML tags)</action>
|
|
||||||
<action>Replace {{variables}} with values (ask user if unknown)</action>
|
|
||||||
<execute-tags>
|
|
||||||
<tag>action xml tag → Perform the action</tag>
|
|
||||||
<tag>check if="condition" xml tag → Conditional block wrapping actions (requires closing </check>)</tag>
|
|
||||||
<tag>ask xml tag → Prompt user and WAIT for response</tag>
|
|
||||||
<tag>invoke-workflow xml tag → Execute another workflow with given inputs and the workflow.xml runner</tag>
|
|
||||||
<tag>invoke-task xml tag → Execute specified task</tag>
|
|
||||||
<tag>invoke-protocol name="protocol_name" xml tag → Execute reusable protocol from protocols section</tag>
|
|
||||||
<tag>goto step="x" → Jump to specified step</tag>
|
|
||||||
</execute-tags>
|
|
||||||
</substep>
|
|
||||||
|
|
||||||
<substep n="2c" title="Handle template-output Tags">
|
|
||||||
<if tag="template-output">
|
|
||||||
<mandate>Generate content for this section</mandate>
|
|
||||||
<mandate>Save to file (Write first time, Edit subsequent)</mandate>
|
|
||||||
<action>Display generated content</action>
|
|
||||||
<ask> [a] Advanced Elicitation, [c] Continue, [p] Party-Mode, [y] YOLO the rest of this document only. WAIT for response. <if
|
|
||||||
response="a">
|
|
||||||
<action>Start the advanced elicitation workflow {project-root}/_bmad/core/workflows/advanced-elicitation/workflow.md</action>
|
|
||||||
</if>
|
|
||||||
<if
|
|
||||||
response="c">
|
|
||||||
<action>Continue to next step</action>
|
|
||||||
</if>
|
|
||||||
<if response="p">
|
|
||||||
<action>Start the party-mode workflow {project-root}/_bmad/core/workflows/party-mode/workflow.md</action>
|
|
||||||
</if>
|
|
||||||
<if
|
|
||||||
response="y">
|
|
||||||
<action>Enter #yolo mode for the rest of the workflow</action>
|
|
||||||
</if>
|
|
||||||
</ask>
|
|
||||||
</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>
|
|
||||||
</substep>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="3" title="Completion">
|
|
||||||
<check>Confirm document saved to output path</check>
|
|
||||||
<action>Report workflow completion</action>
|
|
||||||
</step>
|
|
||||||
</flow>
|
|
||||||
|
|
||||||
<execution-modes>
|
|
||||||
<mode name="normal">Full user interaction and confirmation of EVERY step at EVERY template output - NO EXCEPTIONS except yolo MODE</mode>
|
|
||||||
<mode name="yolo">Skip all confirmations and elicitation, minimize prompts and try to produce all of the workflow automatically by
|
|
||||||
simulating the remaining discussions with an simulated expert user</mode>
|
|
||||||
</execution-modes>
|
|
||||||
|
|
||||||
<supported-tags desc="Instructions can use these tags">
|
|
||||||
<structural>
|
|
||||||
<tag>step n="X" goal="..." - Define step with number and goal</tag>
|
|
||||||
<tag>optional="true" - Step can be skipped</tag>
|
|
||||||
<tag>if="condition" - Conditional execution</tag>
|
|
||||||
<tag>for-each="collection" - Iterate over items</tag>
|
|
||||||
<tag>repeat="n" - Repeat n times</tag>
|
|
||||||
</structural>
|
|
||||||
<execution>
|
|
||||||
<tag>action - Required action to perform</tag>
|
|
||||||
<tag>action if="condition" - Single conditional action (inline, no closing tag needed)</tag>
|
|
||||||
<tag>check if="condition">...</check> - Conditional block wrapping multiple items (closing tag required)</tag>
|
|
||||||
<tag>ask - Get user input (ALWAYS wait for response before continuing)</tag>
|
|
||||||
<tag>goto - Jump to another step</tag>
|
|
||||||
<tag>invoke-workflow - Call another workflow</tag>
|
|
||||||
<tag>invoke-task - Call a task</tag>
|
|
||||||
<tag>invoke-protocol - Execute a reusable protocol (e.g., discover_inputs)</tag>
|
|
||||||
</execution>
|
|
||||||
<output>
|
|
||||||
<tag>template-output - Save content checkpoint</tag>
|
|
||||||
<tag>critical - Cannot be skipped</tag>
|
|
||||||
<tag>example - Show example output</tag>
|
|
||||||
</output>
|
|
||||||
</supported-tags>
|
|
||||||
|
|
||||||
<protocols desc="Reusable workflow protocols that can be invoked via invoke-protocol tag">
|
|
||||||
<protocol name="discover_inputs" desc="Smart file discovery and loading based on input_file_patterns">
|
|
||||||
<objective>Intelligently load project files (whole or sharded) based on workflow's input_file_patterns configuration</objective>
|
|
||||||
|
|
||||||
<critical>Only execute if workflow.yaml contains input_file_patterns section</critical>
|
|
||||||
|
|
||||||
<flow>
|
|
||||||
<step n="1" title="Parse Input File Patterns">
|
|
||||||
<action>Read input_file_patterns from loaded workflow.yaml</action>
|
|
||||||
<action>For each pattern group (prd, architecture, epics, etc.), note the load_strategy if present</action>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="2" title="Load Files Using Smart Strategies">
|
|
||||||
<iterate>For each pattern in input_file_patterns:</iterate>
|
|
||||||
|
|
||||||
<substep n="2a" title="Try Sharded Documents First">
|
|
||||||
<check if="sharded pattern exists">
|
|
||||||
<action>Determine load_strategy from pattern config (defaults to FULL_LOAD if not specified)</action>
|
|
||||||
|
|
||||||
<strategy name="FULL_LOAD">
|
|
||||||
<desc>Load ALL files in sharded directory - used for PRD, Architecture, UX, brownfield docs</desc>
|
|
||||||
<action>Use glob pattern to find ALL .md files (e.g., "{output_folder}/*architecture*/*.md")</action>
|
|
||||||
<action>Load EVERY matching file completely</action>
|
|
||||||
<action>Concatenate content in logical order (index.md first if exists, then alphabetical)</action>
|
|
||||||
<action>Store in variable: {pattern_name_content}</action>
|
|
||||||
</strategy>
|
|
||||||
|
|
||||||
<strategy name="SELECTIVE_LOAD">
|
|
||||||
<desc>Load specific shard using template variable - example: used for epics with {{epic_num}}</desc>
|
|
||||||
<action>Check for template variables in sharded_single pattern (e.g., {{epic_num}})</action>
|
|
||||||
<action>If variable undefined, ask user for value OR infer from context</action>
|
|
||||||
<action>Resolve template to specific file path</action>
|
|
||||||
<action>Load that specific file</action>
|
|
||||||
<action>Store in variable: {pattern_name_content}</action>
|
|
||||||
</strategy>
|
|
||||||
|
|
||||||
<strategy name="INDEX_GUIDED">
|
|
||||||
<desc>Load index.md, analyze structure and description of each doc in the index, then intelligently load relevant docs</desc>
|
|
||||||
<mandate>DO NOT BE LAZY - use best judgment to load documents that might have relevant information, even if only a 5% chance</mandate>
|
|
||||||
<action>Load index.md from sharded directory</action>
|
|
||||||
<action>Parse table of contents, links, section headers</action>
|
|
||||||
<action>Analyze workflow's purpose and objective</action>
|
|
||||||
<action>Identify which linked/referenced documents are likely relevant</action>
|
|
||||||
<example>If workflow is about authentication and index shows "Auth Overview", "Payment Setup", "Deployment" → Load auth
|
|
||||||
docs, consider deployment docs, skip payment</example>
|
|
||||||
<action>Load all identified relevant documents</action>
|
|
||||||
<action>Store combined content in variable: {pattern_name_content}</action>
|
|
||||||
<note>When in doubt, LOAD IT - context is valuable, being thorough is better than missing critical info</note>
|
|
||||||
</strategy>
|
|
||||||
<action>Mark pattern as RESOLVED, skip to next pattern</action>
|
|
||||||
</check>
|
|
||||||
</substep>
|
|
||||||
|
|
||||||
<substep n="2b" title="Try Whole Document if No Sharded Found">
|
|
||||||
<check if="no sharded matches found OR no sharded pattern exists">
|
|
||||||
<action>Attempt glob match on 'whole' pattern (e.g., "{output_folder}/*prd*.md")</action>
|
|
||||||
<check if="matches found">
|
|
||||||
<action>Load ALL matching files completely (no offset/limit)</action>
|
|
||||||
<action>Store content in variable: {pattern_name_content} (e.g., {prd_content})</action>
|
|
||||||
<action>Mark pattern as RESOLVED, skip to next pattern</action>
|
|
||||||
</check>
|
|
||||||
</check>
|
|
||||||
</substep>
|
|
||||||
|
|
||||||
<substep n="2c" title="Handle Not Found">
|
|
||||||
<check if="no matches for sharded OR whole">
|
|
||||||
<action>Set {pattern_name_content} to empty string</action>
|
|
||||||
<action>Note in session: "No {pattern_name} files found" (not an error, just unavailable, offer use change to provide)</action>
|
|
||||||
</check>
|
|
||||||
</substep>
|
|
||||||
</step>
|
|
||||||
|
|
||||||
<step n="3" title="Report Discovery Results">
|
|
||||||
<action>List all loaded content variables with file counts</action>
|
|
||||||
<example>
|
|
||||||
✓ Loaded {prd_content} from 5 sharded files: prd/index.md, prd/requirements.md, ...
|
|
||||||
✓ Loaded {architecture_content} from 1 file: Architecture.md
|
|
||||||
✓ Loaded {epics_content} from selective load: epics/epic-3.md
|
|
||||||
○ No ux_design files found
|
|
||||||
</example>
|
|
||||||
<note>This gives workflow transparency into what context is available</note>
|
|
||||||
</step>
|
|
||||||
</flow>
|
|
||||||
|
|
||||||
</protocol>
|
|
||||||
</protocols>
|
|
||||||
|
|
||||||
<llm final="true">
|
|
||||||
<critical-rules>
|
|
||||||
• This is the complete workflow execution engine
|
|
||||||
• You MUST Follow instructions exactly as written
|
|
||||||
• The workflow execution engine is governed by: {project-root}/_bmad/core/tasks/workflow.xml
|
|
||||||
• You MUST have already loaded and processed: {installed_path}/workflow.yaml
|
|
||||||
• This workflow uses INTENT-DRIVEN PLANNING - adapt organically to product type and context
|
|
||||||
• YOU ARE FACILITATING A CONVERSATION With a user to produce a final document step by step. The whole process is meant to be
|
|
||||||
collaborative helping the user flesh out their ideas. Do not rush or optimize and skip any section.
|
|
||||||
</critical-rules>
|
|
||||||
</llm>
|
|
||||||
</task>
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
---
|
|
||||||
name: '{{name}}'
|
|
||||||
description: '{{description}}'
|
|
||||||
---
|
|
||||||
|
|
||||||
IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded:
|
|
||||||
|
|
||||||
<steps CRITICAL="TRUE">
|
|
||||||
1. Always LOAD the FULL {project-root}/{{bmadFolderName}}/core/tasks/workflow.xml
|
|
||||||
2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config {project-root}/{{bmadFolderName}}/{{path}}
|
|
||||||
3. Pass the yaml path {project-root}/{{bmadFolderName}}/{{path}} as 'workflow-config' parameter to the workflow.xml instructions
|
|
||||||
4. Follow workflow.xml instructions EXACTLY as written to process and follow the specific workflow config and its instructions
|
|
||||||
5. Save outputs after EACH section when generating any documents from templates
|
|
||||||
</steps>
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
---
|
|
||||||
inclusion: manual
|
|
||||||
---
|
|
||||||
|
|
||||||
# {{name}}
|
|
||||||
|
|
||||||
IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded:
|
|
||||||
|
|
||||||
<steps CRITICAL="TRUE">
|
|
||||||
1. Always LOAD the FULL #[[file:{{bmadFolderName}}/core/tasks/workflow.xml]]
|
|
||||||
2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config #[[file:{{bmadFolderName}}/{{path}}]]
|
|
||||||
3. Pass the yaml path {{bmadFolderName}}/{{path}} as 'workflow-config' parameter to the workflow.xml instructions
|
|
||||||
4. Follow workflow.xml instructions EXACTLY as written to process and follow the specific workflow config and its instructions
|
|
||||||
5. Save outputs after EACH section when generating any documents from templates
|
|
||||||
</steps>
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
---
|
|
||||||
description: '{{description}}'
|
|
||||||
---
|
|
||||||
|
|
||||||
IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded:
|
|
||||||
|
|
||||||
<steps CRITICAL="TRUE">
|
|
||||||
1. Always LOAD the FULL {project-root}/_bmad/core/tasks/workflow.xml
|
|
||||||
2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config {project-root}/{{workflow_path}}
|
|
||||||
3. Pass the yaml path {{workflow_path}} as 'workflow-config' parameter to the workflow.xml instructions
|
|
||||||
4. Follow workflow.xml instructions EXACTLY as written to process and follow the specific workflow config and its instructions
|
|
||||||
5. Save outputs after EACH section when generating any documents from templates
|
|
||||||
</steps>
|
|
||||||
Loading…
Reference in New Issue