fix: remove output_folder/story_dir aliases, flatten variables sections (#1608)

* fix: remove output_folder/story_dir aliases, flatten variables sections (#1602)

Drop pointless alias variables (output_folder, story_dir, story_directory)
from Phase 4, Quick Flow, and QA workflows. Replace all references with
the canonical {implementation_artifacts} or {planning_artifacts} variables.

Also flatten unnecessary `variables:` YAML nesting in all affected
workflow.yaml files — the workflow engine treats all keys as top-level,
so the nesting added complexity with no semantic value.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add missing config declarations, remove remaining aliases and dead variables

- Add missing document_output_language and user_skill_level to create-story
  (referenced in instructions.xml but never declared)
- Remove retrospectives_folder alias, replace with canonical implementation_artifacts
- Remove unused sprint_status and duplicate validation alias from correct-course
- Remove unused date, planning_artifacts, tracking_system from sprint-status

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address PR review findings and rename shadowed output_folder variable

- Fix single/double brace mismatch for {implementation_artifacts} in
  create-story instructions.xml (F1)
- Remove escaped asterisks in glob patterns in retrospective
  instructions.md (F2)
- Eliminate redundant {config_source} re-resolution for story_location
  in sprint-planning workflow.yaml (F5)
- Add explicit instruction to discover previous_story_num by scanning
  artifacts instead of leaving it undefined (#7)
- Rename output_folder to project_knowledge in document-project
  workflows to stop shadowing the canonical core config variable (#13)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: use plural retrospectives in previous retro search instructions

The glob pattern can match multiple retrospective files for the same
epic (e.g., partial mid-sprint retro and full completion retro). Use
plural "retrospectives" to make clear the LLM should load all matches.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Alex Verkhovsky 2026-02-11 09:59:18 -07:00 committed by GitHub
parent 3e35057b89
commit b4d118c897
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
22 changed files with 77 additions and 105 deletions

View File

@ -12,7 +12,6 @@ document_output_language: "{config_source}:document_output_language"
date: system-generated date: system-generated
planning_artifacts: "{config_source}:planning_artifacts" planning_artifacts: "{config_source}:planning_artifacts"
implementation_artifacts: "{config_source}:implementation_artifacts" implementation_artifacts: "{config_source}:implementation_artifacts"
output_folder: "{implementation_artifacts}"
sprint_status: "{implementation_artifacts}/sprint-status.yaml" sprint_status: "{implementation_artifacts}/sprint-status.yaml"
# Workflow components # Workflow components
@ -21,10 +20,7 @@ instructions: "{installed_path}/instructions.xml"
validation: "{installed_path}/checklist.md" validation: "{installed_path}/checklist.md"
template: false template: false
variables: project_context: "**/project-context.md"
# Project context
project_context: "**/project-context.md"
story_dir: "{implementation_artifacts}"
# Smart input file references - handles both whole docs and sharded docs # Smart input file references - handles both whole docs and sharded docs
# Priority: Whole document first, then sharded version # Priority: Whole document first, then sharded version

View File

@ -12,8 +12,6 @@ date: system-generated
implementation_artifacts: "{config_source}:implementation_artifacts" implementation_artifacts: "{config_source}:implementation_artifacts"
planning_artifacts: "{config_source}:planning_artifacts" planning_artifacts: "{config_source}:planning_artifacts"
project_knowledge: "{config_source}:project_knowledge" project_knowledge: "{config_source}:project_knowledge"
output_folder: "{implementation_artifacts}"
sprint_status: "{implementation_artifacts}/sprint-status.yaml"
project_context: "**/project-context.md" project_context: "**/project-context.md"
# Smart input file references - handles both whole docs and sharded docs # Smart input file references - handles both whole docs and sharded docs
@ -52,6 +50,5 @@ input_file_patterns:
installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/correct-course" installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/correct-course"
template: false template: false
instructions: "{installed_path}/instructions.md" instructions: "{installed_path}/instructions.md"
validation: "{installed_path}/checklist.md"
checklist: "{installed_path}/checklist.md" checklist: "{installed_path}/checklist.md"
default_output_file: "{planning_artifacts}/sprint-change-proposal-{date}.md" default_output_file: "{planning_artifacts}/sprint-change-proposal-{date}.md"

View File

@ -49,7 +49,7 @@ This is a COMPETITION to create the **ULTIMATE story context** that makes LLM de
### **Required Inputs:** ### **Required Inputs:**
- **Story file**: The story file to review and improve - **Story file**: The story file to review and improve
- **Workflow variables**: From workflow.yaml (story_dir, output_folder, epics_file, etc.) - **Workflow variables**: From workflow.yaml (implementation_artifacts, epics_file, etc.)
- **Source documents**: Epics, architecture, etc. (discovered or provided) - **Source documents**: Epics, architecture, etc. (discovered or provided)
- **Validation framework**: `validate-workflow.xml` (handles checklist execution) - **Validation framework**: `validate-workflow.xml` (handles checklist execution)
@ -65,7 +65,7 @@ You will systematically re-do the entire story creation process, but with a crit
2. **Load the story file**: `{story_file_path}` (provided by user or discovered) 2. **Load the story file**: `{story_file_path}` (provided by user or discovered)
3. **Load validation framework**: `{project-root}/_bmad/core/tasks/validate-workflow.xml` 3. **Load validation framework**: `{project-root}/_bmad/core/tasks/validate-workflow.xml`
4. **Extract metadata**: epic_num, story_num, story_key, story_title from story file 4. **Extract metadata**: epic_num, story_num, story_key, story_title from story file
5. **Resolve all workflow variables**: story_dir, output_folder, epics_file, architecture_file, etc. 5. **Resolve all workflow variables**: implementation_artifacts, epics_file, architecture_file, etc.
6. **Understand current status**: What story implementation guidance is currently provided? 6. **Understand current status**: What story implementation guidance is currently provided?
**Note:** If running in fresh context, user should provide the story file path being reviewed. If running from create-story workflow, the validation framework will automatically discover the checklist and story file. **Note:** If running in fresh context, user should provide the story file path being reviewed. If running from create-story workflow, the validation framework will automatically discover the checklist and story file.

View File

@ -192,7 +192,8 @@
(As a, I want, so that) - Detailed acceptance criteria (already BDD formatted) - Technical requirements specific to this story - (As a, I want, so that) - Detailed acceptance criteria (already BDD formatted) - Technical requirements specific to this story -
Business context and value - Success criteria <!-- Previous story analysis for context continuity --> Business context and value - Success criteria <!-- Previous story analysis for context continuity -->
<check if="story_num > 1"> <check if="story_num > 1">
<action>Load previous story file: {{story_dir}}/{{epic_num}}-{{previous_story_num}}-*.md</action> **PREVIOUS STORY INTELLIGENCE:** - <action>Find {{previous_story_num}}: scan {implementation_artifacts} for the story file in epic {{epic_num}} with the highest story number less than {{story_num}}</action>
<action>Load previous story file: {implementation_artifacts}/{{epic_num}}-{{previous_story_num}}-*.md</action> **PREVIOUS STORY INTELLIGENCE:** -
Dev notes and learnings from previous story - Review feedback and corrections needed - Files that were created/modified and their Dev notes and learnings from previous story - Review feedback and corrections needed - Files that were created/modified and their
patterns - Testing approaches that worked/didn't work - Problems encountered and solutions found - Code patterns established <action>Extract patterns - Testing approaches that worked/didn't work - Problems encountered and solutions found - Code patterns established <action>Extract
all learnings that could impact current story implementation</action> all learnings that could impact current story implementation</action>

View File

@ -6,11 +6,11 @@ author: "BMad"
config_source: "{project-root}/_bmad/bmm/config.yaml" config_source: "{project-root}/_bmad/bmm/config.yaml"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:user_skill_level"
date: system-generated date: system-generated
planning_artifacts: "{config_source}:planning_artifacts" planning_artifacts: "{config_source}:planning_artifacts"
implementation_artifacts: "{config_source}:implementation_artifacts" implementation_artifacts: "{config_source}:implementation_artifacts"
output_folder: "{implementation_artifacts}"
story_dir: "{implementation_artifacts}"
# Workflow components # Workflow components
installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/create-story" installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/create-story"
@ -19,18 +19,14 @@ instructions: "{installed_path}/instructions.xml"
validation: "{installed_path}/checklist.md" validation: "{installed_path}/checklist.md"
# Variables and inputs # Variables and inputs
variables: sprint_status: "{implementation_artifacts}/sprint-status.yaml" # Primary source for story tracking
sprint_status: "{implementation_artifacts}/sprint-status.yaml" # Primary source for story tracking epics_file: "{planning_artifacts}/epics.md" # Enhanced epics+stories with BDD and source hints
epics_file: "{planning_artifacts}/epics.md" # Enhanced epics+stories with BDD and source hints prd_file: "{planning_artifacts}/prd.md" # Fallback for requirements (if not in epics file)
prd_file: "{planning_artifacts}/prd.md" # Fallback for requirements (if not in epics file) architecture_file: "{planning_artifacts}/architecture.md" # Fallback for constraints (if not in epics file)
architecture_file: "{planning_artifacts}/architecture.md" # Fallback for constraints (if not in epics file) ux_file: "{planning_artifacts}/*ux*.md" # Fallback for UX requirements (if not in epics file)
ux_file: "{planning_artifacts}/*ux*.md" # Fallback for UX requirements (if not in epics file) story_title: "" # Will be elicited if not derivable
story_title: "" # Will be elicited if not derivable
# Project context
project_context: "**/project-context.md" project_context: "**/project-context.md"
default_output_file: "{implementation_artifacts}/{{story_key}}.md"
default_output_file: "{story_dir}/{{story_key}}.md"
# Smart input file references - Simplified for enhanced approach # Smart input file references - Simplified for enhanced approach
# The epics+stories file should contain everything needed with source hints # The epics+stories file should contain everything needed with source hints

View File

@ -78,7 +78,7 @@
<!-- Non-sprint story discovery --> <!-- Non-sprint story discovery -->
<check if="{{sprint_status}} file does NOT exist"> <check if="{{sprint_status}} file does NOT exist">
<action>Search {story_dir} for stories directly</action> <action>Search {implementation_artifacts} for stories directly</action>
<action>Find stories with "ready-for-dev" status in files</action> <action>Find stories with "ready-for-dev" status in files</action>
<action>Look for story files matching pattern: *-*-*.md</action> <action>Look for story files matching pattern: *-*-*.md</action>
<action>Read each candidate story file to check Status section</action> <action>Read each candidate story file to check Status section</action>
@ -114,7 +114,7 @@
</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: {{story_key}}.md</action> <action>Find matching story file in {implementation_artifacts} 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" />

View File

@ -4,12 +4,10 @@ author: "BMad"
# Critical variables from config # Critical variables from config
config_source: "{project-root}/_bmad/bmm/config.yaml" config_source: "{project-root}/_bmad/bmm/config.yaml"
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"
user_skill_level: "{config_source}:user_skill_level" user_skill_level: "{config_source}:user_skill_level"
document_output_language: "{config_source}:document_output_language" document_output_language: "{config_source}:document_output_language"
story_dir: "{config_source}:implementation_artifacts"
date: system-generated date: system-generated
# Workflow components # Workflow components

View File

@ -81,7 +81,7 @@ Bob (Scrum Master): "I'm having trouble detecting the completed epic from {sprin
<check if="{{epic_number}} still not determined"> <check if="{{epic_number}} still not determined">
<action>PRIORITY 3: Fallback to stories folder</action> <action>PRIORITY 3: Fallback to stories folder</action>
<action>Scan {story_directory} for highest numbered story files</action> <action>Scan {implementation_artifacts} for highest numbered story files</action>
<action>Extract epic numbers from story filenames (pattern: epic-X-Y-story-name.md)</action> <action>Extract epic numbers from story filenames (pattern: epic-X-Y-story-name.md)</action>
<action>Set {{detected_epic}} = highest epic number found</action> <action>Set {{detected_epic}} = highest epic number found</action>
@ -171,7 +171,7 @@ Bob (Scrum Master): "Before we start the team discussion, let me review all the
Charlie (Senior Dev): "Good idea - those dev notes always have gold in them." Charlie (Senior Dev): "Good idea - those dev notes always have gold in them."
</output> </output>
<action>For each story in epic {{epic_number}}, read the complete story file from {story_directory}/{{epic_number}}-{{story_num}}-\*.md</action> <action>For each story in epic {{epic_number}}, read the complete story file from {implementation_artifacts}/{{epic_number}}-{{story_num}}-*.md</action>
<action>Extract and analyze from each story:</action> <action>Extract and analyze from each story:</action>
@ -262,14 +262,14 @@ Bob (Scrum Master): "We'll get to all of it. But first, let me load the previous
<action>Calculate previous epic number: {{prev_epic_num}} = {{epic_number}} - 1</action> <action>Calculate previous epic number: {{prev_epic_num}} = {{epic_number}} - 1</action>
<check if="{{prev_epic_num}} >= 1"> <check if="{{prev_epic_num}} >= 1">
<action>Search for previous retrospective using pattern: {retrospectives_folder}/epic-{{prev_epic_num}}-retro-*.md</action> <action>Search for previous retrospectives using pattern: {implementation_artifacts}/epic-{{prev_epic_num}}-retro-*.md</action>
<check if="previous retro found"> <check if="previous retrospectives found">
<output> <output>
Bob (Scrum Master): "I found our retrospective from Epic {{prev_epic_num}}. Let me see what we committed to back then..." Bob (Scrum Master): "I found our retrospectives from Epic {{prev_epic_num}}. Let me see what we committed to back then..."
</output> </output>
<action>Read the complete previous retrospective file</action> <action>Read the previous retrospectives</action>
<action>Extract key elements:</action> <action>Extract key elements:</action>
- **Action items committed**: What did the team agree to improve? - **Action items committed**: What did the team agree to improve?
@ -366,7 +366,7 @@ Alice (Product Owner): "Good thinking - helps us connect what we learned to what
<action>Attempt to load next epic using selective loading strategy:</action> <action>Attempt to load next epic using selective loading strategy:</action>
**Try sharded first (more specific):** **Try sharded first (more specific):**
<action>Check if file exists: {planning_artifacts}/epic\*/epic-{{next_epic_num}}.md</action> <action>Check if file exists: {planning_artifacts}/epic*/epic-{{next_epic_num}}.md</action>
<check if="sharded epic file found"> <check if="sharded epic file found">
<action>Load {planning_artifacts}/*epic*/epic-{{next_epic_num}}.md</action> <action>Load {planning_artifacts}/*epic*/epic-{{next_epic_num}}.md</action>
@ -375,7 +375,7 @@ Alice (Product Owner): "Good thinking - helps us connect what we learned to what
**Fallback to whole document:** **Fallback to whole document:**
<check if="sharded epic not found"> <check if="sharded epic not found">
<action>Check if file exists: {planning_artifacts}/epic\*.md</action> <action>Check if file exists: {planning_artifacts}/epic*.md</action>
<check if="whole epic file found"> <check if="whole epic file found">
<action>Load entire epics document</action> <action>Load entire epics document</action>
@ -1303,7 +1303,7 @@ Bob (Scrum Master): "See you all when prep work is done. Meeting adjourned!"
<step n="11" goal="Save Retrospective and Update Sprint Status"> <step n="11" goal="Save Retrospective and Update Sprint Status">
<action>Ensure retrospectives folder exists: {retrospectives_folder}</action> <action>Ensure retrospectives folder exists: {implementation_artifacts}</action>
<action>Create folder if it doesn't exist</action> <action>Create folder if it doesn't exist</action>
<action>Generate comprehensive retrospective summary document including:</action> <action>Generate comprehensive retrospective summary document including:</action>
@ -1323,11 +1323,11 @@ Bob (Scrum Master): "See you all when prep work is done. Meeting adjourned!"
- Commitments and next steps - Commitments and next steps
<action>Format retrospective document as readable markdown with clear sections</action> <action>Format retrospective document as readable markdown with clear sections</action>
<action>Set filename: {retrospectives_folder}/epic-{{epic_number}}-retro-{date}.md</action> <action>Set filename: {implementation_artifacts}/epic-{{epic_number}}-retro-{date}.md</action>
<action>Save retrospective document</action> <action>Save retrospective document</action>
<output> <output>
✅ Retrospective document saved: {retrospectives_folder}/epic-{{epic_number}}-retro-{date}.md ✅ Retrospective document saved: {implementation_artifacts}/epic-{{epic_number}}-retro-{date}.md
</output> </output>
<action>Update {sprint_status_file} to mark retrospective as completed</action> <action>Update {sprint_status_file} to mark retrospective as completed</action>
@ -1366,7 +1366,7 @@ Retrospective document was saved successfully, but {sprint_status_file} may need
- Epic {{epic_number}}: {{epic_title}} reviewed - Epic {{epic_number}}: {{epic_title}} reviewed
- Retrospective Status: completed - Retrospective Status: completed
- Retrospective saved: {retrospectives_folder}/epic-{{epic_number}}-retro-{date}.md - Retrospective saved: {implementation_artifacts}/epic-{{epic_number}}-retro-{date}.md
**Commitments Made:** **Commitments Made:**
@ -1376,7 +1376,7 @@ Retrospective document was saved successfully, but {sprint_status_file} may need
**Next Steps:** **Next Steps:**
1. **Review retrospective summary**: {retrospectives_folder}/epic-{{epic_number}}-retro-{date}.md 1. **Review retrospective summary**: {implementation_artifacts}/epic-{{epic_number}}-retro-{date}.md
2. **Execute preparation sprint** (Est: {{prep_days}} days) 2. **Execute preparation sprint** (Est: {{prep_days}} days)
- Complete {{critical_count}} critical path items - Complete {{critical_count}} critical path items

View File

@ -4,7 +4,6 @@ description: "Run after epic completion to review overall success, extract lesso
author: "BMad" author: "BMad"
config_source: "{project-root}/_bmad/bmm/config.yaml" config_source: "{project-root}/_bmad/bmm/config.yaml"
output_folder: "{config_source}:implementation_artifacts}"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
user_skill_level: "{config_source}:user_skill_level" user_skill_level: "{config_source}:user_skill_level"
@ -52,5 +51,3 @@ input_file_patterns:
# Required files # Required files
sprint_status_file: "{implementation_artifacts}/sprint-status.yaml" sprint_status_file: "{implementation_artifacts}/sprint-status.yaml"
story_directory: "{implementation_artifacts}"
retrospectives_folder: "{implementation_artifacts}"

View File

@ -9,7 +9,6 @@ communication_language: "{config_source}:communication_language"
date: system-generated date: system-generated
implementation_artifacts: "{config_source}:implementation_artifacts" implementation_artifacts: "{config_source}:implementation_artifacts"
planning_artifacts: "{config_source}:planning_artifacts" planning_artifacts: "{config_source}:planning_artifacts"
output_folder: "{implementation_artifacts}"
# Workflow components # Workflow components
installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/sprint-planning" installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/sprint-planning"
@ -18,24 +17,21 @@ template: "{installed_path}/sprint-status-template.yaml"
validation: "{installed_path}/checklist.md" validation: "{installed_path}/checklist.md"
# Variables and inputs # Variables and inputs
variables: project_context: "**/project-context.md"
# Project context project_name: "{config_source}:project_name"
project_context: "**/project-context.md"
# Project identification
project_name: "{config_source}:project_name"
# Tracking system configuration # Tracking system configuration
tracking_system: "file-system" # Options: file-system, Future will support other options from config of mcp such as jira, linear, trello tracking_system: "file-system" # Options: file-system, Future will support other options from config of mcp such as jira, linear, trello
project_key: "NOKEY" # Placeholder for tracker integrations; file-system uses a no-op key project_key: "NOKEY" # Placeholder for tracker integrations; file-system uses a no-op key
story_location: "{config_source}:implementation_artifacts" # Relative path for file-system, Future will support URL for Jira/Linear/Trello story_location: "{implementation_artifacts}" # Relative path for file-system, Future will support URL for Jira/Linear/Trello
story_location_absolute: "{config_source}:implementation_artifacts" # Absolute path for file operations story_location_absolute: "{implementation_artifacts}" # Absolute path for file operations
# Source files (file-system only) # Source files (file-system only)
epics_location: "{planning_artifacts}" # Directory containing epic*.md files epics_location: "{planning_artifacts}" # Directory containing epic*.md files
epics_pattern: "epic*.md" # Pattern to find epic files epics_pattern: "epic*.md" # Pattern to find epic files
# Output configuration # Output configuration
status_file: "{implementation_artifacts}/sprint-status.yaml" status_file: "{implementation_artifacts}/sprint-status.yaml"
# Smart input file references - handles both whole docs and sharded docs # Smart input file references - handles both whole docs and sharded docs
# Priority: Whole document first, then sharded version # Priority: Whole document first, then sharded version
@ -43,8 +39,8 @@ variables:
input_file_patterns: input_file_patterns:
epics: epics:
description: "All epics with user stories" description: "All epics with user stories"
whole: "{output_folder}/*epic*.md" whole: "{planning_artifacts}/*epic*.md"
sharded: "{output_folder}/*epic*/*.md" sharded: "{planning_artifacts}/*epic*/*.md"
load_strategy: "FULL_LOAD" load_strategy: "FULL_LOAD"
# Output configuration # Output configuration

View File

@ -5,23 +5,17 @@ author: "BMad"
# Critical variables from config # Critical variables from config
config_source: "{project-root}/_bmad/bmm/config.yaml" config_source: "{project-root}/_bmad/bmm/config.yaml"
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"
document_output_language: "{config_source}:document_output_language" document_output_language: "{config_source}:document_output_language"
date: system-generated
implementation_artifacts: "{config_source}:implementation_artifacts" implementation_artifacts: "{config_source}:implementation_artifacts"
planning_artifacts: "{config_source}:planning_artifacts"
project_context: "**/project-context.md"
# Workflow components # Workflow components
installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/sprint-status" installed_path: "{project-root}/_bmad/bmm/workflows/4-implementation/sprint-status"
instructions: "{installed_path}/instructions.md" instructions: "{installed_path}/instructions.md"
# Inputs # Inputs
variables: sprint_status_file: "{implementation_artifacts}/sprint-status.yaml"
sprint_status_file: "{implementation_artifacts}/sprint-status.yaml"
tracking_system: "file-system"
# Smart input file references # Smart input file references
input_file_patterns: input_file_patterns:

View File

@ -28,7 +28,7 @@ This uses **step-file architecture** for focused execution:
Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve: Load config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
- `user_name`, `communication_language`, `user_skill_level` - `user_name`, `communication_language`, `user_skill_level`
- `output_folder`, `planning_artifacts`, `implementation_artifacts` - `planning_artifacts`, `implementation_artifacts`
- `date` as system-generated current datetime - `date` as system-generated current datetime
- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}` - ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`

View File

@ -76,7 +76,7 @@ a) **Before asking detailed questions, do a rapid scan to understand the landsca
b) **Check for existing context docs:** b) **Check for existing context docs:**
- Check `{output_folder}` and `{planning_artifacts}`for planning documents (PRD, architecture, epics, research) - Check `{implementation_artifacts}` and `{planning_artifacts}`for planning documents (PRD, architecture, epics, research)
- Check for `**/project-context.md` - if it exists, skim for patterns and conventions - Check for `**/project-context.md` - if it exists, skim for patterns and conventions
- Check for any existing stories or specs related to user's request - Check for any existing stories or specs related to user's request

