use sprint plan for al workflow level 4 implementations

This commit is contained in:
Brian Madison 2025-10-21 23:03:46 -05:00
parent abaa24513a
commit ddaefa3284
7 changed files with 437 additions and 57 deletions

View File

@ -28,17 +28,43 @@
<action>READ COMPLETE FILES for all items found in the prioritized set. Store content and paths for citation.</action> <action>READ COMPLETE FILES for all items found in the prioritized set. Store content and paths for citation.</action>
</step> </step>
<step n="3" goal="Determine target story (do not prompt in #yolo)"> <step n="3" goal="Determine target story from sprint status">
<action>List existing story markdown files in {{story_dir}} matching pattern: "story-<epic>.<story>.md"</action> <action>Query sprint-status for next backlog story:</action>
<check>If none found → Set {{epic_num}}=1 and {{story_num}}=1</check>
<check>If files found → Parse epic_num and story_num; pick the highest pair</check> <invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<action>Open the latest story (if exists) and read Status</action> <param>action: get_next_story</param>
<check>If Status != Done/Approved and {{non_interactive}} == true → TARGET the latest story for update (do not create a new one)</check> <param>filter_status: backlog</param>
<check>If Status == Done/Approved → Candidate next story is {{epic_num}}.{{story_num+1}}</check> </invoke-workflow>
<action>If creating a new story candidate: VERIFY planning in {{epics_file}}. Confirm that epic {{epic_num}} explicitly enumerates a next story matching {{story_num+1}} (or an equivalent next planned story entry). If epics.md is missing or does not enumerate another story for this epic, HALT with message:</action>
<action>"No planned next story found in epics.md for epic {{epic_num}}. Please load either PM (Product Manager) agent at {project-root}/bmad/bmm/agents/pm.md or SM (Scrum Master) agent at {project-root}/bmad/bmm/agents/sm.md and run `*correct-course` to add/modify epic stories, then rerun create-story."</action> <check if="{{result_found}} == false">
<check>If verification passes → Set {{story_num}} = {{story_num}} + 1</check> <output>📋 No backlog stories found in sprint-status.yaml
<ask optional="true" if="{{non_interactive}} == false">If starting a new epic and {{non_interactive}} == false, ASK for {{epic_num}} and reset {{story_num}} to 1. In {{non_interactive}} == true, do NOT auto-advance epic; stay within current epic and continue incrementing story_num.</ask>
All stories are either already drafted or completed.
**Options:**
1. Run sprint-planning to refresh story tracking
2. Load PM agent and run correct-course to add more stories
3. Check if current sprint is complete
</output>
<action>HALT</action>
</check>
<action>Parse {{result_story_key}} to extract epic_num, story_num, and story_title
Example: "1-2-user-authentication" → epic_num=1, story_num=2, title="user-authentication"
</action>
<action>Set {{story_id}} = "{{epic_num}}.{{story_num}}"</action>
<action>Verify story is enumerated in {{epics_file}}. If not found, HALT with message:</action>
<action>"Story {{result_story_key}} not found in epics.md. Please load PM agent and run correct-course to sync epics, then rerun create-story."</action>
<action>Check if story file already exists at expected path in {{story_dir}}</action>
<check if="story file exists">
<output> Story file already exists: {{story_file_path}}
Will update existing story file rather than creating new one.
</output>
<action>Set update_mode = true</action>
</check>
</step> </step>
<step n="4" goal="Extract requirements and derive story statement"> <step n="4" goal="Extract requirements and derive story statement">
@ -74,14 +100,31 @@
<step n="8" goal="Validate, save, and optionally generate context"> <step n="8" goal="Validate, save, and optionally generate context">
<invoke-task>Validate against checklist at {installed_path}/checklist.md using bmad/core/tasks/validate-workflow.xml</invoke-task> <invoke-task>Validate against checklist at {installed_path}/checklist.md using bmad/core/tasks/validate-workflow.xml</invoke-task>
<action>Save document unconditionally (non-interactive default). In interactive mode, allow user confirmation.</action> <action>Save document unconditionally (non-interactive default). In interactive mode, allow user confirmation.</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{result_story_key}}</param>
<param>new_status: drafted</param>
<param>validate: true</param>
</invoke-workflow>
<check if="{{result_success}} == false">
<output>⚠️ Could not update story status: {{result_error}}
Story file was created successfully, but sprint-status.yaml was not updated.
You may need to run sprint-planning to refresh tracking.
</output>
</check>
<check>If {{auto_run_context}} == true → <invoke-workflow path="{project-root}/bmad/bmm/workflows/4-implementation/story-context/workflow.yaml">Pass {{story_path}} = {default_output_file}</invoke-workflow></check> <check>If {{auto_run_context}} == true → <invoke-workflow path="{project-root}/bmad/bmm/workflows/4-implementation/story-context/workflow.yaml">Pass {{story_path}} = {default_output_file}</invoke-workflow></check>
<action>Report created/updated story path</action> <action>Report created/updated story path</action>
<output>**✅ Story Created Successfully, {user_name}!** <output>**✅ Story Created Successfully, {user_name}!**
**Story Details:** **Story Details:**
- Story ID: {{story_id}} - Story ID: {{story_id}}
- Story Key: {{result_story_key}}
- File: {{story_file}} - File: {{story_file}}
- Status: Draft (needs review) - Status: {{result_new_status}} (was {{result_old_status}})
**Next Steps:** **Next Steps:**
1. Review the drafted story in {{story_file}} 1. Review the drafted story in {{story_file}}

