From cfafc89cf6c82de7cb539012a85ef1814db4ec88 Mon Sep 17 00:00:00 2001 From: Dov Benyomin Sohacheski Date: Thu, 18 Jun 2026 06:34:20 +0300 Subject: [PATCH] feat(skills): track retrospective action items in sprint-status (#2465) Retrospective Step 12 appends agreed action items to a new action_items section in sprint-status.yaml and updates the previous epic's entries from the Step 4 follow-through. Sprint-status parses the section, validates its statuses, and surfaces open items in the summary and data mode. Sprint-planning preserves the section when regenerating the file. --- .../bmad-retrospective/SKILL.md | 15 +++++++++++++ .../bmad-sprint-planning/SKILL.md | 21 ++++++++++++++++++- .../bmad-sprint-planning/checklist.md | 3 ++- .../sprint-status-template.yaml | 13 ++++++++++++ .../bmad-sprint-status/SKILL.md | 13 ++++++++++++ 5 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md b/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md index 07aec498a..46998b6b2 100644 --- a/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md +++ b/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md @@ -350,6 +350,7 @@ Amelia (Developer): "I found our retrospectives from Epic {{prev_epic_num}}. Let **Action Item Follow-Through:** - For each action item from Epic {{prev_epic_num}} retro, check if it was completed + - Cross-check the action_items section in {sprint_status_file} (if present) for Epic {{prev_epic_num}} entries and their current status - Look for evidence in current epic's story records - Mark each action item: ✅ Completed, ⏳ In Progress, ❌ Not Addressed @@ -1403,6 +1404,19 @@ Amelia (Developer): "See you all when prep work is done. Meeting adjourned!" Find development_status key "epic-{{epic_number}}-retrospective" Verify current status (typically "optional" or "pending") Update development_status["epic-{{epic_number}}-retrospective"] = "done" +Append each Epic {{epic_number}} action item to the action_items section, creating the section after development_status if missing. One entry per item: + +```yaml +action_items: + - epic: {{epic_number}} + action: "{{action_description}}" + owner: "{{owner}}" + status: open +``` + +Quote action and owner values so punctuation (e.g., "#") cannot break YAML parsing + +Update Epic {{prev_epic_num}} action_items entries based on Step 4 follow-through: ✅ Completed → done, ⏳ In Progress → in-progress, ❌ Not Addressed → keep existing status (do not modify) Update last_updated field to current date Save file, preserving ALL comments and structure including STATUS DEFINITIONS @@ -1412,6 +1426,7 @@ Amelia (Developer): "See you all when prep work is done. Meeting adjourned!" Retrospective key: epic-{{epic_number}}-retrospective Status: {{previous_status}} → done +Action items recorded: {{action_count}} diff --git a/src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md b/src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md index dd7bfa55b..c56f9091b 100644 --- a/src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md +++ b/src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md @@ -151,6 +151,7 @@ development_status: - If existing `{status_file}` exists and has more advanced status, preserve it - Never downgrade status (e.g., don't change `done` to `ready-for-dev`) +- If existing `{status_file}` has an `action_items` section, carry it over unchanged **Status Flow Reference:** @@ -194,12 +195,18 @@ development_status: # - optional: Can be completed but not required # - done: Retrospective has been completed # +# Action Item Status: +# - open: Committed during a retrospective, not yet addressed +# - in-progress: Actively being worked on +# - done: Completed +# # WORKFLOW NOTES: # =============== # - Epic transitions to 'in-progress' automatically when first story is created # - Stories can be worked in parallel if team capacity allows # - Developer typically creates next story after previous one is 'done' to incorporate learnings # - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended) +# - Retrospective appends its action items to action_items; sprint-status surfaces open ones generated: { date } last_updated: { date } @@ -215,6 +222,7 @@ development_status: Write the complete sprint status YAML to {status_file} CRITICAL: Metadata appears TWICE - once as comments (#) for documentation, once as YAML key:value fields for parsing Ensure all items are ordered: epic, its stories, its retrospective, next epic... +If the existing file had an action_items section, write it back unchanged after development_status @@ -223,7 +231,8 @@ development_status: - [ ] Every epic in epic files appears in {status_file} - [ ] Every story in epic files appears in {status_file} - [ ] Every epic has a corresponding retrospective entry -- [ ] No items in {status_file} that don't exist in epic files +- [ ] No development_status items in {status_file} that don't exist in epic files +- [ ] action_items section (if it existed) carried over unchanged - [ ] All status values are legal (match state machine definitions) - [ ] File is valid YAML syntax @@ -291,6 +300,16 @@ optional ↔ done - **optional**: Ready to be conducted but not required - **done**: Finished +**Action Item Status:** + +``` +open → in-progress → done +``` + +- **open**: Committed during a retrospective, not yet addressed +- **in-progress**: Actively being worked on +- **done**: Completed + ### Guidelines 1. **Epic Activation**: Mark epic as `in-progress` when starting work on its first story diff --git a/src/bmm-skills/4-implementation/bmad-sprint-planning/checklist.md b/src/bmm-skills/4-implementation/bmad-sprint-planning/checklist.md index 7c20b1f37..2ec5045bc 100644 --- a/src/bmm-skills/4-implementation/bmad-sprint-planning/checklist.md +++ b/src/bmm-skills/4-implementation/bmad-sprint-planning/checklist.md @@ -7,7 +7,8 @@ - [ ] Every epic found in epic\*.md files appears in sprint-status.yaml - [ ] Every story found in epic\*.md files appears in sprint-status.yaml - [ ] Every epic has a corresponding retrospective entry -- [ ] No items in sprint-status.yaml that don't exist in epic files +- [ ] No development_status items in sprint-status.yaml that don't exist in epic files +- [ ] action_items section (if it existed) carried over unchanged ### Parsing Verification diff --git a/src/bmm-skills/4-implementation/bmad-sprint-planning/sprint-status-template.yaml b/src/bmm-skills/4-implementation/bmad-sprint-planning/sprint-status-template.yaml index d454f930c..8b91ff748 100644 --- a/src/bmm-skills/4-implementation/bmad-sprint-planning/sprint-status-template.yaml +++ b/src/bmm-skills/4-implementation/bmad-sprint-planning/sprint-status-template.yaml @@ -26,11 +26,17 @@ # - optional: Can be completed but not required # - done: Retrospective has been completed # +# Action Item Status: +# - open: Committed during a retrospective, not yet addressed +# - in-progress: Actively being worked on +# - done: Completed +# # WORKFLOW NOTES: # =============== # - Mark epic as 'in-progress' when starting work on its first story # - Developer typically creates next story ONLY after previous one is 'done' to incorporate learnings # - Dev moves story to 'review', then Dev runs code-review (fresh context, ideally different LLM) +# - Retrospective appends its action items to action_items; sprint-status surfaces open ones # EXAMPLE STRUCTURE (your actual epics/stories will replace these): @@ -54,3 +60,10 @@ development_status: 2-2-chat-interface: backlog 2-3-llm-integration: backlog epic-2-retrospective: optional + +# Action items committed during retrospectives (section created by the retrospective workflow) +action_items: + - epic: 1 + action: "Add error-handling review to the code review checklist" + owner: "Charlie" + status: open diff --git a/src/bmm-skills/4-implementation/bmad-sprint-status/SKILL.md b/src/bmm-skills/4-implementation/bmad-sprint-status/SKILL.md index cad4f0df0..0e060a684 100644 --- a/src/bmm-skills/4-implementation/bmad-sprint-status/SKILL.md +++ b/src/bmm-skills/4-implementation/bmad-sprint-status/SKILL.md @@ -112,12 +112,14 @@ Run `/bmad:bmm:workflows:sprint-planning` to generate it, then rerun sprint-stat Map legacy epic status "contexted" → "in-progress" Count epic statuses: backlog, in-progress, done Count retrospective statuses: optional, done + Parse action_items list if present. Set open_action_items = entries with status "open" or "in-progress" Validate all statuses against known values: - Valid story statuses: backlog, ready-for-dev, in-progress, review, done, drafted (legacy) - Valid epic statuses: backlog, in-progress, done, contexted (legacy) - Valid retrospective statuses: optional, done +- Valid action item statuses: open, in-progress, done @@ -132,6 +134,7 @@ Run `/bmad:bmm:workflows:sprint-planning` to generate it, then rerun sprint-stat - Stories: backlog, ready-for-dev, in-progress, review, done - Epics: backlog, in-progress, done - Retrospectives: optional, done +- Action items: open, in-progress, done How should these be corrected? {{#each invalid_entries}} @@ -181,6 +184,14 @@ Enter corrections (e.g., "1=in-progress, 2=backlog") or "skip" to continue witho **Next Recommendation:** /bmad:bmm:workflows:{{next_workflow_id}} ({{next_story_id}}) +{{#if open_action_items}} +**Open Action Items:** +{{#each open_action_items}} + +- {{action}} — {{status}} (epic {{epic}}, owner: {{owner}}) + {{/each}} + {{/if}} + {{#if risks}} **Risks:** {{#each risks}} @@ -243,6 +254,7 @@ If the command targets a story, set `story_key={{next_story_id}}` when prompted. epic_backlog = {{epic_backlog}} epic_in_progress = {{epic_in_progress}} epic_done = {{epic_done}} + open_action_items = {{open_action_items}} risks = {{risks}} Return to caller @@ -283,6 +295,7 @@ If the command targets a story, set `story_key={{next_story_id}}` when prompted. - Stories: backlog, ready-for-dev, in-progress, review, done (legacy: drafted) - Epics: backlog, in-progress, done (legacy: contexted) - Retrospectives: optional, done +- Action items (if present): open, in-progress, done is_valid = false error = "Invalid status values: {{invalid_entries}}"