status normalization

This commit is contained in:
Brian Madison 2025-10-25 15:41:13 -05:00
parent 5762941321
commit 061b7d94c4
11 changed files with 101 additions and 80 deletions

View File

@ -1,6 +1,6 @@
# Story {{epic_num}}.{{story_num}}: {{story_title}} # Story {{epic_num}}.{{story_num}}: {{story_title}}
Status: Draft Status: drafted
## Story ## Story

View File

@ -37,7 +37,8 @@ variables:
non_interactive: true # Generate without elicitation; avoid interactive prompts non_interactive: true # Generate without elicitation; avoid interactive prompts
# Output configuration # Output configuration
default_output_file: "{story_dir}/story-{{epic_num}}.{{story_num}}.md" # Uses story_key from sprint-status.yaml (e.g., "1-2-user-authentication")
default_output_file: "{story_dir}/{{story_key}}.md"
recommended_inputs: recommended_inputs:
- epics: "Epic breakdown (epics.md)" - epics: "Epic breakdown (epics.md)"

View File

@ -7,8 +7,7 @@
<critical>Generate all documents in {document_output_language}</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>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>Execute ALL steps in exact order; do NOT skip steps</critical>
<critical>If {{run_until_complete}} == true, run non-interactively: do not pause between steps unless a HALT condition is reached or explicit user approval is required for unapproved dependencies.</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>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) or a HALT condition is triggered.</critical>
<critical>Do NOT schedule a "next session" or request review pauses unless a HALT condition applies. Only Step 6 decides completion.</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> <critical>User skill level ({user_skill_level}) affects conversation style ONLY, not code updates.</critical>
@ -34,29 +33,43 @@
- Status value equals "ready-for-dev" - Status value equals "ready-for-dev"
</action> </action>
<check if="no ready-for-dev story found"> <check if="no ready-for-dev or in-progress story found">
<output>📋 No ready-for-dev stories found in sprint-status.yaml <output>📋 No ready-for-dev stories found in sprint-status.yaml
**Options:** **Options:**
1. Run `story-ready` to mark drafted stories as ready 1. Run `story-context` to generate context file and mark drafted stories as ready
2. Run `create-story` if no stories are drafted yet 2. Run `story-ready` to quickly mark drafted stories as ready without generating context
3. Check sprint-status.yaml to see current story states 3. Run `create-story` if no incomplete stories are drafted yet
4. Check {output-folder}/sprint-status.yaml to see current sprint status
</output> </output>
<action>HALT</action> <action>HALT</action>
</check> </check>
<action>Store the found story_key (e.g., "1-2-user-authentication") for later status updates</action> <action>Store the found story_key (e.g., "1-2-user-authentication") for later status updates</action>
<action>Find matching story file in {{story_dir}} using story_key pattern</action> <action>Find matching story file in {{story_dir}} using story_key pattern: {{story_key}}.md</action>
<action>Read COMPLETE story file from discovered path</action> <action>Read COMPLETE story file from discovered path</action>
<anchor id="task_check" /> <anchor id="task_check" />
<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>Check if context file exists at: {{story_dir}}/{{story_key}}.context.md</action>
<check if="context file exists">
<action>Read COMPLETE context file</action>
<action>Parse all sections: story details, artifacts (docs, code, dependencies), interfaces, constraints, tests</action>
<action>Use this context to inform implementation decisions and approaches</action>
</check>
<check if="context file does NOT exist">
<output> No context file found for {{story_key}}
Proceeding with story file only. For better context, consider running `story-context` workflow first.
</output>
</check>
<action>Identify first incomplete task (unchecked [ ]) in Tasks/Subtasks</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="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="story file inaccessible">HALT: "Cannot develop story without access to story file"</action>
<action if="task requirements ambiguous">ASK user to clarify or HALT</action> <action if="incomplete task or subtask requirements ambiguous">ASK user to clarify or HALT</action>
</step> </step>
<step n="1.5" goal="Mark story in-progress" tag="sprint-status"> <step n="1.5" goal="Mark story in-progress" tag="sprint-status">
@ -65,8 +78,7 @@
<action>Get current status value for development_status[{{story_key}}]</action> <action>Get current status value for development_status[{{story_key}}]</action>
<check if="current status == 'ready-for-dev'"> <check if="current status == 'ready-for-dev'">
<action>Update development_status[{{story_key}}] = "in-progress"</action> <action>Update the story in the sprint status report to = "in-progress"</action>
<action>Save file, preserving ALL comments and structure including STATUS DEFINITIONS</action>
<output>🚀 Starting work on story {{story_key}} <output>🚀 Starting work on story {{story_key}}
Status updated: ready-for-dev → in-progress Status updated: ready-for-dev → in-progress
</output> </output>
@ -88,9 +100,9 @@ Expected ready-for-dev or in-progress. Continuing anyway...
<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>
<action>Implement the task COMPLETELY including all subtasks, following architecture patterns and coding standards in this repo</action> <action>Implement the task COMPLETELY including all subtasks, critically following best practices, coding patterns and coding standards in this repo you have learned about from the story and context file or your own critical agent instructions</action>
<action>Handle error conditions and edge cases appropriately</action> <action>Handle error conditions and edge cases appropriately</action>
<action if="unapproved dependencies are needed">ASK user for approval before adding</action> <action if="new or different than what is documented dependencies are needed">ASK user for approval before adding</action>
<action if="3 consecutive implementation failures occur">HALT and request guidance</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> <action if="required configuration is missing">HALT: "Cannot proceed without necessary configuration files"</action>
<action if="{{run_until_complete}} == true">Do not stop after partial progress; continue iterating tasks until all ACs are satisfied or a HALT condition triggers</action> <action if="{{run_until_complete}} == true">Do not stop after partial progress; continue iterating tasks until all ACs are satisfied or a HALT condition triggers</action>
@ -110,7 +122,7 @@ Expected ready-for-dev or in-progress. Continuing anyway...
<action>Run the new tests to verify implementation correctness</action> <action>Run the new tests to verify implementation correctness</action>
<action>Run linting and code quality checks if configured</action> <action>Run linting and code quality checks if configured</action>
<action>Validate implementation meets ALL story acceptance criteria; if ACs include quantitative thresholds (e.g., test pass rate), ensure they are met before marking complete</action> <action>Validate implementation meets ALL story acceptance criteria; if ACs include quantitative thresholds (e.g., test pass rate), ensure they are met before marking complete</action>
<action if="regression tests fail">STOP and fix before continuing</action> <action if="regression tests fail">STOP and fix before continuing, consider how current changes made broke regression</action>
<action if="new tests fail">STOP and fix before continuing</action> <action if="new tests fail">STOP and fix before continuing</action>
</step> </step>
@ -118,10 +130,9 @@ Expected ready-for-dev or in-progress. Continuing anyway...
<action>ONLY mark the task (and subtasks) checkbox with [x] if ALL tests pass and validation succeeds</action> <action>ONLY mark the task (and subtasks) checkbox with [x] if ALL tests pass and validation succeeds</action>
<action>Update File List section with any new, modified, or deleted files (paths relative to repo root)</action> <action>Update File List section with any new, modified, or deleted files (paths relative to repo root)</action>
<action>Add completion notes to Dev Agent Record if significant changes were made (summarize intent, approach, and any follow-ups)</action> <action>Add completion notes to Dev Agent Record if significant changes were made (summarize intent, approach, and any follow-ups)</action>
<action>Append a brief entry to Change Log describing the change</action>
<action>Save the story file</action> <action>Save the story file</action>
<action>Determine if more incomplete tasks remain</action> <action>Determine if more incomplete tasks remain</action>
<action if="more tasks remain"><goto step="1">Next task</goto></action> <action if="more tasks remain"><goto step="2">Next task</goto></action>
<action if="no tasks remain"><goto step="6">Completion</goto></action> <action if="no tasks remain"><goto step="6">Completion</goto></action>
</step> </step>
@ -130,7 +141,7 @@ Expected ready-for-dev or in-progress. Continuing anyway...
<action>Run the full regression suite (do not skip)</action> <action>Run the full regression suite (do not skip)</action>
<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: review</action>
<!-- Mark story ready for review --> <!-- Mark story ready for review -->
<action>Load the FULL file: {{output_folder}}/sprint-status.yaml</action> <action>Load the FULL file: {{output_folder}}/sprint-status.yaml</action>
@ -151,25 +162,36 @@ Story is marked Ready for Review in file, but sprint-status.yaml may be out of s
<action if="File List is incomplete">Update it before completing</action> <action if="File List is incomplete">Update it before completing</action>
</step> </step>
<step n="7" goal="Validation and handoff" optional="true"> <step n="7" goal="Completion communication and user support">
<action>Optionally run the workflow validation task against the story using {project-root}/bmad/core/tasks/validate-workflow.xml</action> <action>Optionally run the workflow validation task against the story using {project-root}/bmad/core/tasks/validate-workflow.xml</action>
<action>Prepare a concise summary in Dev Agent Record → Completion Notes</action> <action>Prepare a concise summary in Dev Agent Record → Completion Notes</action>
<action>Communicate that the story is Ready for Review</action>
<output>**✅ Story Implementation Complete, {user_name}!**
**Story Details:** <action>Communicate to {user_name} that story implementation is complete and ready for review</action>
- Story ID: {{current_story_id}} <action>Summarize key accomplishments: story ID, story key, title, key changes made, tests added, files modified</action>
- Story Key: {{story_key}} <action>Provide the story file path and current status (now "review", was "in-progress")</action>
- Title: {{current_story_title}}
- File: {{story_path}}
- Status: review (was in-progress)
**Next Steps:** <action>Based on {user_skill_level}, ask if user needs any explanations about:
1. Review the implemented story and test the changes - What was implemented and how it works
2. Verify all acceptance criteria are met - Why certain technical decisions were made
3. Run `review-story` workflow for senior developer review - How to test or verify the changes
4. When review passes, run `story-done` to mark complete - Any patterns, libraries, or approaches used
</output> - 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>Common next steps to suggest (but allow user flexibility):
- Review the implemented story yourself and test the changes
- Verify all acceptance criteria are met
- Ensure deployment readiness if applicable
- Run `review-story` workflow for peer review
- Check sprint-status.yaml to see project progress
</action>
<action>Remain flexible - allow user to choose their own path or ask for other assistance</action>
</step> </step>
</workflow> </workflow>