View File

@ -15,13 +15,38 @@
<workflow> <workflow>
<step n="1" goal="Locate and load story"> <step n="1" goal="Locate and load story from sprint status">
<action>If {{story_path}} explicitly provided → use it</action> <check if="{{story_path}} is provided">
<action>Otherwise list story-*.md files from {{story_dir}}, sort by modified time</action> <action>Use {{story_path}} directly</action>
<ask optional="true" if="{{non_interactive}} == false">Select story or enter path</ask> <action>Read COMPLETE story file</action>
<action if="{{non_interactive}} == true">Auto-select most recent</action> <action>Extract story_key from filename or metadata</action>
<goto>task_check</goto>
</check>
<action>Query sprint-status for ready stories:</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: get_next_story</param>
<param>filter_status: ready-for-dev</param>
</invoke-workflow>
<check if="{{result_found}} == false">
<output>📋 No ready-for-dev stories found in sprint-status.yaml
**Options:**
1. Run `story-ready` to mark drafted stories as ready
2. Run `create-story` if no stories are drafted yet
3. Check sprint-status.yaml to see current story states
</output>
<action>HALT</action>
</check>
<action>Use {{result_story_key}} to find story file in {{story_dir}}</action>
<action>Read COMPLETE story file from discovered path</action>
<action>Store {{result_story_key}} for later status updates</action>
<anchor id="task_check" />
<action>Read COMPLETE story file from {{story_path}}</action>
<action>Parse sections: Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status</action> <action>Parse sections: Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Dev Agent Record, File List, Change Log, Status</action>
<action>Identify first incomplete task (unchecked [ ]) in Tasks/Subtasks</action> <action>Identify first incomplete task (unchecked [ ]) in Tasks/Subtasks</action>
@ -30,6 +55,34 @@
<check>If task requirements ambiguous → ASK user to clarify or HALT</check> <check>If task requirements ambiguous → ASK user to clarify or HALT</check>
</step> </step>
<step n="1.5" goal="Mark story in-progress in sprint status">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: get_story_status</param>
<param>story_key: {{result_story_key}}</param>
</invoke-workflow>
<check if="{{result_status}} == 'ready-for-dev'">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{result_story_key}}</param>
<param>new_status: in-progress</param>
<param>validate: true</param>
</invoke-workflow>
<check if="{{result_success}} == true">
<output>🚀 Starting work on story {{result_story_key}}
Status updated: {{result_old_status}} → {{result_new_status}}
</output>
</check>
</check>
<check if="{{result_status}} == 'in-progress'">
<output>⏯️ Resuming work on story {{result_story_key}}
Story is already marked in-progress
</output>
</check>
</step>
<step n="2" goal="Plan and implement task"> <step n="2" goal="Plan and implement task">
<action>Review acceptance criteria and dev notes for the selected task</action> <action>Review acceptance criteria and dev notes for the selected task</action>
<action>Plan implementation steps and edge cases; write down a brief plan in Dev Agent Record → Debug Log</action> <action>Plan implementation steps and edge cases; write down a brief plan in Dev Agent Record → Debug Log</action>
@ -76,6 +129,21 @@
<action>Confirm File List includes every changed file</action> <action>Confirm File List includes every changed file</action>
<action>Execute story definition-of-done checklist, if the story includes one</action> <action>Execute story definition-of-done checklist, if the story includes one</action>
<action>Update the story Status to: Ready for Review</action> <action>Update the story Status to: Ready for Review</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{result_story_key}}</param>
<param>new_status: review</param>
<param>validate: true</param>
</invoke-workflow>
<check if="{{result_success}} == false">
<output>⚠️ Story file updated, but sprint-status update failed: {{result_error}}
Story is marked Ready for Review in file, but sprint-status.yaml may be out of sync.
</output>
</check>
<check>If any task is incomplete → Return to step 1 to complete remaining work (Do NOT finish with partial progress)</check> <check>If any task is incomplete → Return to step 1 to complete remaining work (Do NOT finish with partial progress)</check>
<check>If regression failures exist → STOP and resolve before completing</check> <check>If regression failures exist → STOP and resolve before completing</check>
<check>If File List is incomplete → Update it before completing</check> <check>If File List is incomplete → Update it before completing</check>
@ -89,14 +157,16 @@
**Story Details:** **Story Details:**
- Story ID: {{current_story_id}} - Story ID: {{current_story_id}}
- Story Key: {{result_story_key}}
- Title: {{current_story_title}} - Title: {{current_story_title}}
- File: {{story_path}} - File: {{story_path}}
- Status: Ready for Review - Status: {{result_new_status}} (was {{result_old_status}})
**Next Steps:** **Next Steps:**
1. Review the implemented story and test the changes 1. Review the implemented story and test the changes
2. Verify all acceptance criteria are met 2. Verify all acceptance criteria are met
3. When satisfied, mark story complete and continue with next story 3. Run `review-story` workflow for senior developer review
4. When review passes, run `story-done` to mark complete
</output> </output>
</step> </step>

