From beeccbc29c2f0e2385347d6528742cf85c085220 Mon Sep 17 00:00:00 2001 From: DJ Date: Sat, 4 Apr 2026 00:26:16 -0700 Subject: [PATCH] fix: address review feedback on deferred-work read-back workflows - Align parsing to actual bmad-code-review output format (## headings with date) - Make Category optional with heuristic keyword-based derivation - Replace undefined {{item_title}} with {{description}} in subtask template - Add {{matched_count}} computation before it is referenced - Guard against missing/empty deferred-work.md (initialize counts to 0) - Add deferred_work_file to create-story Input Files table Co-Authored-By: Claude Opus 4.6 (1M context) --- .../bmad-create-story/workflow.md | 22 ++++++++++++++----- .../bmad-retrospective/workflow.md | 6 ++--- .../bmad-sprint-status/workflow.md | 19 +++++++++++----- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/bmm-skills/4-implementation/bmad-create-story/workflow.md b/src/bmm-skills/4-implementation/bmad-create-story/workflow.md index 3d0b3ba36..93516d97e 100644 --- a/src/bmm-skills/4-implementation/bmad-create-story/workflow.md +++ b/src/bmm-skills/4-implementation/bmad-create-story/workflow.md @@ -45,6 +45,7 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: | architecture | Architecture (fallback - epics file should have relevant sections) | whole: `{planning_artifacts}/*architecture*.md`, sharded: `{planning_artifacts}/*architecture*/*.md` | SELECTIVE_LOAD | | ux | UX design (fallback - epics file should have relevant sections) | whole: `{planning_artifacts}/*ux*.md`, sharded: `{planning_artifacts}/*ux*/*.md` | SELECTIVE_LOAD | | epics | Enhanced epics+stories file with BDD and source hints | whole: `{planning_artifacts}/*epic*.md`, sharded: `{planning_artifacts}/*epic*/*.md` | SELECTIVE_LOAD | +| deferred_work | Deferred items from code reviews (optional) | `{deferred_work_file}` | FULL_LOAD (optional) | --- @@ -236,11 +237,21 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: Load {deferred_work_file} completely - Parse all deferred items, extracting for each: + Parse all deferred items. The file uses level-2 headings produced by bmad-code-review: + `## Deferred from: code review of story-X.Y (YYYY-MM-DD)` + Each heading is followed by bullet items (one per deferred finding). + + For each bullet item extract: - File paths mentioned (e.g., [src/foo.ts:42]) - - Category (bug, security, tech-debt, style, etc.) - - Originating review (e.g., "Deferred from: code review of story-2.3") - - Description text + - Originating review: the heading text above the bullet (e.g., "code review of story-2.3 (2026-03-18)") + - Description text: the bullet content + - Category: if the producer included an explicit category, use it; otherwise derive heuristically from keywords in the description: + - "security" / "auth" / "injection" / "XSS" / "CSRF" → security + - "bug" / "crash" / "error" / "null" / "undefined" / "NaN" → bug + - "performance" / "slow" / "N+1" / "cache" → performance + - "style" / "lint" / "formatting" / "naming" → style + - otherwise → tech-debt + - Set `inferred_category = true` when the category was derived heuristically From epics content and architecture analysis, build a list of files this story will likely touch: @@ -257,6 +268,7 @@ Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: Store {{matched_deferred_items}} for inclusion in the story file + Set {{matched_count}} = number of items in {{matched_deferred_items}} Classify matches by priority: - HIGH: security fixes, bugs in files this story will modify - MEDIUM: tech-debt in the same module, performance issues in touched code @@ -376,7 +388,7 @@ The following items were deferred from previous code reviews and overlap with fi In the Tasks/Subtasks section, add corresponding subtasks for HIGH-priority deferred items: - - [ ] [Deferred] {{item_title}} [{{file_ref}}] (from previous review) + - [ ] [Deferred] {{description}} [{{file_ref}}] (from previous review) diff --git a/src/bmm-skills/4-implementation/bmad-retrospective/workflow.md b/src/bmm-skills/4-implementation/bmad-retrospective/workflow.md index 417ec2288..cab9a8d3a 100644 --- a/src/bmm-skills/4-implementation/bmad-retrospective/workflow.md +++ b/src/bmm-skills/4-implementation/bmad-retrospective/workflow.md @@ -256,12 +256,12 @@ Charlie (Senior Dev): "Good idea - those dev notes always have gold in them." Parse all deferred items and compute: - Total items deferred across all reviews - - Items originating from this epic's stories (match by "Deferred from: code review of story-{{epic_number}}.*") - - Items originating from previous epics (carried forward) + - Items originating from this epic's stories (match by level-2 headings: `## Deferred from: code review of story-{{epic_number}}.* (YYYY-MM-DD)`) + - Items originating from previous epics (carried forward — headings referencing other epic numbers) - Items that were addressed during this epic (cross-reference with story file lists and git history) - Items still outstanding - Classify outstanding items by severity: + Classify outstanding items by severity. If the producer included an explicit category use it; otherwise derive heuristically from description keywords (security/auth/injection → security; bug/crash/error/null → bug; performance/slow/cache → performance; style/lint/naming → style; default → tech-debt): - Security issues: count and list - Bugs: count and list diff --git a/src/bmm-skills/4-implementation/bmad-sprint-status/workflow.md b/src/bmm-skills/4-implementation/bmad-sprint-status/workflow.md index 4da2199da..f69ee2910 100644 --- a/src/bmm-skills/4-implementation/bmad-sprint-status/workflow.md +++ b/src/bmm-skills/4-implementation/bmad-sprint-status/workflow.md @@ -124,14 +124,21 @@ Enter corrections (e.g., "1=in-progress, 2=backlog") or "skip" to continue witho Analyze deferred work backlog (if {deferred_work_file} exists): - Parse all deferred items from {deferred_work_file} - Count total deferred items - Group items by originating review/story - Classify items by severity if identifiable (security, bug, tech-debt, style) - Store counts: {{deferred_total}}, {{deferred_high}} (security/bug), {{deferred_medium}} (tech-debt), {{deferred_low}} (style/minor) + Parse all deferred items from {deferred_work_file}. The file uses level-2 headings produced by bmad-code-review: + `## Deferred from: code review of story-X.Y (YYYY-MM-DD)` + Each heading is followed by bullet items (one per deferred finding). + + Count total deferred items (bullet items, not headings) + Group items by originating review/story (derived from the heading above each group) + Classify items by severity: if the item includes an explicit category use it; otherwise derive heuristically from description keywords (security/auth/injection → security; bug/crash/error/null → bug; performance/slow/cache → performance; style/lint/naming → style; default → tech-debt) + Store counts: {{deferred_total}}, {{deferred_high}} (security/bug), {{deferred_medium}} (tech-debt/performance), {{deferred_low}} (style/minor) IF {{deferred_total}} > 20: add risk "Deferred work backlog is large ({{deferred_total}} items) — consider triaging with SM agent" IF {{deferred_high}} > 0: add risk "{{deferred_high}} high-priority deferred items (security/bugs) need attention" + + + Set {{deferred_total}} = 0, {{deferred_high}} = 0, {{deferred_medium}} = 0, {{deferred_low}} = 0 + @@ -213,7 +220,7 @@ If the command targets a story, set `story_key={{next_story_id}}` when prompted. - Load and parse {sprint_status_file} same as Step 2 + Load and parse {sprint_status_file} same as Step 2 (including deferred work analysis — set deferred counts to 0 when file is missing/empty) Compute recommendation same as Step 3 next_workflow_id = {{next_workflow_id}} next_story_id = {{next_story_id}}