View File

@ -7,27 +7,17 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
story_dir: "{config_source}:dev_story_location"
context_path: "{config_source}:dev_story_location"
date: system-generated date: system-generated
story_file: "" # Explicit story path; auto-discovered if empty
# Context file uses same story_key as story file (e.g., "1-2-user-authentication.context.md")
context_file: "{story_dir}/{{story_key}}.context.md"
# Workflow components # Workflow components
installed_path: "{project-root}/bmad/bmm/workflows/4-implementation/dev-story" installed_path: "{project-root}/bmad/bmm/workflows/4-implementation/dev-story"
instructions: "{installed_path}/instructions.md" instructions: "{installed_path}/instructions.md"
validation: "{installed_path}/checklist.md" validation: "{installed_path}/checklist.md"
template: false
# Variables (can be provided by caller)
variables:
story_path: ""
run_tests_command: "auto" # 'auto' = infer from repo, or override with explicit command
strict: true # if true, halt on validation failures
story_dir: "{config_source}:dev_story_location" # Directory containing story markdown files
story_selection_limit: 10
run_until_complete: false # Continue through all tasks without pausing except on HALT conditions
force_yolo: false # Hint executor to activate #yolo: skip optional prompts and elicitation
# Recommended inputs
recommended_inputs:
- story_markdown: "Path to the story markdown file (Tasks/Subtasks, Acceptance Criteria present)"
web_bundle: false web_bundle: false