View File

@ -16,6 +16,29 @@
<action>Resolve output file path using workflow variables and initialize by writing the template.</action> <action>Resolve output file path using workflow variables and initialize by writing the template.</action>
</step> </step>
<step n="1.5" goal="Validate epic in sprint status">
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: get_epic_status</param>
<param>epic_id: {{epic_id}}</param>
</invoke-workflow>
<check if="{{result_found}} == false">
<output>⚠️ Epic {{epic_id}} not found in sprint-status.yaml
This epic hasn't been registered in the sprint plan yet.
Run sprint-planning workflow to initialize epic tracking.
</output>
<action>HALT</action>
</check>
<check if="{{result_status}} == 'contexted'">
<output> Epic {{epic_id}} already marked as contexted
Continuing to regenerate tech spec...
</output>
</check>
</step>
<step n="2" goal="Overview and scope"> <step n="2" goal="Overview and scope">
<action>Read COMPLETE PRD and Architecture files.</action> <action>Read COMPLETE PRD and Architecture files.</action>
<template-output file="{default_output_file}"> <template-output file="{default_output_file}">
@ -68,18 +91,31 @@
<step n="8" goal="Validate and complete"> <step n="8" goal="Validate and complete">
<invoke-task>Validate against checklist at {installed_path}/checklist.md using bmad/core/tasks/validate-workflow.xml</invoke-task> <invoke-task>Validate against checklist at {installed_path}/checklist.md using bmad/core/tasks/validate-workflow.xml</invoke-task>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_epic_status</param>
<param>epic_id: {{epic_id}}</param>
<param>new_status: contexted</param>
</invoke-workflow>
<check if="{{result_success}} == false">
<output>⚠️ Could not update epic status: {{result_error}}</output>
</check>
<output>**✅ Tech Spec Generated Successfully, {user_name}!** <output>**✅ Tech Spec Generated Successfully, {user_name}!**
**Epic Details:** **Epic Details:**
- Epic ID: {{epic_id}} - Epic ID: {{epic_id}}
- Epic Title: {{epic_title}} - Epic Title: {{epic_title}}
- Tech Spec File: {{default_output_file}} - Tech Spec File: {{default_output_file}}
- Epic Status: {{result_new_status}} (was {{result_old_status}})
**Note:** This is a JIT (Just-In-Time) workflow - run again for other epics as needed. **Note:** This is a JIT (Just-In-Time) workflow - run again for other epics as needed.
**Next Steps:** **Next Steps:**
1. If more epics need tech specs: Run tech-spec again with different epic_id 1. If more epics need tech specs: Run tech-spec again with different epic_id
2. If all tech specs complete: Proceed to Phase 4 implementation 2. If all tech specs complete: Proceed to Phase 4 implementation
- Load SM agent and run `create-story` to begin implementing stories
</output> </output>
</step> </step>