View File

@ -68,7 +68,7 @@ This uses **step-file architecture** for disciplined execution:
Load and read full config from `{main_config}` and resolve: Load and read full config from `{main_config}` and resolve:
- `project_name`, `output_folder`, `planning_artifacts`, `implementation_artifacts`, `user_name` - `project_name`, `planning_artifacts`, `implementation_artifacts`, `user_name`
- `communication_language`, `document_output_language`, `user_skill_level` - `communication_language`, `document_output_language`, `user_skill_level`
- `date` as system-generated current datetime - `date` as system-generated current datetime
- `project_context` = `**/project-context.md` (load if exists) - `project_context` = `**/project-context.md` (load if exists)

View File

@ -57,7 +57,7 @@
<step n="2" goal="Check for resumability and determine workflow mode"> <step n="2" goal="Check for resumability and determine workflow mode">
<critical>SMART LOADING STRATEGY: Check state file FIRST before loading any CSV files</critical> <critical>SMART LOADING STRATEGY: Check state file FIRST before loading any CSV files</critical>
<action>Check for existing state file at: {output_folder}/project-scan-report.json</action> <action>Check for existing state file at: {project_knowledge}/project-scan-report.json</action>
<check if="project-scan-report.json exists"> <check if="project-scan-report.json exists">
<action>Read state file and extract: timestamps, mode, scan_level, current_step, completed_steps, project_classification</action> <action>Read state file and extract: timestamps, mode, scan_level, current_step, completed_steps, project_classification</action>
@ -107,8 +107,8 @@ Your choice [1/2/3]:
</check> </check>
<check if="user selects 2"> <check if="user selects 2">
<action>Create archive directory: {output_folder}/.archive/</action> <action>Create archive directory: {project_knowledge}/.archive/</action>
<action>Move old state file to: {output_folder}/.archive/project-scan-report-{{timestamp}}.json</action> <action>Move old state file to: {project_knowledge}/.archive/project-scan-report-{{timestamp}}.json</action>
<action>Set resume_mode = false</action> <action>Set resume_mode = false</action>
<action>Continue to Step 0.5</action> <action>Continue to Step 0.5</action>
</check> </check>
@ -120,7 +120,7 @@ Your choice [1/2/3]:
<check if="state file age >= 24 hours"> <check if="state file age >= 24 hours">
<action>Display: "Found old state file (>24 hours). Starting fresh scan."</action> <action>Display: "Found old state file (>24 hours). Starting fresh scan."</action>
<action>Archive old state file to: {output_folder}/.archive/project-scan-report-{{timestamp}}.json</action> <action>Archive old state file to: {project_knowledge}/.archive/project-scan-report-{{timestamp}}.json</action>
<action>Set resume_mode = false</action> <action>Set resume_mode = false</action>
<action>Continue to Step 0.5</action> <action>Continue to Step 0.5</action>
</check> </check>
@ -128,7 +128,7 @@ Your choice [1/2/3]:
</step> </step>
<step n="3" goal="Check for existing documentation and determine workflow mode" if="resume_mode == false"> <step n="3" goal="Check for existing documentation and determine workflow mode" if="resume_mode == false">
<action>Check if {output_folder}/index.md exists</action> <action>Check if {project_knowledge}/index.md exists</action>
<check if="index.md exists"> <check if="index.md exists">
<action>Read existing index.md to extract metadata (date, project structure, parts count)</action> <action>Read existing index.md to extract metadata (date, project structure, parts count)</action>
@ -195,7 +195,7 @@ Your choice [1/2/3]:
- Mode: {{workflow_mode}} - Mode: {{workflow_mode}}
- Scan Level: {{scan_level}} - Scan Level: {{scan_level}}
- Output: {output_folder}/index.md and related files - Output: {project_knowledge}/index.md and related files
{{#if status_file_found}} {{#if status_file_found}}
**Status Updated:** **Status Updated:**

View File

@ -45,9 +45,9 @@
"type": "string", "type": "string",
"description": "Absolute path to project root directory" "description": "Absolute path to project root directory"
}, },
"output_folder": { "project_knowledge": {
"type": "string", "type": "string",
"description": "Absolute path to output folder" "description": "Absolute path to project knowledge folder"
}, },
"completed_steps": { "completed_steps": {
"type": "array", "type": "array",

View File

@ -6,7 +6,7 @@ author: "BMad"
# Critical variables # Critical variables
config_source: "{project-root}/_bmad/bmm/config.yaml" config_source: "{project-root}/_bmad/bmm/config.yaml"
output_folder: "{config_source}:project_knowledge" project_knowledge: "{config_source}:project_knowledge"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language" document_output_language: "{config_source}:document_output_language"

View File

@ -194,7 +194,7 @@ This will read EVERY file in this area. Proceed? [y/n]
<action>Load complete deep-dive template from: {installed_path}/templates/deep-dive-template.md</action> <action>Load complete deep-dive template from: {installed_path}/templates/deep-dive-template.md</action>
<action>Fill template with all collected data from steps 13b-13d</action> <action>Fill template with all collected data from steps 13b-13d</action>
<action>Write filled template to: {output_folder}/deep-dive-{{sanitized_target_name}}.md</action> <action>Write filled template to: {project_knowledge}/deep-dive-{{sanitized_target_name}}.md</action>
<action>Validate deep-dive document completeness</action> <action>Validate deep-dive document completeness</action>
<template-output>deep_dive_documentation</template-output> <template-output>deep_dive_documentation</template-output>
@ -241,7 +241,7 @@ Detailed exhaustive analysis of specific areas:
## Deep-Dive Documentation Complete! ✓ ## Deep-Dive Documentation Complete! ✓
**Generated:** {output_folder}/deep-dive-{{target_name}}.md **Generated:** {project_knowledge}/deep-dive-{{target_name}}.md
**Files Analyzed:** {{file_count}} **Files Analyzed:** {{file_count}}
**Lines of Code Scanned:** {{total_loc}} **Lines of Code Scanned:** {{total_loc}}
**Time Taken:** ~{{duration}} **Time Taken:** ~{{duration}}
@ -255,7 +255,7 @@ Detailed exhaustive analysis of specific areas:
- Related code and reuse opportunities - Related code and reuse opportunities
- Implementation guidance - Implementation guidance
**Index Updated:** {output_folder}/index.md now includes link to this deep-dive **Index Updated:** {project_knowledge}/index.md now includes link to this deep-dive
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
</action> </action>
@ -278,7 +278,7 @@ Your choice [1/2]:
All deep-dive documentation complete! All deep-dive documentation complete!
**Master Index:** {output_folder}/index.md **Master Index:** {project_knowledge}/index.md
**Deep-Dives Generated:** {{deep_dive_count}} **Deep-Dives Generated:** {{deep_dive_count}}
These comprehensive docs are now ready for: These comprehensive docs are now ready for:

View File

@ -8,7 +8,7 @@ parent_workflow: "{project-root}/_bmad/bmm/workflows/document-project/workflow.y
# Critical variables inherited from parent # Critical variables inherited from parent
config_source: "{project-root}/_bmad/bmb/config.yaml" config_source: "{project-root}/_bmad/bmb/config.yaml"
output_folder: "{config_source}:output_folder" project_knowledge: "{config_source}:project_knowledge"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
date: system-generated date: system-generated

View File

@ -43,7 +43,7 @@ This workflow uses a single comprehensive CSV file to intelligently document you
</step> </step>
<step n="0.6" goal="Check for existing documentation and determine workflow mode"> <step n="0.6" goal="Check for existing documentation and determine workflow mode">
<action>Check if {output_folder}/index.md exists</action> <action>Check if {project_knowledge}/index.md exists</action>
<check if="index.md exists"> <check if="index.md exists">
<action>Read existing index.md to extract metadata (date, project structure, parts count)</action> <action>Read existing index.md to extract metadata (date, project structure, parts count)</action>
@ -127,7 +127,7 @@ Your choice [1/2/3] (default: 1):
<action>Display: "Using Exhaustive Scan (reading all source files)"</action> <action>Display: "Using Exhaustive Scan (reading all source files)"</action>
</action> </action>
<action>Initialize state file: {output_folder}/project-scan-report.json</action> <action>Initialize state file: {project_knowledge}/project-scan-report.json</action>
<critical>Every time you touch the state file, record: step id, human-readable summary (what you actually did), precise timestamp, and any outputs written. Vague phrases are unacceptable.</critical> <critical>Every time you touch the state file, record: step id, human-readable summary (what you actually did), precise timestamp, and any outputs written. Vague phrases are unacceptable.</critical>
<action>Write initial state: <action>Write initial state:
{ {
@ -136,7 +136,7 @@ Your choice [1/2/3] (default: 1):
"mode": "{{workflow_mode}}", "mode": "{{workflow_mode}}",
"scan_level": "{{scan_level}}", "scan_level": "{{scan_level}}",
"project_root": "{{project_root_path}}", "project_root": "{{project_root_path}}",
"output_folder": "{{output_folder}}", "project_knowledge": "{{project_knowledge}}",
"completed_steps": [], "completed_steps": [],
"current_step": "step_1", "current_step": "step_1",
"findings": {}, "findings": {},
@ -325,7 +325,7 @@ findings.batches_completed: [
</check> </check>
<action>Build API contracts catalog</action> <action>Build API contracts catalog</action>
<action>IMMEDIATELY write to: {output_folder}/api-contracts-{part_id}.md</action> <action>IMMEDIATELY write to: {project_knowledge}/api-contracts-{part_id}.md</action>
<action>Validate document has all required sections</action> <action>Validate document has all required sections</action>
<action>Update state file with output generated</action> <action>Update state file with output generated</action>
<action>PURGE detailed API data, keep only: "{{api_count}} endpoints documented"</action> <action>PURGE detailed API data, keep only: "{{api_count}} endpoints documented"</action>
@ -346,7 +346,7 @@ findings.batches_completed: [
</check> </check>
<action>Build database schema documentation</action> <action>Build database schema documentation</action>
<action>IMMEDIATELY write to: {output_folder}/data-models-{part_id}.md</action> <action>IMMEDIATELY write to: {project_knowledge}/data-models-{part_id}.md</action>
<action>Validate document completeness</action> <action>Validate document completeness</action>
<action>Update state file with output generated</action> <action>Update state file with output generated</action>
<action>PURGE detailed schema data, keep only: "{{table_count}} tables documented"</action> <action>PURGE detailed schema data, keep only: "{{table_count}} tables documented"</action>
@ -805,7 +805,7 @@ When a document SHOULD be generated but wasn't (due to quick scan, missing data,
<step n="11" goal="Validate and review generated documentation" if="workflow_mode != deep_dive"> <step n="11" goal="Validate and review generated documentation" if="workflow_mode != deep_dive">
<action>Show summary of all generated files: <action>Show summary of all generated files:
Generated in {{output_folder}}/: Generated in {{project_knowledge}}/:
{{file_list_with_sizes}} {{file_list_with_sizes}}
</action> </action>
@ -823,7 +823,7 @@ Generated in {{output_folder}}/:
3. Extract document metadata from each match for user selection 3. Extract document metadata from each match for user selection
</critical> </critical>
<action>Read {output_folder}/index.md</action> <action>Read {project_knowledge}/index.md</action>
<action>Scan for incomplete documentation markers: <action>Scan for incomplete documentation markers:
Step 1: Search for exact pattern "_(To be generated)_" (case-sensitive) Step 1: Search for exact pattern "_(To be generated)_" (case-sensitive)
@ -1065,9 +1065,9 @@ Enter number(s) separated by commas (e.g., "1,3,5"), or type 'all':
## Project Documentation Complete! ✓ ## Project Documentation Complete! ✓
**Location:** {{output_folder}}/ **Location:** {{project_knowledge}}/
**Master Index:** {{output_folder}}/index.md **Master Index:** {{project_knowledge}}/index.md
👆 This is your primary entry point for AI-assisted development 👆 This is your primary entry point for AI-assisted development
**Generated Documentation:** **Generated Documentation:**
@ -1076,9 +1076,9 @@ Enter number(s) separated by commas (e.g., "1,3,5"), or type 'all':
**Next Steps:** **Next Steps:**
1. Review the index.md to familiarize yourself with the documentation structure 1. Review the index.md to familiarize yourself with the documentation structure
2. When creating a brownfield PRD, point the PRD workflow to: {{output_folder}}/index.md 2. When creating a brownfield PRD, point the PRD workflow to: {{project_knowledge}}/index.md
3. For UI-only features: Reference {{output_folder}}/architecture-{{ui_part_id}}.md 3. For UI-only features: Reference {{project_knowledge}}/architecture-{{ui_part_id}}.md
4. For API-only features: Reference {{output_folder}}/architecture-{{api_part_id}}.md 4. For API-only features: Reference {{project_knowledge}}/architecture-{{api_part_id}}.md
5. For full-stack features: Reference both part architectures + integration-architecture.md 5. For full-stack features: Reference both part architectures + integration-architecture.md
**Verification Recap:** **Verification Recap:**
@ -1101,6 +1101,6 @@ When ready to plan new features, run the PRD workflow and provide this index as
- Write final state file - Write final state file
</action> </action>
<action>Display: "State file saved: {{output_folder}}/project-scan-report.json"</action> <action>Display: "State file saved: {{project_knowledge}}/project-scan-report.json"</action>
</workflow> </workflow>

View File

@ -8,7 +8,7 @@ parent_workflow: "{project-root}/_bmad/bmm/workflows/document-project/workflow.y
# Critical variables inherited from parent # Critical variables inherited from parent
config_source: "{project-root}/_bmad/bmb/config.yaml" config_source: "{project-root}/_bmad/bmb/config.yaml"
output_folder: "{config_source}:output_folder" project_knowledge: "{config_source}:project_knowledge"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
date: system-generated date: system-generated

View File

@ -5,7 +5,6 @@ author: "BMad"
# Critical variables from config # Critical variables from config
config_source: "{project-root}/_bmad/bmm/config.yaml" config_source: "{project-root}/_bmad/bmm/config.yaml"
output_folder: "{config_source}:output_folder"
implementation_artifacts: "{config_source}:implementation_artifacts" implementation_artifacts: "{config_source}:implementation_artifacts"
user_name: "{config_source}:user_name" user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language" communication_language: "{config_source}:communication_language"
@ -19,10 +18,8 @@ validation: "{installed_path}/checklist.md"
template: false template: false
# Variables and inputs # Variables and inputs
variables: test_dir: "{project-root}/tests" # Root test directory
# Directory paths source_dir: "{project-root}" # Source code directory
test_dir: "{project-root}/tests" # Root test directory
source_dir: "{project-root}" # Source code directory
# Output configuration # Output configuration
default_output_file: "{implementation_artifacts}/tests/test-summary.md" default_output_file: "{implementation_artifacts}/tests/test-summary.md"