View File

@ -1,4 +1,4 @@
# Technical Specification: {{epic_title}} # Epic Technical Specification: {{epic_title}}
Date: {{date}} Date: {{date}}
Author: {{user_name}} Author: {{user_name}}

View File

@ -64,7 +64,7 @@
<action>Extract {{epic_num}} and {{story_num}} from filename (e.g., story-2.3.*.md) and story metadata if available</action> <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>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 'review' to proceed".</action>
<action if="story cannot be read">HALT.</action> <action if="story cannot be read">HALT.</action>
</step> </step>

View File

@ -24,8 +24,7 @@ variables:
story_dir: "{config_source}:dev_story_location" # Directory containing story markdown files story_dir: "{config_source}:dev_story_location" # Directory containing story markdown files
story_selection_limit: 10 story_selection_limit: 10
allow_status_values: | allow_status_values: |
- Ready for Review - review
- Review
auto_discover_context: true auto_discover_context: true
auto_discover_tech_spec: true auto_discover_tech_spec: true
tech_spec_search_dir: "{project-root}/docs" tech_spec_search_dir: "{project-root}/docs"
@ -38,8 +37,8 @@ variables:
enable_mcp_doc_search: true # Prefer enabled MCP servers for doc/best-practice lookup enable_mcp_doc_search: true # Prefer enabled MCP servers for doc/best-practice lookup
enable_web_fallback: true # Fallback to web search/read-url if MCP not available enable_web_fallback: true # Fallback to web search/read-url if MCP not available
update_status_on_result: true # If true, update story Status based on review outcome update_status_on_result: true # If true, update story Status based on review outcome
status_on_approve: "Review Passed" status_on_approve: "done"
status_on_changes_requested: "InProgress" status_on_changes_requested: "in-progress"
# Persistence controls for review action items and notes # Persistence controls for review action items and notes
persist_action_items: true persist_action_items: true
# Valid targets: story_tasks, story_review_section, backlog_file, epic_followups # Valid targets: story_tasks, story_review_section, backlog_file, epic_followups

View File