View File

@ -26,6 +26,48 @@ FACILITATION NOTES:
<action>If auto-detection succeeds, confirm with user: "It looks like Epic {{epic_number}} was just completed - is that correct?"</action> <action>If auto-detection succeeds, confirm with user: "It looks like Epic {{epic_number}} was just completed - is that correct?"</action>
<action>If auto-detection fails or user indicates different epic, ask them to share which epic they just completed</action> <action>If auto-detection fails or user indicates different epic, ask them to share which epic they just completed</action>
<action>Verify epic completion status in sprint-status:</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: check_epic_complete</param>
<param>epic_id: {{epic_number}}</param>
</invoke-workflow>
<check if="{{result_complete}} == false">
<output>⚠️ Epic {{epic_number}} is not yet complete for retrospective
**Epic Status:**
- Total Stories: {{result_total_stories}}
- Completed (Done): {{result_done_stories}}
- Pending: {{result_total_stories - result_done_stories}}
**Pending Stories:**
{{result_pending_stories}}
**Options:**
1. Complete remaining stories before running retrospective
2. Continue with partial retrospective (not recommended)
3. Run sprint-planning to refresh story tracking
</output>
<ask if="{{non_interactive}} == false">Epic is incomplete. Continue anyway? (yes/no)</ask>
<check if="user says no">
<action>HALT</action>
</check>
<action if="user says yes">Set {{partial_retrospective}} = true</action>
</check>
<check if="{{result_complete}} == true">
<output>✅ Epic {{epic_number}} is complete - all {{result_done_stories}} stories done!
Ready to proceed with retrospective.
</output>
</check>
<action>Load the completed epic from: {output_folder}/prd/epic-{{epic_number}}.md</action> <action>Load the completed epic from: {output_folder}/prd/epic-{{epic_number}}.md</action>
<action>Extract epic details: <action>Extract epic details:
@ -361,6 +403,27 @@ See you at sprint planning once prep work is done!"
``` ```
<action>Save retrospective summary to: {output_folder}/retrospectives/epic-{{completed_number}}-retro-{{date}}.md</action> <action>Save retrospective summary to: {output_folder}/retrospectives/epic-{{completed_number}}-retro-{{date}}.md</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: complete_retrospective</param>
<param>epic_id: {{completed_number}}</param>
</invoke-workflow>
<check if="{{result_success}} == true">
<output>✅ Retrospective marked as completed in sprint-status.yaml
Retrospective key: {{result_retro_key}}
Status: {{result_old_status}} → {{result_new_status}}
</output>
</check>
<check if="{{result_success}} == false">
<output>⚠️ Could not update retrospective status: {{result_error}}
Retrospective document was saved, but sprint-status.yaml may need manual update.
</output>
</check>
<action>Confirm all action items have been captured</action> <action>Confirm all action items have been captured</action>
<action>Remind user to schedule prep sprint if needed</action> <action>Remind user to schedule prep sprint if needed</action>
<output>**✅ Retrospective Complete, {user_name}!** <output>**✅ Retrospective Complete, {user_name}!**
@ -368,6 +431,7 @@ See you at sprint planning once prep work is done!"
**Epic Review:** **Epic Review:**
- Epic {{completed_number}}: {{epic_title}} reviewed - Epic {{completed_number}}: {{epic_title}} reviewed
- Retrospective Status: {{result_new_status}}
- Retrospective saved: {output_folder}/retrospectives/epic-{{completed_number}}-retro-{{date}}.md - Retrospective saved: {output_folder}/retrospectives/epic-{{completed_number}}-retro-{{date}}.md
- Action Items: {{action_count}} - Action Items: {{action_count}}
- Preparation Tasks: {{prep_task_count}} - Preparation Tasks: {{prep_task_count}}
@ -379,6 +443,8 @@ See you at sprint planning once prep work is done!"
2. Execute preparation sprint (Est: {{prep_days}} days) 2. Execute preparation sprint (Est: {{prep_days}} days)
3. Complete critical path items before Epic {{next_number}} 3. Complete critical path items before Epic {{next_number}}
4. Begin Epic {{next_number}} planning when preparation complete 4. Begin Epic {{next_number}} planning when preparation complete
- Load PM agent and run `epic-tech-context` for next epic
- Or continue with existing contexted epics
</output> </output>
</step> </step>

