vast improvements to create story, review story, draft story checklist validation, sm menu items and dev agent menu items fixed
This commit is contained in:
parent
0354d1ae45
commit
ed3603f7b2
|
|
@ -29,31 +29,6 @@ agent:
|
||||||
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml"
|
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml"
|
||||||
description: Generate or update sprint-status.yaml from epic files
|
description: Generate or update sprint-status.yaml from epic files
|
||||||
|
|
||||||
- trigger: create-story
|
|
||||||
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml"
|
|
||||||
description: Create a Draft Story with Context
|
|
||||||
|
|
||||||
- trigger: story-ready
|
|
||||||
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/story-ready/workflow.yaml"
|
|
||||||
description: Mark drafted story ready for development
|
|
||||||
|
|
||||||
- trigger: story-context
|
|
||||||
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/story-context/workflow.yaml"
|
|
||||||
description: Assemble dynamic Story Context (XML) from latest docs and code
|
|
||||||
|
|
||||||
- trigger: validate-story-context
|
|
||||||
validate-workflow: "{project-root}/bmad/bmm/workflows/4-implementation/story-context/workflow.yaml"
|
|
||||||
description: Validate latest Story Context XML against checklist
|
|
||||||
|
|
||||||
- trigger: retrospective
|
|
||||||
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml"
|
|
||||||
data: "{project-root}/bmad/_cfg/agent-manifest.csv"
|
|
||||||
description: Facilitate team retrospective after epic/sprint
|
|
||||||
|
|
||||||
- trigger: correct-course
|
|
||||||
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml"
|
|
||||||
description: Execute correct-course task
|
|
||||||
|
|
||||||
- trigger: epic-tech-context
|
- trigger: epic-tech-context
|
||||||
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml"
|
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml"
|
||||||
description: Use the PRD and Architecture to create a Tech-Spec for a specific epic
|
description: Use the PRD and Architecture to create a Tech-Spec for a specific epic
|
||||||
|
|
@ -61,3 +36,32 @@ agent:
|
||||||
- trigger: validate-epic-tech-context
|
- trigger: validate-epic-tech-context
|
||||||
validate-workflow: "{project-root}/bmad/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml"
|
validate-workflow: "{project-root}/bmad/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml"
|
||||||
description: Validate latest Tech Spec against checklist
|
description: Validate latest Tech Spec against checklist
|
||||||
|
|
||||||
|
- trigger: create-story
|
||||||
|
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml"
|
||||||
|
description: Create a Draft Story
|
||||||
|
|
||||||
|
- trigger: validate-create-story
|
||||||
|
validate-workflow: "{project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml"
|
||||||
|
description: Validate Story Draft with Independent Review
|
||||||
|
|
||||||
|
- trigger: story-context
|
||||||
|
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/story-context/workflow.yaml"
|
||||||
|
description: Assemble dynamic Story Context (XML) from latest docs and code and mark story ready for dev
|
||||||
|
|
||||||
|
- trigger: validate-story-context
|
||||||
|
validate-workflow: "{project-root}/bmad/bmm/workflows/4-implementation/story-context/workflow.yaml"
|
||||||
|
description: Validate latest Story Context XML against checklist
|
||||||
|
|
||||||
|
- trigger: story-ready-for-dev
|
||||||
|
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/story-ready/workflow.yaml"
|
||||||
|
description: Mark drafted story ready for dev without generating Story Context
|
||||||
|
|
||||||
|
- trigger: epic-retrospective
|
||||||
|
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml"
|
||||||
|
data: "{project-root}/bmad/_cfg/agent-manifest.csv"
|
||||||
|
description: Facilitate team retrospective after an epic is completed
|
||||||
|
|
||||||
|
- trigger: correct-course
|
||||||
|
workflow: "{project-root}/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml"
|
||||||
|
description: Execute correct-course task
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Senior Developer Review - Workflow Instructions
|
# Senior Developer Review - Workflow Instructions
|
||||||
|
|
||||||
```xml
|
````xml
|
||||||
<critical>The workflow execution engine is governed by: {project-root}/bmad/core/tasks/workflow.xml</critical>
|
<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>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>Communicate all responses in {communication_language} and language MUST be tailored to {user_skill_level}</critical>
|
||||||
|
|
@ -206,9 +206,24 @@ Your input:</ask>
|
||||||
8. **Security Notes**: Security findings if any
|
8. **Security Notes**: Security findings if any
|
||||||
9. **Best-Practices and References**: With links
|
9. **Best-Practices and References**: With links
|
||||||
10. **Action Items**:
|
10. **Action Items**:
|
||||||
- Imperative phrasing
|
- CRITICAL: ALL action items requiring code changes MUST have checkboxes for tracking
|
||||||
- Map to related ACs or files
|
- Format for actionable items: `- [ ] [Severity] Description (AC #X) [file: path:line]`
|
||||||
|
- Format for informational notes: `- Note: Description (no action required)`
|
||||||
|
- Imperative phrasing for action items
|
||||||
|
- Map to related ACs or files with specific line references
|
||||||
- Include suggested owners if clear
|
- Include suggested owners if clear
|
||||||
|
- Example format:
|
||||||
|
```
|
||||||
|
### Action Items
|
||||||
|
|
||||||
|
**Code Changes Required:**
|
||||||
|
- [ ] [High] Add input validation on login endpoint (AC #1) [file: src/routes/auth.js:23-45]
|
||||||
|
- [ ] [Med] Add unit test for invalid email format [file: tests/unit/auth.test.js]
|
||||||
|
|
||||||
|
**Advisory Notes:**
|
||||||
|
- Note: Consider adding rate limiting for production deployment
|
||||||
|
- Note: Document the JWT expiration policy in README
|
||||||
|
```
|
||||||
</action>
|
</action>
|
||||||
|
|
||||||
<critical>The AC validation checklist and task validation checklist MUST be included in the review - this is the evidence trail</critical>
|
<critical>The AC validation checklist and task validation checklist MUST be included in the review - this is the evidence trail</critical>
|
||||||
|
|
@ -257,7 +272,11 @@ Your input:</ask>
|
||||||
- Architectural Alignment
|
- Architectural Alignment
|
||||||
- Security Notes
|
- Security Notes
|
||||||
- Best-Practices and References (with links)
|
- Best-Practices and References (with links)
|
||||||
- Action Items (with severity and file references)
|
- Action Items:
|
||||||
|
* CRITICAL: Format with checkboxes for tracking resolution
|
||||||
|
* Code changes required: `- [ ] [Severity] Description [file: path:line]`
|
||||||
|
* Advisory notes: `- Note: Description (no action required)`
|
||||||
|
* Group by type: "Code Changes Required" and "Advisory Notes"
|
||||||
</action>
|
</action>
|
||||||
<action>Add a Change Log entry with date, version bump if applicable, and description: "Senior Developer Review notes appended".</action>
|
<action>Add a Change Log entry with date, version bump if applicable, and description: "Senior Developer Review notes appended".</action>
|
||||||
<action>If {{update_status_on_result}} is true: update Status to {{status_on_approve}} when approved; to {{status_on_changes_requested}} when changes requested; otherwise leave unchanged.</action>
|
<action>If {{update_status_on_result}} is true: update Status to {{status_on_approve}} when approved; to {{status_on_changes_requested}} when changes requested; otherwise leave unchanged.</action>
|
||||||
|
|
@ -369,4 +388,4 @@ Review was saved to story file, but sprint-status.yaml may be out of sync.
|
||||||
</step>
|
</step>
|
||||||
|
|
||||||
</workflow>
|
</workflow>
|
||||||
```
|
````
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,240 @@
|
||||||
---
|
# Create Story Quality Validation Checklist
|
||||||
title: 'Create Story Checklist'
|
|
||||||
validation-target: 'Newly generated story markdown file'
|
|
||||||
required-inputs:
|
|
||||||
- 'epics.md (preferred) or PRD'
|
|
||||||
optional-inputs:
|
|
||||||
- 'architecture document for architecture context'
|
|
||||||
validation-rules:
|
|
||||||
- 'Story structure matches sections: Status, Story, Acceptance Criteria, Tasks/Subtasks, Dev Notes, Change Log, Dev Agent Record'
|
|
||||||
- 'Dev Notes include Project Structure Notes and References subsections'
|
|
||||||
- 'All non-trivial technical notes include a source citation'
|
|
||||||
- 'Tasks include explicit testing subtasks based on testing strategy'
|
|
||||||
---
|
|
||||||
|
|
||||||
# Create Story Checklist
|
```xml
|
||||||
|
<critical>This validation runs in a FRESH CONTEXT by an independent validator agent</critical>
|
||||||
|
<critical>The validator audits story quality and offers to improve if issues are found</critical>
|
||||||
|
<critical>Load only the story file and necessary source documents - do NOT load workflow instructions</critical>
|
||||||
|
|
||||||
## Document Structure
|
<validation-checklist>
|
||||||
|
|
||||||
- [ ] Title includes story id and title
|
<expectations>
|
||||||
- [ ] Status set to Draft
|
**What create-story workflow should have accomplished:**
|
||||||
- [ ] Story section present with As a / I want / so that
|
|
||||||
- [ ] Acceptance Criteria is a numbered list
|
|
||||||
- [ ] Tasks/Subtasks present with checkboxes
|
|
||||||
- [ ] Dev Notes includes architecture/testing context
|
|
||||||
- [ ] Change Log table initialized
|
|
||||||
- [ ] Dev Agent Record sections present (Context Reference, Agent Model Used, Debug Log References, Completion Notes, File List)
|
|
||||||
|
|
||||||
## Content Quality
|
1. **Previous Story Continuity:** If a previous story exists (status: done/review/in-progress), current story should have "Learnings from Previous Story" subsection in Dev Notes that references: new files created, completion notes, architectural decisions, unresolved review items
|
||||||
|
2. **Source Document Coverage:** Story should cite tech spec (if exists), epics, PRD, and relevant architecture docs (architecture.md, testing-strategy.md, coding-standards.md, unified-project-structure.md)
|
||||||
|
3. **Requirements Traceability:** ACs sourced from tech spec (preferred) or epics, not invented
|
||||||
|
4. **Dev Notes Quality:** Specific guidance with citations, not generic advice
|
||||||
|
5. **Task-AC Mapping:** Every AC has tasks, every task references AC, testing subtasks present
|
||||||
|
6. **Structure:** Status="drafted", proper story statement, Dev Agent Record sections initialized
|
||||||
|
</expectations>
|
||||||
|
|
||||||
- [ ] Acceptance Criteria sourced from epics/PRD (or explicitly confirmed by user)
|
## Validation Steps
|
||||||
- [ ] Tasks reference AC numbers where applicable
|
|
||||||
- [ ] Dev Notes do not invent details; cite sources where possible
|
|
||||||
- [ ] File saved to stories directory from config (dev_story_location)
|
|
||||||
- [ ] If creating a new story number, epics.md explicitly enumerates this story under the target epic; otherwise generation HALTED with instruction to run PM/SM `*correct-course` (open `{project-root}/bmad/bmm/agents/pm.md` or `{project-root}/bmad/bmm/agents/sm.md` and execute `*correct-course`)
|
|
||||||
|
|
||||||
## Optional Post-Generation
|
### 1. Load Story and Extract Metadata
|
||||||
|
- [ ] Load story file: {{story_file_path}}
|
||||||
|
- [ ] Parse sections: Status, Story, ACs, Tasks, Dev Notes, Dev Agent Record, Change Log
|
||||||
|
- [ ] Extract: epic_num, story_num, story_key, story_title
|
||||||
|
- [ ] Initialize issue tracker (Critical/Major/Minor)
|
||||||
|
|
||||||
- [ ] Story Context generation run (if auto_run_context)
|
### 2. Previous Story Continuity Check
|
||||||
- [ ] Context Reference recorded in story
|
|
||||||
|
**Find previous story:**
|
||||||
|
- [ ] Load {output_folder}/sprint-status.yaml
|
||||||
|
- [ ] Find current {{story_key}} in development_status
|
||||||
|
- [ ] Identify story entry immediately above (previous story)
|
||||||
|
- [ ] Check previous story status
|
||||||
|
|
||||||
|
**If previous story status is done/review/in-progress:**
|
||||||
|
- [ ] Load previous story file: {story_dir}/{{previous_story_key}}.md
|
||||||
|
- [ ] Extract: Dev Agent Record (Completion Notes, File List with NEW/MODIFIED)
|
||||||
|
- [ ] Extract: Senior Developer Review section if present
|
||||||
|
- [ ] Count unchecked [ ] items in Review Action Items
|
||||||
|
- [ ] Count unchecked [ ] items in Review Follow-ups (AI)
|
||||||
|
|
||||||
|
**Validate current story captured continuity:**
|
||||||
|
- [ ] Check: "Learnings from Previous Story" subsection exists in Dev Notes
|
||||||
|
- If MISSING and previous story has content → **CRITICAL ISSUE**
|
||||||
|
- [ ] If subsection exists, verify it includes:
|
||||||
|
- [ ] References to NEW files from previous story → If missing → **MAJOR ISSUE**
|
||||||
|
- [ ] Mentions completion notes/warnings → If missing → **MAJOR ISSUE**
|
||||||
|
- [ ] Calls out unresolved review items (if any exist) → If missing → **CRITICAL ISSUE**
|
||||||
|
- [ ] Cites previous story: [Source: stories/{{previous_story_key}}.md]
|
||||||
|
|
||||||
|
**If previous story status is backlog/drafted:**
|
||||||
|
- [ ] No continuity expected (note this)
|
||||||
|
|
||||||
|
**If no previous story exists:**
|
||||||
|
- [ ] First story in epic, no continuity expected
|
||||||
|
|
||||||
|
### 3. Source Document Coverage Check
|
||||||
|
|
||||||
|
**Build available docs list:**
|
||||||
|
- [ ] Check exists: tech-spec-epic-{{epic_num}}*.md in {tech_spec_search_dir}
|
||||||
|
- [ ] Check exists: {output_folder}/epics.md
|
||||||
|
- [ ] Check exists: {output_folder}/PRD.md
|
||||||
|
- [ ] Check exists in {output_folder}/ or {project-root}/docs/:
|
||||||
|
- architecture.md, testing-strategy.md, coding-standards.md
|
||||||
|
- unified-project-structure.md, tech-stack.md
|
||||||
|
- backend-architecture.md, frontend-architecture.md, data-models.md
|
||||||
|
|
||||||
|
**Validate story references available docs:**
|
||||||
|
- [ ] Extract all [Source: ...] citations from story Dev Notes
|
||||||
|
- [ ] Tech spec exists but not cited → **CRITICAL ISSUE**
|
||||||
|
- [ ] Epics exists but not cited → **CRITICAL ISSUE**
|
||||||
|
- [ ] Architecture.md exists → Read for relevance → If relevant but not cited → **MAJOR ISSUE**
|
||||||
|
- [ ] Testing-strategy.md exists → Check Dev Notes mentions testing standards → If not → **MAJOR ISSUE**
|
||||||
|
- [ ] Testing-strategy.md exists → Check Tasks have testing subtasks → If not → **MAJOR ISSUE**
|
||||||
|
- [ ] Coding-standards.md exists → Check Dev Notes references standards → If not → **MAJOR ISSUE**
|
||||||
|
- [ ] Unified-project-structure.md exists → Check Dev Notes has "Project Structure Notes" subsection → If not → **MAJOR ISSUE**
|
||||||
|
|
||||||
|
**Validate citation quality:**
|
||||||
|
- [ ] Verify cited file paths are correct and files exist → Bad citations → **MAJOR ISSUE**
|
||||||
|
- [ ] Check citations include section names, not just file paths → Vague citations → **MINOR ISSUE**
|
||||||
|
|
||||||
|
### 4. Acceptance Criteria Quality Check
|
||||||
|
|
||||||
|
- [ ] Extract Acceptance Criteria from story
|
||||||
|
- [ ] Count ACs: {{ac_count}} (if 0 → **CRITICAL ISSUE** and halt)
|
||||||
|
- [ ] Check story indicates AC source (tech spec, epics, PRD)
|
||||||
|
|
||||||
|
**If tech spec exists:**
|
||||||
|
- [ ] Load tech spec
|
||||||
|
- [ ] Search for this story number
|
||||||
|
- [ ] Extract tech spec ACs for this story
|
||||||
|
- [ ] Compare story ACs vs tech spec ACs → If mismatch → **MAJOR ISSUE**
|
||||||
|
|
||||||
|
**If no tech spec but epics.md exists:**
|
||||||
|
- [ ] Load epics.md
|
||||||
|
- [ ] Search for Epic {{epic_num}}, Story {{story_num}}
|
||||||
|
- [ ] Story not found in epics → **CRITICAL ISSUE** (should have halted)
|
||||||
|
- [ ] Extract epics ACs
|
||||||
|
- [ ] Compare story ACs vs epics ACs → If mismatch without justification → **MAJOR ISSUE**
|
||||||
|
|
||||||
|
**Validate AC quality:**
|
||||||
|
- [ ] Each AC is testable (measurable outcome)
|
||||||
|
- [ ] Each AC is specific (not vague)
|
||||||
|
- [ ] Each AC is atomic (single concern)
|
||||||
|
- [ ] Vague ACs found → **MINOR ISSUE**
|
||||||
|
|
||||||
|
### 5. Task-AC Mapping Check
|
||||||
|
|
||||||
|
- [ ] Extract Tasks/Subtasks from story
|
||||||
|
- [ ] For each AC: Search tasks for "(AC: #{{ac_num}})" reference
|
||||||
|
- [ ] AC has no tasks → **MAJOR ISSUE**
|
||||||
|
- [ ] For each task: Check if references an AC number
|
||||||
|
- [ ] Tasks without AC refs (and not testing/setup) → **MINOR ISSUE**
|
||||||
|
- [ ] Count tasks with testing subtasks
|
||||||
|
- [ ] Testing subtasks < ac_count → **MAJOR ISSUE**
|
||||||
|
|
||||||
|
### 6. Dev Notes Quality Check
|
||||||
|
|
||||||
|
**Check required subsections exist:**
|
||||||
|
- [ ] Architecture patterns and constraints
|
||||||
|
- [ ] References (with citations)
|
||||||
|
- [ ] Project Structure Notes (if unified-project-structure.md exists)
|
||||||
|
- [ ] Learnings from Previous Story (if previous story has content)
|
||||||
|
- [ ] Missing required subsections → **MAJOR ISSUE**
|
||||||
|
|
||||||
|
**Validate content quality:**
|
||||||
|
- [ ] Architecture guidance is specific (not generic "follow architecture docs") → If generic → **MAJOR ISSUE**
|
||||||
|
- [ ] Count citations in References subsection
|
||||||
|
- [ ] No citations → **MAJOR ISSUE**
|
||||||
|
- [ ] < 3 citations and multiple arch docs exist → **MINOR ISSUE**
|
||||||
|
- [ ] Scan for suspicious specifics without citations:
|
||||||
|
- API endpoints, schema details, business rules, tech choices
|
||||||
|
- [ ] Likely invented details found → **MAJOR ISSUE**
|
||||||
|
|
||||||
|
### 7. Story Structure Check
|
||||||
|
|
||||||
|
- [ ] Status = "drafted" → If not → **MAJOR ISSUE**
|
||||||
|
- [ ] Story section has "As a / I want / so that" format → If malformed → **MAJOR ISSUE**
|
||||||
|
- [ ] Dev Agent Record has required sections:
|
||||||
|
- Context Reference, Agent Model Used, Debug Log References, Completion Notes List, File List
|
||||||
|
- [ ] Missing sections → **MAJOR ISSUE**
|
||||||
|
- [ ] Change Log initialized → If missing → **MINOR ISSUE**
|
||||||
|
- [ ] File in correct location: {story_dir}/{{story_key}}.md → If not → **MAJOR ISSUE**
|
||||||
|
|
||||||
|
### 8. Unresolved Review Items Alert
|
||||||
|
|
||||||
|
**CRITICAL CHECK for incomplete review items from previous story:**
|
||||||
|
|
||||||
|
- [ ] If previous story has "Senior Developer Review (AI)" section:
|
||||||
|
- [ ] Count unchecked [ ] items in "Action Items"
|
||||||
|
- [ ] Count unchecked [ ] items in "Review Follow-ups (AI)"
|
||||||
|
- [ ] If unchecked items > 0:
|
||||||
|
- [ ] Check current story "Learnings from Previous Story" mentions these
|
||||||
|
- [ ] If NOT mentioned → **CRITICAL ISSUE** with details:
|
||||||
|
- List all unchecked items with severity
|
||||||
|
- Note: "These may represent epic-wide concerns"
|
||||||
|
- Required: Add to Learnings section with note about pending items
|
||||||
|
|
||||||
|
## Validation Report Generation
|
||||||
|
|
||||||
|
**Calculate severity counts:**
|
||||||
|
- Critical: {{critical_count}}
|
||||||
|
- Major: {{major_count}}
|
||||||
|
- Minor: {{minor_count}}
|
||||||
|
|
||||||
|
**Determine outcome:**
|
||||||
|
- Critical > 0 OR Major > 3 → **FAIL**
|
||||||
|
- Major ≤ 3 and Critical = 0 → **PASS with issues**
|
||||||
|
- All = 0 → **PASS**
|
||||||
|
|
||||||
|
**Generate report:**
|
||||||
|
```
|
||||||
|
|
||||||
|
# Story Quality Validation Report
|
||||||
|
|
||||||
|
Story: {{story_key}} - {{story_title}}
|
||||||
|
Outcome: {{outcome}} (Critical: {{critical_count}}, Major: {{major_count}}, Minor: {{minor_count}})
|
||||||
|
|
||||||
|
## Critical Issues (Blockers)
|
||||||
|
|
||||||
|
{{list_each_with_description_and_evidence}}
|
||||||
|
|
||||||
|
## Major Issues (Should Fix)
|
||||||
|
|
||||||
|
{{list_each_with_description_and_evidence}}
|
||||||
|
|
||||||
|
## Minor Issues (Nice to Have)
|
||||||
|
|
||||||
|
{{list_each_with_description}}
|
||||||
|
|
||||||
|
## Successes
|
||||||
|
|
||||||
|
{{list_what_was_done_well}}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## User Alert and Remediation
|
||||||
|
|
||||||
|
**If FAIL:**
|
||||||
|
- Show issues summary and top 3 issues
|
||||||
|
- Offer options: (1) Auto-improve story, (2) Show detailed findings, (3) Fix manually, (4) Accept as-is
|
||||||
|
- If option 1: Re-load source docs, regenerate affected sections, re-run validation
|
||||||
|
|
||||||
|
**If PASS with issues:**
|
||||||
|
- Show issues list
|
||||||
|
- Ask: "Improve story? (y/n)"
|
||||||
|
- If yes: Enhance story with missing items
|
||||||
|
|
||||||
|
**If PASS:**
|
||||||
|
- Confirm: All quality standards met
|
||||||
|
- List successes
|
||||||
|
- Ready for story-context generation
|
||||||
|
|
||||||
|
</validation-checklist>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
**Validation runs in fresh context and checks:**
|
||||||
|
|
||||||
|
1. ✅ Previous story continuity captured (files, notes, **unresolved review items**)
|
||||||
|
2. ✅ All relevant source docs discovered and cited
|
||||||
|
3. ✅ ACs match tech spec/epics exactly
|
||||||
|
4. ✅ Tasks cover all ACs with testing
|
||||||
|
5. ✅ Dev Notes have specific guidance with citations (not generic)
|
||||||
|
6. ✅ Structure and metadata complete
|
||||||
|
|
||||||
|
**Severity Levels:**
|
||||||
|
|
||||||
|
- **CRITICAL** = Missing previous story reference, missing tech spec cite, unresolved review items not called out, story not in epics
|
||||||
|
- **MAJOR** = Missing arch docs, missing files from previous story, vague Dev Notes, ACs don't match source, no testing subtasks
|
||||||
|
- **MINOR** = Vague citations, orphan tasks, missing Change Log
|
||||||
|
|
||||||
|
**Outcome Triggers:**
|
||||||
|
|
||||||
|
- **FAIL** = Any critical OR >3 major issues
|
||||||
|
- **PASS with issues** = ≤3 major issues, no critical
|
||||||
|
- **PASS** = All checks passed
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Create Story - Workflow Instructions (Spec-compliant, non-interactive by default)
|
# Create Story - Workflow Instructions (Spec-compliant, non-interactive by default)
|
||||||
|
|
||||||
```xml
|
````xml
|
||||||
<critical>The workflow execution engine is governed by: {project_root}/bmad/core/tasks/workflow.xml</critical>
|
<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>You MUST have already loaded and processed: {installed_path}/workflow.yaml</critical>
|
||||||
<critical>Generate all documents in {document_output_language}</critical>
|
<critical>Generate all documents in {document_output_language}</critical>
|
||||||
|
|
@ -17,6 +17,74 @@
|
||||||
</step>
|
</step>
|
||||||
|
|
||||||
<step n="2" goal="Discover and load source documents">
|
<step n="2" goal="Discover and load source documents">
|
||||||
|
<critical>PREVIOUS STORY CONTINUITY: Essential for maintaining context and learning from prior development</critical>
|
||||||
|
|
||||||
|
<action>Find the previous completed story to extract dev agent learnings and review findings:
|
||||||
|
1. Load {{output_folder}}/sprint-status.yaml COMPLETELY
|
||||||
|
2. Find current {{story_key}} in development_status section
|
||||||
|
3. Identify the story entry IMMEDIATELY ABOVE current story (previous row in file order)
|
||||||
|
4. If previous story exists:
|
||||||
|
- Extract {{previous_story_key}}
|
||||||
|
- Check previous story status (done, in-progress, review, etc.)
|
||||||
|
- If status is "done", "review", or "in-progress" (has some completion):
|
||||||
|
* Construct path: {{story_dir}}/{{previous_story_key}}.md
|
||||||
|
* Load the COMPLETE previous story file
|
||||||
|
* Parse ALL sections comprehensively:
|
||||||
|
|
||||||
|
A) Dev Agent Record → Completion Notes List:
|
||||||
|
- New patterns/services created (to reuse, not recreate)
|
||||||
|
- Architectural deviations or decisions made
|
||||||
|
- Technical debt deferred to future stories
|
||||||
|
- Warnings or recommendations for next story
|
||||||
|
- Interfaces/methods created for reuse
|
||||||
|
|
||||||
|
B) Dev Agent Record → Debug Log References:
|
||||||
|
- Issues encountered and solutions
|
||||||
|
- Gotchas or unexpected challenges
|
||||||
|
- Workarounds applied
|
||||||
|
|
||||||
|
C) Dev Agent Record → File List:
|
||||||
|
- Files created (NEW) - understand new capabilities
|
||||||
|
- Files modified (MODIFIED) - track evolving components
|
||||||
|
- Files deleted (DELETED) - removed functionality
|
||||||
|
|
||||||
|
D) Dev Notes:
|
||||||
|
- Any "future story" notes or TODOs
|
||||||
|
- Patterns established
|
||||||
|
- Constraints discovered
|
||||||
|
|
||||||
|
E) Senior Developer Review (AI) section (if present):
|
||||||
|
- Review outcome (Approve/Changes Requested/Blocked)
|
||||||
|
- Unresolved action items (unchecked [ ] items)
|
||||||
|
- Key findings that might affect this story
|
||||||
|
- Architectural concerns raised
|
||||||
|
|
||||||
|
F) Senior Developer Review → Action Items (if present):
|
||||||
|
- Check for unchecked [ ] items still pending
|
||||||
|
- Note any systemic issues that apply to multiple stories
|
||||||
|
|
||||||
|
G) Review Follow-ups (AI) tasks (if present):
|
||||||
|
- Check for unchecked [ ] review tasks still pending
|
||||||
|
- Determine if they're epic-wide concerns
|
||||||
|
|
||||||
|
H) Story Status:
|
||||||
|
- If "review" or "in-progress" - incomplete, note what's pending
|
||||||
|
- If "done" - confirmed complete
|
||||||
|
* Store ALL findings as {{previous_story_learnings}} with structure:
|
||||||
|
- new_files: [list]
|
||||||
|
- modified_files: [list]
|
||||||
|
- new_services: [list with descriptions]
|
||||||
|
- architectural_decisions: [list]
|
||||||
|
- technical_debt: [list]
|
||||||
|
- warnings_for_next: [list]
|
||||||
|
- review_findings: [list if review exists]
|
||||||
|
- pending_items: [list of unchecked action items]
|
||||||
|
- If status is "backlog" or "drafted":
|
||||||
|
* Set {{previous_story_learnings}} = "Previous story not yet implemented"
|
||||||
|
5. If no previous story exists (first story in epic):
|
||||||
|
- Set {{previous_story_learnings}} = "First story in epic - no predecessor context"
|
||||||
|
</action>
|
||||||
|
|
||||||
<action>If {{tech_spec_file}} empty: derive from {{tech_spec_glob_template}} with {{epic_num}} and search {{tech_spec_search_dir}} recursively. If multiple, pick most recent by modified time.</action>
|
<action>If {{tech_spec_file}} empty: derive from {{tech_spec_glob_template}} with {{epic_num}} and search {{tech_spec_search_dir}} recursively. If multiple, pick most recent by modified time.</action>
|
||||||
<action>Build a prioritized document set for this epic:
|
<action>Build a prioritized document set for this epic:
|
||||||
1) tech_spec_file (epic-scoped)
|
1) tech_spec_file (epic-scoped)
|
||||||
|
|
@ -82,8 +150,20 @@ Will update existing story file rather than creating new one.
|
||||||
</step>
|
</step>
|
||||||
|
|
||||||
<step n="5" goal="Project structure alignment and lessons learned">
|
<step n="5" goal="Project structure alignment and lessons learned">
|
||||||
<action>If a previous story exists, scan its "Dev Agent Record" for completion notes and known deviations; summarize any carry-overs relevant to this story.</action>
|
<action>Review {{previous_story_learnings}} and extract actionable intelligence:
|
||||||
|
- New patterns/services created → Note for reuse (DO NOT recreate)
|
||||||
|
- Architectural deviations → Understand and maintain consistency
|
||||||
|
- Technical debt items → Assess if this story should address them
|
||||||
|
- Files modified → Understand current state of evolving components
|
||||||
|
- Warnings/recommendations → Apply to this story's approach
|
||||||
|
- Review findings → Learn from issues found in previous story
|
||||||
|
- Pending action items → Determine if epic-wide concerns affect this story
|
||||||
|
</action>
|
||||||
|
|
||||||
<action>If unified-project-structure.md present: align expected file paths, module names, and component locations; note any potential conflicts.</action>
|
<action>If unified-project-structure.md present: align expected file paths, module names, and component locations; note any potential conflicts.</action>
|
||||||
|
|
||||||
|
<action>Cross-reference {{previous_story_learnings}}.new_files with project structure to understand where new capabilities are located.</action>
|
||||||
|
|
||||||
<template-output file="{default_output_file}">structure_alignment_summary</template-output>
|
<template-output file="{default_output_file}">structure_alignment_summary</template-output>
|
||||||
</step>
|
</step>
|
||||||
|
|
||||||
|
|
@ -101,6 +181,32 @@ Will update existing story file rather than creating new one.
|
||||||
<template-output file="{default_output_file}">story_header</template-output>
|
<template-output file="{default_output_file}">story_header</template-output>
|
||||||
<template-output file="{default_output_file}">story_body</template-output>
|
<template-output file="{default_output_file}">story_body</template-output>
|
||||||
<template-output file="{default_output_file}">dev_notes_with_citations</template-output>
|
<template-output file="{default_output_file}">dev_notes_with_citations</template-output>
|
||||||
|
|
||||||
|
<action>If {{previous_story_learnings}} contains actionable items (not "First story" or "not yet implemented"):
|
||||||
|
- Add "Learnings from Previous Story" subsection to Dev Notes
|
||||||
|
- Include relevant completion notes, new files/patterns, deviations
|
||||||
|
- Cite previous story file as reference [Source: stories/{{previous_story_key}}.md]
|
||||||
|
- Highlight interfaces/services to REUSE (not recreate)
|
||||||
|
- Note any technical debt to address in this story
|
||||||
|
- List pending review items that affect this story (if any)
|
||||||
|
- Reference specific files created: "Use {{file_path}} for {{purpose}}"
|
||||||
|
- Format example:
|
||||||
|
```
|
||||||
|
### Learnings from Previous Story
|
||||||
|
|
||||||
|
**From Story {{previous_story_key}} (Status: {{previous_status}})**
|
||||||
|
|
||||||
|
- **New Service Created**: `AuthService` base class available at `src/services/AuthService.js` - use `AuthService.register()` method
|
||||||
|
- **Architectural Change**: Switched from session-based to JWT authentication
|
||||||
|
- **Schema Changes**: User model now includes `passwordHash` field, migration applied
|
||||||
|
- **Technical Debt**: Email verification skipped, should be included in this or subsequent story
|
||||||
|
- **Testing Setup**: Auth test suite initialized at `tests/integration/auth.test.js` - follow patterns established there
|
||||||
|
- **Pending Review Items**: Rate limiting mentioned in review - consider for this story
|
||||||
|
|
||||||
|
[Source: stories/{{previous_story_key}}.md#Dev-Agent-Record]
|
||||||
|
```
|
||||||
|
</action>
|
||||||
|
|
||||||
<template-output file="{default_output_file}">change_log</template-output>
|
<template-output file="{default_output_file}">change_log</template-output>
|
||||||
</step>
|
</step>
|
||||||
|
|
||||||
|
|
@ -120,11 +226,10 @@ Will update existing story file rather than creating new one.
|
||||||
<output>⚠️ Could not update story status: {{story_key}} not found in sprint-status.yaml
|
<output>⚠️ Could not update story status: {{story_key}} not found in sprint-status.yaml
|
||||||
|
|
||||||
Story file was created successfully, but sprint-status.yaml was not updated.
|
Story file was created successfully, but sprint-status.yaml was not updated.
|
||||||
You may need to run sprint-planning to refresh tracking.
|
You may need to run sprint-planning to refresh tracking, or manually set the story row status to `drafted`.
|
||||||
</output>
|
</output>
|
||||||
</check>
|
</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}!**
|
||||||
|
|
||||||
|
|
@ -144,4 +249,4 @@ You may need to run sprint-planning to refresh tracking.
|
||||||
</step>
|
</step>
|
||||||
|
|
||||||
</workflow>
|
</workflow>
|
||||||
```
|
````
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@ variables:
|
||||||
story_title: "" # Will be elicited if not derivable
|
story_title: "" # Will be elicited if not derivable
|
||||||
epic_num: 1
|
epic_num: 1
|
||||||
story_num: 1
|
story_num: 1
|
||||||
auto_run_context: true # Optionally run story-context after creation
|
|
||||||
non_interactive: true # Generate without elicitation; avoid interactive prompts
|
non_interactive: true # Generate without elicitation; avoid interactive prompts
|
||||||
|
|
||||||
# Output configuration
|
# Output configuration
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,47 @@ Proceeding with story file only. For better context, consider running `story-con
|
||||||
<action if="incomplete task or subtask 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="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}}
|
||||||
|
Context file: {{context_available}}
|
||||||
|
First incomplete task: {{first_task_description}}
|
||||||
|
</output>
|
||||||
|
</check>
|
||||||
|
</step>
|
||||||
|
|
||||||
|
<step n="1.6" goal="Mark story in-progress" tag="sprint-status">
|
||||||
<action>Load the FULL file: {{output_folder}}/sprint-status.yaml</action>
|
<action>Load the FULL file: {{output_folder}}/sprint-status.yaml</action>
|
||||||
<action>Read all development_status entries to find {{story_key}}</action>
|
<action>Read all development_status entries to find {{story_key}}</action>
|
||||||
<action>Get current status value for development_status[{{story_key}}]</action>
|
<action>Get current status value for development_status[{{story_key}}]</action>
|
||||||
|
|
@ -126,10 +166,34 @@ Expected ready-for-dev or in-progress. Continuing anyway...
|
||||||
<action if="new tests fail">STOP and fix before continuing</action>
|
<action if="new tests fail">STOP and fix before continuing</action>
|
||||||
</step>
|
</step>
|
||||||
|
|
||||||
<step n="5" goal="Mark task complete and update story">
|
<step n="5" goal="Mark task complete, track review resolutions, and update story">
|
||||||
|
<critical>If task is a review follow-up, must mark BOTH the task checkbox AND the corresponding action item in the review section</critical>
|
||||||
|
|
||||||
|
<action>Check if completed task has [AI-Review] prefix (indicates review follow-up task)</action>
|
||||||
|
|
||||||
|
<check if="task is review follow-up">
|
||||||
|
<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>
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
|
<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>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="2">Next task</goto></action>
|
<action if="more tasks remain"><goto step="2">Next task</goto></action>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue