From 978a93ed331757ab341dd4a1330d58aedb2b9254 Mon Sep 17 00:00:00 2001 From: murat Date: Thu, 11 Dec 2025 09:34:22 -0600 Subject: [PATCH 01/10] docs: test arch ADR usage update --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6af9597d..e14a1431 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "bmad-method", - "version": "6.0.0-alpha.15", + "version": "6.0.0-alpha.16", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bmad-method", - "version": "6.0.0-alpha.15", + "version": "6.0.0-alpha.16", "license": "MIT", "dependencies": { "@kayvan/markdown-tree-parser": "^1.6.1", From 6d5a1084ebf8fa42e78a53824e2ea5aa2be6943e Mon Sep 17 00:00:00 2001 From: murat Date: Thu, 11 Dec 2025 09:43:25 -0600 Subject: [PATCH 02/10] docs: test arch ADR usage update 2 --- src/modules/bmm/docs/test-architecture.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/modules/bmm/docs/test-architecture.md b/src/modules/bmm/docs/test-architecture.md index 76b75bf3..52527931 100644 --- a/src/modules/bmm/docs/test-architecture.md +++ b/src/modules/bmm/docs/test-architecture.md @@ -26,14 +26,17 @@ graph TB subgraph Phase3["Phase 3: SOLUTIONING"] Architecture["Architect: *architecture"] EpicsStories["PM/Architect: *create-epics-and-stories"] + TestDesignSys["TEA: *test-design (system-level)"] Framework["TEA: *framework"] CI["TEA: *ci"] GateCheck["Architect: *implementation-readiness"] Architecture --> EpicsStories + Architecture --> TestDesignSys + TestDesignSys --> Framework EpicsStories --> Framework Framework --> CI CI --> GateCheck - Phase3Note["Epics created AFTER architecture,
then test infrastructure setup"] + Phase3Note["Epics created AFTER architecture,
then system-level test design and test infra setup"] EpicsStories -.-> Phase3Note end @@ -96,9 +99,12 @@ graph TB - **Phase 3** (Track-dependent): Solutioning (`*architecture` → `*create-epics-and-stories` → TEA: `*framework`, `*ci` → `*implementation-readiness`) - **Phase 4** (Required): Implementation (`*sprint-planning` → per-epic: `*test-design` → per-story: dev workflows) -**TEA workflows:** `*framework` and `*ci` run once in Phase 3 after architecture. `*test-design` runs per-epic in Phase 4. Output: `test-design-epic-N.md`. +**TEA workflows:** `*framework` and `*ci` run once in Phase 3 after architecture. `*test-design` is **dual-mode**: -Quick Flow track skips Phase 1 and 3. BMad Method and Enterprise use all phases based on project needs. +- **System-level (Phase 3):** Run immediately after architecture/ADR drafting to produce `test-design-system.md` (testability review, ADR → test mapping, ASRs, environment needs). Feeds the implementation-readiness gate. +- **Epic-level (Phase 4):** Run per-epic to produce `test-design-epic-N.md` (risk, priorities, coverage plan). + +Quick Flow track skips Phase 1 and 3. BMad Method and Enterprise use all phases based on project needs. When an ADR/architecture draft is produced, run `*test-design` in **system-level** mode before the implementation-readiness gate so the ADR has an attached testability review and ADR → test mapping; keep it updated if ADRs change. ### Why TEA is Different from Other BMM Agents From d2d9010a8e494099b84b2cdeab1902397a12df87 Mon Sep 17 00:00:00 2001 From: Murat K Ozcan <34237651+muratkeremozcan@users.noreply.github.com> Date: Thu, 11 Dec 2025 10:15:23 -0600 Subject: [PATCH 03/10] Update src/modules/bmm/docs/test-architecture.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/modules/bmm/docs/test-architecture.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/bmm/docs/test-architecture.md b/src/modules/bmm/docs/test-architecture.md index 52527931..5637f0b5 100644 --- a/src/modules/bmm/docs/test-architecture.md +++ b/src/modules/bmm/docs/test-architecture.md @@ -104,7 +104,9 @@ graph TB - **System-level (Phase 3):** Run immediately after architecture/ADR drafting to produce `test-design-system.md` (testability review, ADR → test mapping, ASRs, environment needs). Feeds the implementation-readiness gate. - **Epic-level (Phase 4):** Run per-epic to produce `test-design-epic-N.md` (risk, priorities, coverage plan). -Quick Flow track skips Phase 1 and 3. BMad Method and Enterprise use all phases based on project needs. When an ADR/architecture draft is produced, run `*test-design` in **system-level** mode before the implementation-readiness gate so the ADR has an attached testability review and ADR → test mapping; keep it updated if ADRs change. +Quick Flow track skips Phases 1 and 3. +BMad Method and Enterprise use all phases based on project needs. +When an ADR or architecture draft is produced, run `*test-design` in **system-level** mode before the implementation-readiness gate. This ensures the ADR has an attached testability review and ADR → test mapping. Keep the test-design updated if ADRs change. ### Why TEA is Different from Other BMM Agents From 6e9fe6c9a2eebc934f69cedaaa90b7bcba241cdb Mon Sep 17 00:00:00 2001 From: murat Date: Thu, 11 Dec 2025 11:35:26 -0600 Subject: [PATCH 04/10] fix: addressed review comment --- .../bmm/workflows/testarch/test-design/workflow.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/modules/bmm/workflows/testarch/test-design/workflow.yaml b/src/modules/bmm/workflows/testarch/test-design/workflow.yaml index 9a1042c1..176230e0 100644 --- a/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +++ b/src/modules/bmm/workflows/testarch/test-design/workflow.yaml @@ -24,8 +24,14 @@ variables: # Output configuration # Note: Actual output file determined dynamically based on mode detection -# - System-Level (Phase 3): {output_folder}/test-design-system.md -# - Epic-Level (Phase 4): {output_folder}/test-design-epic-{epic_num}.md +# Declared outputs for new workflow format +outputs: + - id: system-level + description: "System-level testability review (Phase 3)" + path: "{output_folder}/test-design-system.md" + - id: epic-level + description: "Epic-level test plan (Phase 4)" + path: "{output_folder}/test-design-epic-{epic_num}.md" default_output_file: "{output_folder}/test-design-epic-{epic_num}.md" # Required tools From b4d7e1adef40d1e80248640c09c35735cb02d183 Mon Sep 17 00:00:00 2001 From: murat Date: Thu, 11 Dec 2025 13:13:44 -0600 Subject: [PATCH 05/10] docs: addressed further PR comments --- src/modules/bmm/docs/test-architecture.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/bmm/docs/test-architecture.md b/src/modules/bmm/docs/test-architecture.md index 5637f0b5..49fdba5f 100644 --- a/src/modules/bmm/docs/test-architecture.md +++ b/src/modules/bmm/docs/test-architecture.md @@ -36,7 +36,7 @@ graph TB EpicsStories --> Framework Framework --> CI CI --> GateCheck - Phase3Note["Epics created AFTER architecture,
then system-level test design and test infra setup"] + Phase3Note["Epics created AFTER architecture,
then system-level test design and test infrastructure setup"] EpicsStories -.-> Phase3Note end @@ -96,12 +96,12 @@ graph TB - **Documentation** (Optional for brownfield): Prerequisite using `*document-project` - **Phase 1** (Optional): Discovery/Analysis (`*brainstorm`, `*research`, `*product-brief`) - **Phase 2** (Required): Planning (`*prd` creates PRD with FRs/NFRs) -- **Phase 3** (Track-dependent): Solutioning (`*architecture` → `*create-epics-and-stories` → TEA: `*framework`, `*ci` → `*implementation-readiness`) +- **Phase 3** (Track-dependent): Solutioning (`*architecture` → `*test-design` (system-level) → `*create-epics-and-stories` → TEA: `*framework`, `*ci` → `*implementation-readiness`) - **Phase 4** (Required): Implementation (`*sprint-planning` → per-epic: `*test-design` → per-story: dev workflows) **TEA workflows:** `*framework` and `*ci` run once in Phase 3 after architecture. `*test-design` is **dual-mode**: -- **System-level (Phase 3):** Run immediately after architecture/ADR drafting to produce `test-design-system.md` (testability review, ADR → test mapping, ASRs, environment needs). Feeds the implementation-readiness gate. +- **System-level (Phase 3):** Run immediately after architecture/ADR drafting to produce `test-design-system.md` (testability review, ADR → test mapping, Architecturally Significant Requirements (ASRs), environment needs). Feeds the implementation-readiness gate. - **Epic-level (Phase 4):** Run per-epic to produce `test-design-epic-N.md` (risk, priorities, coverage plan). Quick Flow track skips Phases 1 and 3. From be7e07cc1acda46b50469926099fb96f2e4a4b8f Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Thu, 11 Dec 2025 15:32:24 -0700 Subject: [PATCH 06/10] fix: fully silence CodeRabbit unless explicitly invoked (#1096) - Disable high_level_summary to stop PR description modifications - Disable commit_status to stop GitHub status checks - Disable issue_enrichment.auto_enrich to stop auto-commenting on issues These settings complement the existing review_status: false and auto_review.enabled: false to ensure CodeRabbit only responds when explicitly tagged with @coderabbitai review. --- .coderabbit.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 8da8c6b4..30972582 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -4,9 +4,10 @@ language: "en-US" early_access: true reviews: profile: chill - high_level_summary: true + high_level_summary: false # don't post summary until explicitly invoked request_changes_workflow: false review_status: false + commit_status: false # don't set commit status until explicitly invoked collapse_walkthrough: false poem: false auto_review: @@ -33,4 +34,7 @@ reviews: Flag any process.exit() without error message. chat: auto_reply: true # Response to mentions in comments, a la @coderabbit review +issue_enrichment: + auto_enrich: + enabled: false # don't auto-comment on issues From 82e6433b69135dd27664e8fd6e1dbb25e92c931b Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Thu, 11 Dec 2025 15:42:24 -0700 Subject: [PATCH 07/10] refactor: standardize file naming to use dashes instead of underscores (#1094) Rename output/template files and update all references to use kebab-case (dashes) instead of snake_case (underscores) for consistency: - project_context.md -> project-context.md (13 references) - backlog_template.md -> backlog-template.md - agent_commands.md -> agent-commands.md - agent_persona.md -> agent-persona.md - agent_purpose_and_type.md -> agent-purpose-and-type.md --- .../templates/{agent_commands.md => agent-commands.md} | 0 .../templates/{agent_persona.md => agent-persona.md} | 0 ...{agent_purpose_and_type.md => agent-purpose-and-type.md} | 0 .../{backlog_template.md => backlog-template.md} | 0 .../bmgd/workflows/4-production/code-review/instructions.md | 4 ++-- src/modules/bmm/agents/dev.agent.yaml | 2 +- .../3-solutioning/architecture/steps/step-01-init.md | 2 +- .../3-solutioning/architecture/steps/step-08-complete.md | 4 ++-- .../bmm/workflows/4-implementation/dev-story/checklist.md | 2 +- .../generate-project-context/steps/step-01-discover.md | 4 ++-- .../generate-project-context/steps/step-02-generate.md | 2 +- .../generate-project-context/steps/step-03-complete.md | 4 ++-- .../bmm/workflows/generate-project-context/workflow.md | 6 +++--- 13 files changed, 15 insertions(+), 15 deletions(-) rename src/modules/bmb/workflows/create-agent/templates/{agent_commands.md => agent-commands.md} (100%) rename src/modules/bmb/workflows/create-agent/templates/{agent_persona.md => agent-persona.md} (100%) rename src/modules/bmb/workflows/create-agent/templates/{agent_purpose_and_type.md => agent-purpose-and-type.md} (100%) rename src/modules/bmgd/workflows/4-production/code-review/{backlog_template.md => backlog-template.md} (100%) diff --git a/src/modules/bmb/workflows/create-agent/templates/agent_commands.md b/src/modules/bmb/workflows/create-agent/templates/agent-commands.md similarity index 100% rename from src/modules/bmb/workflows/create-agent/templates/agent_commands.md rename to src/modules/bmb/workflows/create-agent/templates/agent-commands.md diff --git a/src/modules/bmb/workflows/create-agent/templates/agent_persona.md b/src/modules/bmb/workflows/create-agent/templates/agent-persona.md similarity index 100% rename from src/modules/bmb/workflows/create-agent/templates/agent_persona.md rename to src/modules/bmb/workflows/create-agent/templates/agent-persona.md diff --git a/src/modules/bmb/workflows/create-agent/templates/agent_purpose_and_type.md b/src/modules/bmb/workflows/create-agent/templates/agent-purpose-and-type.md similarity index 100% rename from src/modules/bmb/workflows/create-agent/templates/agent_purpose_and_type.md rename to src/modules/bmb/workflows/create-agent/templates/agent-purpose-and-type.md diff --git a/src/modules/bmgd/workflows/4-production/code-review/backlog_template.md b/src/modules/bmgd/workflows/4-production/code-review/backlog-template.md similarity index 100% rename from src/modules/bmgd/workflows/4-production/code-review/backlog_template.md rename to src/modules/bmgd/workflows/4-production/code-review/backlog-template.md diff --git a/src/modules/bmgd/workflows/4-production/code-review/instructions.md b/src/modules/bmgd/workflows/4-production/code-review/instructions.md index fe2c6f11..9ed99b99 100644 --- a/src/modules/bmgd/workflows/4-production/code-review/instructions.md +++ b/src/modules/bmgd/workflows/4-production/code-review/instructions.md @@ -330,7 +330,7 @@ Review was saved to story file, but sprint-status.yaml may be out of sync. All action items are included in the standalone review report Would you like me to create tracking items for these action items? (backlog/tasks) - If {{backlog_file}} does not exist, copy {installed_path}/backlog_template.md to {{backlog_file}} location. + If {{backlog_file}} does not exist, copy {installed_path}/backlog-template.md to {{backlog_file}} location. Append a row per action item with Date={{date}}, Story="Ad-Hoc Review", Epic="N/A", Type, Severity, Owner (or "TBD"), Status="Open", Notes with file refs and context. @@ -342,7 +342,7 @@ Review was saved to story file, but sprint-status.yaml may be out of sync. Append under the story's "Tasks / Subtasks" a new subsection titled "Review Follow-ups (AI)", adding each item as an unchecked checkbox in imperative form, prefixed with "[AI-Review]" and severity. Example: "- [ ] [AI-Review][High] Add input validation on server route /api/x (AC #2)". - If {{backlog_file}} does not exist, copy {installed_path}/backlog_template.md to {{backlog_file}} location. + If {{backlog_file}} does not exist, copy {installed_path}/backlog-template.md to {{backlog_file}} location. Append a row per action item with Date={{date}}, Story={{epic_num}}.{{story_num}}, Epic={{epic_num}}, Type, Severity, Owner (or "TBD"), Status="Open", Notes with short context and file refs. diff --git a/src/modules/bmm/agents/dev.agent.yaml b/src/modules/bmm/agents/dev.agent.yaml index bc2b7587..4db6b4e1 100644 --- a/src/modules/bmm/agents/dev.agent.yaml +++ b/src/modules/bmm/agents/dev.agent.yaml @@ -24,7 +24,7 @@ agent: critical_actions: - "READ the entire story file BEFORE any implementation - tasks/subtasks sequence is your authoritative implementation guide" - - "Load project_context.md if available for coding standards only - never let it override story requirements" + - "Load project-context.md if available for coding standards only - never let it override story requirements" - "Execute tasks/subtasks IN ORDER as written in story file - no skipping, no reordering, no doing what you want" - "For each task/subtask: follow red-green-refactor cycle - write failing test first, then implementation" - "Mark task/subtask [x] ONLY when both implementation AND tests are complete and passing" diff --git a/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01-init.md b/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01-init.md index 21940ca7..25ce6140 100644 --- a/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01-init.md +++ b/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01-init.md @@ -94,7 +94,7 @@ Discover and load context documents using smart discovery: **Project Context Rules (Critical for AI Agents):** -1. Check for project context file: `**/project_context.md` +1. Check for project context file: `**/project-context.md` 2. If exists: Load COMPLETE file contents - this contains critical rules for AI agents 3. Add to frontmatter `hasProjectContext: true` and track file path 4. Report to user: "Found existing project context with {number_of_rules} agent rules" diff --git a/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md b/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md index 0abd424c..6e91a3da 100644 --- a/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md +++ b/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md @@ -280,7 +280,7 @@ Your architecture will ensure consistent, high-quality implementation across all **💡 Optional Enhancement: Project Context File** -Would you like to create a `project_context.md` file? This is a concise, optimized guide for AI agents that captures: +Would you like to create a `project-context.md` file? This is a concise, optimized guide for AI agents that captures: - Critical language and framework rules they might miss - Specific patterns and conventions for your project @@ -310,7 +310,7 @@ This will help ensure consistent implementation by capturing: - Testing and quality standards - Anti-patterns to avoid -The workflow will collaborate with you to create an optimized `project_context.md` file that AI agents will read before implementing any code." +The workflow will collaborate with you to create an optimized `project-context.md` file that AI agents will read before implementing any code." **Execute the Generate Project Context workflow:** diff --git a/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md b/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md index 049798e5..01f4d820 100644 --- a/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +++ b/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md @@ -35,7 +35,7 @@ validation-rules: - [ ] **Acceptance Criteria Satisfaction:** Implementation satisfies EVERY Acceptance Criterion in the story - [ ] **No Ambiguous Implementation:** Clear, unambiguous implementation that meets story requirements - [ ] **Edge Cases Handled:** Error conditions and edge cases appropriately addressed -- [ ] **Dependencies Within Scope:** Only uses dependencies specified in story or project_context.md +- [ ] **Dependencies Within Scope:** Only uses dependencies specified in story or project-context.md ## 🧪 Testing & Quality Assurance diff --git a/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md b/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md index eb5ca831..395b30b6 100644 --- a/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md +++ b/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md @@ -33,7 +33,7 @@ Discover the project's technology stack, existing patterns, and critical impleme First, check if project context already exists: -- Look for file at `{output_folder}/project_context.md` +- Look for file at `{output_folder}/project-context.md` - If exists: Read complete file to understand existing rules - Present to user: "Found existing project context with {number_of_sections} sections. Would you like to update this or create a new one?" @@ -122,7 +122,7 @@ Based on discovery, create or update the context document: #### A. Fresh Document Setup (if no existing context) -Copy template from `{installed_path}/project-context-template.md` to `{output_folder}/project_context.md` +Copy template from `{installed_path}/project-context-template.md` to `{output_folder}/project-context.md` Initialize frontmatter with: ```yaml diff --git a/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md b/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md index 12fbc768..b301b9e2 100644 --- a/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +++ b/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md @@ -288,7 +288,7 @@ After each category, show the generated rules and present choices: ## APPEND TO PROJECT CONTEXT: -When user selects 'C' for a category, append the content directly to `{output_folder}/project_context.md` using the structure from step 8. +When user selects 'C' for a category, append the content directly to `{output_folder}/project-context.md` using the structure from step 8. ## SUCCESS METRICS: diff --git a/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md b/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md index 32815118..d7da5df7 100644 --- a/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md +++ b/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md @@ -134,7 +134,7 @@ Based on user skill level, present the completion: **Expert Mode:** "Project context complete. Optimized for LLM consumption with {{rule_count}} critical rules across {{section_count}} sections. -File saved to: `{output_folder}/project_context.md` +File saved to: `{output_folder}/project-context.md` Ready for AI agent integration." @@ -227,7 +227,7 @@ Present final completion to user: "✅ **Project Context Generation Complete!** Your optimized project context file is ready at: -`{output_folder}/project_context.md` +`{output_folder}/project-context.md` **📊 Context Summary:** diff --git a/src/modules/bmm/workflows/generate-project-context/workflow.md b/src/modules/bmm/workflows/generate-project-context/workflow.md index 80638d07..522ff392 100644 --- a/src/modules/bmm/workflows/generate-project-context/workflow.md +++ b/src/modules/bmm/workflows/generate-project-context/workflow.md @@ -1,11 +1,11 @@ --- name: generate-project-context -description: Creates a concise project_context.md file with critical rules and patterns that AI agents must follow when implementing code. Optimized for LLM context efficiency. +description: Creates a concise project-context.md file with critical rules and patterns that AI agents must follow when implementing code. Optimized for LLM context efficiency. --- # Generate Project Context Workflow -**Goal:** Create a concise, optimized `project_context.md` file containing critical rules, patterns, and guidelines that AI agents must follow when implementing code. This file focuses on unobvious details that LLMs need to be reminded of. +**Goal:** Create a concise, optimized `project-context.md` file containing critical rules, patterns, and guidelines that AI agents must follow when implementing code. This file focuses on unobvious details that LLMs need to be reminded of. **Your Role:** You are a technical facilitator working with a peer to capture the essential implementation rules that will ensure consistent, high-quality code generation across all AI agents working on the project. @@ -37,7 +37,7 @@ Load config from `{project-root}/.bmad/bmm/config.yaml` and resolve: - `installed_path` = `{project-root}/.bmad/bmm/workflows/generate-project-context` - `template_path` = `{installed_path}/project-context-template.md` -- `output_file` = `{output_folder}/project_context.md` +- `output_file` = `{output_folder}/project-context.md` --- From e2d9d35ce91f852f0a04f62afc1fa4fbe64832d8 Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Thu, 11 Dec 2025 15:42:52 -0700 Subject: [PATCH 08/10] fix(bmm): improve code review completion message (#1095) Change "Story is ready for next work!" to "Code review complete!" The original phrasing was misleading - when a code review finishes with status "done", it means the review itself is complete and the story is marked done in tracking. However, the user may choose to do additional reviews or the story may genuinely be finished. "Code review complete" more accurately describes what actually happened without implying next steps. --- .../bmm/workflows/4-implementation/code-review/instructions.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml b/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml index cc45c49d..3c5a69e6 100644 --- a/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +++ b/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml @@ -217,7 +217,7 @@ **Issues Fixed:** {{fixed_count}} **Action Items Created:** {{action_count}} - {{#if new_status == "done"}}Story is ready for next work!{{else}}Address the action items and continue development.{{/if}} + {{#if new_status == "done"}}Code review complete!{{else}}Address the action items and continue development.{{/if}} From 0f5a9cf0ddb93f2f5a47c7299042f41809a61d8a Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Thu, 11 Dec 2025 15:43:40 -0700 Subject: [PATCH 09/10] fix: correct grammar in PRD workflow description (#1087) --- src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md b/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md index ac170422..48fb57e3 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md @@ -1,6 +1,6 @@ --- name: create-prd -description: Creates a comprehensive PRDs through collaborative step-by-step discovery between two product managers working as peers. +description: Creates a comprehensive PRD through collaborative step-by-step discovery between two product managers working as peers. main_config: '{project-root}/.bmad/bmm/config.yaml' web_bundle: true --- From 3bc485d0ed82bc5f6c6bf02eab6a6784b5d32dc9 Mon Sep 17 00:00:00 2001 From: Kevin Heidt Date: Thu, 11 Dec 2025 17:56:31 -0500 Subject: [PATCH 10/10] Enhance config collector to support static fields (#1086) Refactor config collection to handle both interactive and static fields. Update logic to process new static fields and merge answers accordingly. Co-authored-by: Brian --- .../installers/lib/core/config-collector.js | 119 ++++++++++++------ 1 file changed, 81 insertions(+), 38 deletions(-) diff --git a/tools/cli/installers/lib/core/config-collector.js b/tools/cli/installers/lib/core/config-collector.js index f61e6411..8f0c9885 100644 --- a/tools/cli/installers/lib/core/config-collector.js +++ b/tools/cli/installers/lib/core/config-collector.js @@ -248,14 +248,21 @@ class ConfigCollector { const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt'); const existingKeys = this.existingConfig && this.existingConfig[moduleName] ? Object.keys(this.existingConfig[moduleName]) : []; + // Find new interactive fields (with prompt) const newKeys = configKeys.filter((key) => { const item = moduleConfig[key]; // Check if it's a config item and doesn't exist in existing config return item && typeof item === 'object' && item.prompt && !existingKeys.includes(key); }); - // If in silent mode and no new keys, use existing config and skip prompts - if (silentMode && newKeys.length === 0) { + // Find new static fields (without prompt, just result) + const newStaticKeys = configKeys.filter((key) => { + const item = moduleConfig[key]; + return item && typeof item === 'object' && !item.prompt && item.result && !existingKeys.includes(key); + }); + + // If in silent mode and no new keys (neither interactive nor static), use existing config and skip prompts + if (silentMode && newKeys.length === 0 && newStaticKeys.length === 0) { if (this.existingConfig && this.existingConfig[moduleName]) { if (!this.collectedConfig[moduleName]) { this.collectedConfig[moduleName] = {}; @@ -294,9 +301,12 @@ class ConfigCollector { return false; // No new fields } - // If we have new fields, build questions first - if (newKeys.length > 0) { + // If we have new fields (interactive or static), process them + if (newKeys.length > 0 || newStaticKeys.length > 0) { const questions = []; + const staticAnswers = {}; + + // Build questions for interactive fields for (const key of newKeys) { const item = moduleConfig[key]; const question = await this.buildQuestion(moduleName, key, item, moduleConfig); @@ -305,39 +315,50 @@ class ConfigCollector { } } + // Prepare static answers (no prompt, just result) + for (const key of newStaticKeys) { + staticAnswers[`${moduleName}_${key}`] = undefined; + } + + // Collect all answers (static + prompted) + let allAnswers = { ...staticAnswers }; + if (questions.length > 0) { // Only show header if we actually have questions CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader); console.log(); // Line break before questions - const answers = await inquirer.prompt(questions); + const promptedAnswers = await inquirer.prompt(questions); - // Store answers for cross-referencing - Object.assign(this.allAnswers, answers); - - // Process answers and build result values - for (const key of Object.keys(answers)) { - const originalKey = key.replace(`${moduleName}_`, ''); - const item = moduleConfig[originalKey]; - const value = answers[key]; - - let result; - if (Array.isArray(value)) { - result = value; - } else if (item.result) { - result = this.processResultTemplate(item.result, value); - } else { - result = value; - } - - if (!this.collectedConfig[moduleName]) { - this.collectedConfig[moduleName] = {}; - } - this.collectedConfig[moduleName][originalKey] = result; - } - } else { - // New keys exist but no questions generated - show no config message + // Merge prompted answers with static answers + Object.assign(allAnswers, promptedAnswers); + } else if (newStaticKeys.length > 0) { + // Only static fields, no questions - show no config message CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader); } + + // Store all answers for cross-referencing + Object.assign(this.allAnswers, allAnswers); + + // Process all answers (both static and prompted) + for (const key of Object.keys(allAnswers)) { + const originalKey = key.replace(`${moduleName}_`, ''); + const item = moduleConfig[originalKey]; + const value = allAnswers[key]; + + let result; + if (Array.isArray(value)) { + result = value; + } else if (item.result) { + result = this.processResultTemplate(item.result, value); + } else { + result = value; + } + + if (!this.collectedConfig[moduleName]) { + this.collectedConfig[moduleName] = {}; + } + this.collectedConfig[moduleName][originalKey] = result; + } } // Copy over existing values for fields that weren't prompted @@ -353,7 +374,7 @@ class ConfigCollector { } } - return newKeys.length > 0; // Return true if we prompted for new fields + return newKeys.length > 0 || newStaticKeys.length > 0; // Return true if we had any new fields (interactive or static) } /** @@ -501,30 +522,52 @@ class ConfigCollector { // Process each config item const questions = []; + const staticAnswers = {}; const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt'); for (const key of configKeys) { const item = moduleConfig[key]; // Skip if not a config object - if (!item || typeof item !== 'object' || !item.prompt) { + if (!item || typeof item !== 'object') { continue; } - const question = await this.buildQuestion(moduleName, key, item, moduleConfig); - if (question) { - questions.push(question); + // Handle static values (no prompt, just result) + if (!item.prompt && item.result) { + // Add to static answers with a marker value + staticAnswers[`${moduleName}_${key}`] = undefined; + continue; + } + + // Handle interactive values (with prompt) + if (item.prompt) { + const question = await this.buildQuestion(moduleName, key, item, moduleConfig); + if (question) { + questions.push(question); + } } } + // Collect all answers (static + prompted) + let allAnswers = { ...staticAnswers }; + // Display appropriate header based on whether there are questions if (questions.length > 0) { CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader); console.log(); // Line break before questions - const answers = await inquirer.prompt(questions); + const promptedAnswers = await inquirer.prompt(questions); - // Store answers for cross-referencing - Object.assign(this.allAnswers, answers); + // Merge prompted answers with static answers + Object.assign(allAnswers, promptedAnswers); + } + + // Store all answers for cross-referencing + Object.assign(this.allAnswers, allAnswers); + + // Process all answers (both static and prompted) + if (Object.keys(allAnswers).length > 0) { + const answers = allAnswers; // Process answers and build result values for (const key of Object.keys(answers)) {