View File

@ -15,11 +15,49 @@
<workflow> <workflow>
<step n="1" goal="Locate story and verify review status"> <step n="1" goal="Locate story and verify review status">
<action>If {{story_path}} was provided → use it. Else auto-discover from {{story_dir}} by listing files matching pattern: "story-*.md" (recursive), sort by last modified (newest first), present top {{story_selection_limit}}.</action> <check if="{{story_path}} is provided">
<ask optional="true" if="{{non_interactive}} == false">Select a story (1-{{story_selection_limit}}) or enter a path:</ask> <action>Use {{story_path}} directly</action>
<action>Resolve {{story_path}} and read the COMPLETE file.</action> <action>Read COMPLETE file and parse sections</action>
<action>Extract {{epic_num}} and {{story_num}} from filename (e.g., story-2.3.*.md) and story metadata if available.</action> <action>Extract story_key from filename or story metadata</action>
<action>Parse sections: Status, Story, Acceptance Criteria, Tasks/Subtasks (and completion states), Dev Notes, Dev Agent Record (Context Reference, Completion Notes, File List), Change Log.</action> <goto>verify_status</goto>
</check>
<action>Query sprint-status for review stories:</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: list_stories</param>
<param>filter_status: review</param>
<param>limit: 10</param>
</invoke-workflow>
<check if="{{result_count}} == 0">
<output>📋 No stories in review status found
**Options:**
1. Run `dev-story` to implement and mark stories ready for review
2. Check sprint-status.yaml for current story states
</output>
<action>HALT</action>
</check>
<action>Display available review stories:
**Stories Ready for Review ({{result_count}} found):**
{{result_story_list}}
</action>
<ask if="{{non_interactive}} == false">Select story to review (enter story key or number):</ask>
<action if="{{non_interactive}} == true">Auto-select first story from result_stories</action>
<action>Resolve selected story_key and find file path in {{story_dir}}</action>
<action>Resolve {{story_path}} and read the COMPLETE file</action>
<anchor id="verify_status" />
<action>Extract {{epic_num}} and {{story_num}} from filename (e.g., story-2.3.*.md) and story metadata if available</action>
<action>Parse sections: Status, Story, Acceptance Criteria, Tasks/Subtasks (and completion states), Dev Notes, Dev Agent Record (Context Reference, Completion Notes, File List), Change Log</action>
<action if="Status is not one of {{allow_status_values}}">HALT with message: "Story status must be 'Ready for Review' to proceed" (accept 'Review' as equivalent).</action> <action if="Status is not one of {{allow_status_values}}">HALT with message: "Story status must be 'Ready for Review' to proceed" (accept 'Review' as equivalent).</action>
<action if="story cannot be read">HALT.</action> <action if="story cannot be read">HALT.</action>
</step> </step>
@ -80,6 +118,32 @@
<action>Save the story file.</action> <action>Save the story file.</action>
</step> </step>
<step n="7.5" goal="Update sprint-status based on review outcome">
<action>Determine target status based on review outcome:
- If {{outcome}} == "Approve" → target_status = "done"
- If {{outcome}} == "Changes Requested" → target_status = "in-progress"
- If {{outcome}} == "Blocked" → target_status = "review" (stay in review)
</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{story_key}}</param>
<param>new_status: {{target_status}}</param>
<param>validate: true</param>
</invoke-workflow>
<check if="{{result_success}} == true">
<output>✅ Sprint status updated: {{result_old_status}} → {{result_new_status}}</output>
</check>
<check if="{{result_success}} == false">
<output>⚠️ Could not update sprint-status: {{result_error}}
Review was saved to story file, but sprint-status.yaml may be out of sync.
</output>
</check>
</step>
<step n="8" goal="Persist action items to tasks/backlog/epic"> <step n="8" goal="Persist action items to tasks/backlog/epic">
<action>Normalize Action Items into a structured list: description, severity (High/Med/Low), type (Bug/TechDebt/Enhancement), suggested owner (if known), related AC/file references.</action> <action>Normalize Action Items into a structured list: description, severity (High/Med/Low), type (Bug/TechDebt/Enhancement), suggested owner (if known), related AC/file references.</action>
<action if="{{persist_action_items}} == true and 'story_tasks' in {{persist_targets}}"> <action if="{{persist_action_items}} == true and 'story_tasks' in {{persist_targets}}">
@ -104,13 +168,16 @@
**Story Details:** **Story Details:**
- Story: {{epic_num}}.{{story_num}} - Story: {{epic_num}}.{{story_num}}
- Story Key: {{story_key}}
- Review Outcome: {{outcome}} - Review Outcome: {{outcome}}
- Sprint Status: {{result_new_status}}
- Action Items: {{action_item_count}} - Action Items: {{action_item_count}}
**Next Steps:** **Next Steps:**
1. Review the Senior Developer Review notes appended to story 1. Review the Senior Developer Review notes appended to story
2. Address any action items or changes requested 2. If approved: Story is marked done, continue with next story
3. When ready, continue with implementation or mark story complete 3. If changes requested: Address action items and re-run `dev-story`
4. If blocked: Resolve blockers before proceeding
</output> </output>
</step> </step>