@ -134,7 +134,7 @@ All stories are either still in backlog or already marked ready/in-progress/done
<step n="7" goal="Update story file and mark ready for dev" tag="sprint-status"> <step n="7" goal="Update story file and mark ready for dev" tag="sprint-status">
<action>Open {{story_path}}</action> <action>Open {{story_path}}</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: Change Status to "ready-for-dev"</action>
<action>Under 'Dev Agent Record' → 'Context Reference' (create if missing), add or update a list item for {default_output_file}.</action> <action>Under 'Dev Agent Record' → 'Context Reference' (create if missing), add or update a list item for {default_output_file}.</action>
<action>Save the story file.</action> <action>Save the story file.</action>
@ -152,21 +152,31 @@ You may need to run sprint-planning to refresh tracking.
</output> </output>
</check> </check>
<output>**✅ Story Context Generated Successfully, {user_name}!** <action>Communicate to {user_name} that story context has been successfully generated</action>
<action>Summarize what was accomplished: story ID, story key, title, context file location</action>
<action>Explain that story status is now "ready-for-dev" (was "drafted") and sprint status is "ready-for-dev" (was "drafted")</action>
<action>Highlight the value of the generated context: provides docs, code references, interfaces, constraints, and test guidance</action>
**Story Details:** <action>Based on {user_skill_level}, ask if user would like to understand:
- Story ID: {{story_id}} - What information was gathered in the context file
- Story Key: {{story_key}} - How the context file will help during implementation
- Title: {{story_title}} - What the next steps are
- Context File: {{default_output_file}} - Anything else about the context generation process
- Story Status: Ready (was Draft) </action>
- Sprint Status: ready-for-dev (was drafted)
**Next Steps:** <check if="user asks for explanations">
1. Load DEV agent (bmad/bmm/agents/dev.md) <action>Provide clear explanations tailored to {user_skill_level}</action>
2. Run `dev-story` workflow to implement the story <action>Reference specific sections of the generated context when helpful</action>
3. The context file will provide comprehensive implementation guidance </check>
</output>
<action>Once explanations are complete (or user indicates no questions), suggest logical next steps</action>
<action>Common next steps to suggest (but allow user flexibility):
- Review the generated context file to understand implementation guidance
- Load DEV agent and run `dev-story` workflow to implement the story
- Check sprint-status.yaml to see which stories are ready for development
- Generate context for additional drafted stories if needed
</action>
<action>Remain flexible - allow user to choose their own path or ask for other assistance</action>
</step> </step>
</workflow> </workflow>

View File

@ -8,6 +8,8 @@ config_source: "{project-root}/bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder" output_folder: "{config_source}:output_folder"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
story_path: "{config_source}:dev_story_location"
context_path: "{config_source}:dev_story_location"
date: system-generated date: system-generated
# Workflow components # Workflow components
@ -26,10 +28,7 @@ variables:
non_interactive: true non_interactive: true
# Output configuration # Output configuration
default_output_file: "{story_dir}/story-context-{{epic_id}}.{{story_id}}.xml" # Uses story_key from sprint-status.yaml (e.g., "1-2-user-authentication")
default_output_file: "{story_dir}/{{story_key}}.context.md"
# Recommended inputs
recommended_inputs:
- story_markdown: "Path to a story markdown file to build context for"
web_bundle: false web_bundle: false

View File

@ -62,7 +62,7 @@ All stories are either still in development or already done.
<action>Extract story_id and story_title from the file</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: Change Status to "done"</action>
<action>Add completion notes to Dev Agent Record section:</action> <action>Add completion notes to Dev Agent Record section:</action>
<action>Find "## Dev Agent Record" section and add: <action>Find "## Dev Agent Record" section and add:
@ -98,7 +98,7 @@ Story is marked Done in file, but sprint-status.yaml may be out of sync.
<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: review → done ✅ Sprint status updated: review → done
**Completed Story:** **Completed Story:**

View File

@ -62,7 +62,7 @@ All stories are either still in backlog or already marked ready/in-progress/done
<action>Extract story_id and story_title from the file</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: Change Status to "ready-for-dev"</action>
<action>Save the story file</action> <action>Save the story file</action>
</step> </step>
@ -86,7 +86,7 @@ You may need to run sprint-planning to refresh tracking.
<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-for-dev
✅ Sprint status updated: drafted → ready-for-dev ✅ Sprint status updated: drafted → ready-for-dev
**Story Details:** **Story Details:**
@ -95,7 +95,7 @@ You may need to run sprint-planning to refresh tracking.
- **Key:** {{story_key}} - **Key:** {{story_key}}
- **Title:** {{story_title}} - **Title:** {{story_title}}
- **File:** `{{story_file}}` - **File:** `{{story_file}}`
- **Status:** Ready for development - **Status:** ready-for-dev
**Next Steps:** **Next Steps:**