View File

@ -10,25 +10,55 @@
<critical>This workflow is run by DEV agent AFTER user confirms a story is approved (Definition of Done is complete)</critical> <critical>This workflow is run by DEV agent AFTER user confirms a story is approved (Definition of Done is complete)</critical>
<critical>Workflow: Update story file status to Done</critical> <critical>Workflow: Update story file status to Done</critical>
<step n="1" goal="Locate story and update to Done status"> <step n="1" goal="Find reviewed story and mark done">
<action>If {{story_path}} explicitly provided → use it</action> <action>If {{story_path}} is provided → use it directly; extract story_key from filename or metadata; GOTO mark_done</action>
<action>Otherwise list story-\*.md files from {{story_dir}}, sort by modified time</action>
<ask>Select the story to mark as Done, or enter path:</ask>
<action>Read the story file: {{story_path}}</action> <action>Otherwise query sprint-status for reviewed stories:</action>
<action>Extract story ID and title from the file</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: list_stories</param>
<param>filter_status: review</param>
<param>limit: 10</param>
</invoke-workflow>
<check if="{{result_count}} == 0">
<output>📋 No stories in review status found
All stories are either still in development or already done.
**Options:**
1. Run `dev-story` to implement stories
2. Run `review-story` if stories need review first
3. Check sprint-status.yaml for current story states
</output>
<action>HALT</action>
</check>
<action>Display available reviewed stories:
**Stories Ready to Mark Done ({{result_count}} found):**
{{result_story_list}}
</action>
<ask>Select the story to mark as Done (enter story key or number):</ask>
<action>Resolve selected story_key from user input</action>
<action>Find matching story file in {{story_dir}} using story_key pattern</action>
<anchor id="mark_done" />
<action>Read the story file from resolved path</action>
<action>Extract story_id and story_title from the file</action>
<action>Find the "Status:" line (usually at the top)</action> <action>Find the "Status:" line (usually at the top)</action>
<action>Update story file: Change Status to "Done"</action>
<action>Update story file:</action> <action>Add completion notes to Dev Agent Record section:</action>
<action>Find "## Dev Agent Record" section and add:
- Change: `Status: Ready for Review` or `Status: In Review` or similar
- To: `Status: Done`
<action>Add completion notes if Dev Agent Record section exists:</action>
Find "## Dev Agent Record" section and add:
``` ```
### Completion Notes ### Completion Notes
@ -36,8 +66,24 @@ Find "## Dev Agent Record" section and add:
**Definition of Done:** All acceptance criteria met, code reviewed, tests passing **Definition of Done:** All acceptance criteria met, code reviewed, tests passing
``` ```
</action>
<action>Save the story file</action> <action>Save the story file</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{story_key}}</param>
<param>new_status: done</param>
<param>validate: true</param>
</invoke-workflow>
<check if="{{result_success}} == false">
<output>⚠️ Story file updated, but could not update sprint-status: {{result_error}}
Story is marked Done in file, but sprint-status.yaml may be out of sync.
</output>
</check>
</step> </step>
<step n="2" goal="Confirm completion to user"> <step n="2" goal="Confirm completion to user">
@ -45,10 +91,12 @@ Find "## Dev Agent Record" section and add:
<output>**Story Approved and Marked Done, {user_name}!** <output>**Story Approved and Marked Done, {user_name}!**
✅ Story file updated: `{{story_file}}` → Status: Done ✅ Story file updated: `{{story_file}}` → Status: Done
✅ Sprint status updated: {{result_old_status}} → {{result_new_status}}
**Completed Story:** **Completed Story:**
- **ID:** {{story_id}} - **ID:** {{story_id}}
- **Key:** {{story_key}}
- **Title:** {{story_title}} - **Title:** {{story_title}}
- **File:** `{{story_file}}` - **File:** `{{story_file}}`
- **Completed:** {{date}} - **Completed:** {{date}}
@ -56,7 +104,11 @@ Find "## Dev Agent Record" section and add:
**Next Steps:** **Next Steps:**
1. Continue with next story in your backlog 1. Continue with next story in your backlog
2. Or run `retrospective` workflow if all stories are complete - Run `create-story` for next backlog story
- Or run `dev-story` if ready stories exist
2. Check epic completion status
- Run `retrospective` workflow to check if epic is complete
- Epic retrospective will verify all stories are done
</output> </output>
</step> </step>

View File

@ -10,24 +10,68 @@
<critical>This workflow is run by SM agent AFTER user reviews a drafted story and confirms it's ready for development</critical> <critical>This workflow is run by SM agent AFTER user reviews a drafted story and confirms it's ready for development</critical>
<critical>Simple workflow: Update story file status to Ready</critical> <critical>Simple workflow: Update story file status to Ready</critical>
<step n="1" goal="Locate story and update status"> <step n="1" goal="Find drafted story and mark as ready">
<action>If {{story_path}} explicitly provided → use it</action> <action>If {{story_path}} is provided → use it directly; extract story_key from filename or metadata; GOTO mark_ready</action>
<action>Otherwise list story-\*.md files from {{story_dir}}, sort by modified time</action>
<ask>Select the drafted story to mark as Ready, or enter path:</ask>
<action>Read the story file: {{story_path}}</action> <action>Otherwise query sprint-status for drafted stories:</action>
<action>Extract story ID and title from the file</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: list_stories</param>
<param>filter_status: drafted</param>
<param>limit: 10</param>
</invoke-workflow>
<check if="{{result_count}} == 0">
<output>📋 No drafted stories found in sprint-status.yaml
All stories are either still in backlog or already marked ready/in-progress/done.
**Options:**
1. Run `create-story` to draft more stories
2. Run `sprint-planning` to refresh story tracking
</output>
<action>HALT</action>
</check>
<action>Display available drafted stories:
**Drafted Stories Available ({{result_count}} found):**
{{result_story_list}}
</action>
<ask if="{{non_interactive}} == false">Select the drafted story to mark as Ready (enter story key or number):</ask>
<action if="{{non_interactive}} == true">Auto-select first story from result_stories</action>
<action>Resolve selected story_key from user input or auto-selection</action>
<action>Find matching story file in {{story_dir}} using story_key pattern</action>
<anchor id="mark_ready" />
<action>Read the story file from resolved path</action>
<action>Extract story_id and story_title from the file</action>
<action>Find the "Status:" line (usually at the top)</action> <action>Find the "Status:" line (usually at the top)</action>
<action>Update story file: Change Status to "Ready"</action>
<action>Update story file:</action>
- Change: `Status: Draft` or similar
- To: `Status: Ready`
<action>Save the story file</action> <action>Save the story file</action>
<invoke-workflow path="{project-root}/bmad/bmm/workflows/helpers/sprint-status">
<param>action: update_story_status</param>
<param>story_key: {{story_key}}</param>
<param>new_status: ready-for-dev</param>
<param>validate: true</param>
</invoke-workflow>
<check if="{{result_success}} == false">
<output>⚠️ Story file updated, but could not update sprint-status: {{result_error}}
You may need to run sprint-planning to refresh tracking.
</output>
</check>
</step> </step>
<step n="2" goal="Confirm completion to user"> <step n="2" goal="Confirm completion to user">
@ -35,10 +79,12 @@
<output>**Story Marked Ready for Development, {user_name}!** <output>**Story Marked Ready for Development, {user_name}!**
✅ Story file updated: `{{story_file}}` → Status: Ready ✅ Story file updated: `{{story_file}}` → Status: Ready
✅ Sprint status updated: {{result_old_status}} → {{result_new_status}}
**Story Details:** **Story Details:**
- **ID:** {{story_id}} - **ID:** {{story_id}}
- **Key:** {{story_key}}
- **Title:** {{story_title}} - **Title:** {{story_title}}
- **File:** `{{story_file}}` - **File:** `{{story_file}}`
- **Status:** Ready for development - **Status:** Ready for development