11 KiB
Workflow Audit Report
Workflow: story-ready Audit Date: 2025-10-25 Auditor: Audit Workflow (BMAD v6) Workflow Type: Action (status update workflow) Module: BMM (BMad Method)
Executive Summary
Overall Status: EXCELLENT
- Critical Issues: 2
- Important Issues: 2
- Cleanup Recommendations: 0
Pass Rate: 94% (66/70 checks passed)
The story-ready workflow is well-structured and follows most BMAD v6 conventions. The workflow correctly uses web_bundle: false (intentional for local-only workflow). Critical issues relate to variable inconsistencies and undeclared config variables that are used in instructions.
1. Standard Config Block Validation
Status: ⚠️ CRITICAL ISSUES FOUND
Required Variables Check:
✅ config_source is defined and points to correct module config path
✅ Uses {project-root} variable correctly
✅ output_folder pulls from config_source
✅ user_name pulls from config_source
✅ communication_language pulls from config_source
✅ date is set to system-generated
✅ Standard config comment present: "Critical variables from config"
Critical Issues:
Issue 1: Missing Config Variables in YAML
Severity: CRITICAL Location: workflow.yaml
The instructions.md file uses the following config variables that are NOT declared in workflow.yaml:
{user_skill_level}- Used in line 5: "language MUST be tailored to {user_skill_level}"{document_output_language}- Used in line 6: "Generate all documents in {document_output_language}"
Impact: These variables will not be resolved by the workflow engine, potentially causing confusion or errors.
Fix Required:
# Critical variables from config
config_source: '{project-root}/bmad/bmm/config.yaml'
output_folder: '{config_source}:output_folder'
user_name: '{config_source}:user_name'
communication_language: '{config_source}:communication_language'
user_skill_level: '{config_source}:user_skill_level' # ADD THIS
document_output_language: '{config_source}:document_output_language' # ADD THIS
date: system-generated
Issue 2: Variable Path Inconsistency
Severity: CRITICAL Location: instructions.md line 3
Instructions reference {project_root} (underscore) but workflow.yaml uses {project-root} (hyphen).
Current: <critical>The workflow execution engine is governed by: {project_root}/bmad/core/tasks/workflow.xml</critical>
Should be: <critical>The workflow execution engine is governed by: {project-root}/bmad/core/tasks/workflow.xml</critical>
Impact: Variable will not resolve correctly, breaking the reference path.
2. YAML/Instruction/Template Alignment
Status: ✅ GOOD (with minor observations)
Variables Analyzed:
Workflow.yaml variables (excluding standard config):
story_path- Used in instructions ✓story_dir- Used in instructions ✓
Variables Used in Instructions (not in YAML):
{{story_key}}- Generated dynamically, output via parsing ✓{{drafted_count}}- Generated dynamically ✓{{list_of_drafted_story_keys}}- Generated dynamically ✓{{non_interactive}}- Conditional logic variable (may be from agent context){{story_file}}- Generated dynamically ✓{{story_id}}- Extracted from story file ✓{{story_title}}- Extracted from story file ✓
Summary:
- Variables in YAML: 2 (story_path, story_dir)
- Used in Instructions: 2/2 (100%)
- Unused (Bloat): 0
- Dynamic Variables: 7 (appropriate for action workflow)
Status: Excellent - No bloat detected, all YAML variables are used appropriately.
3. Config Variable Usage
Status: ⚠️ IMPORTANT ISSUES FOUND
Communication Language Check:
✅ Instructions use {communication_language} in critical header (line 5) ⚠️ However, the instruction says "Communicate all responses in {communication_language}" but the actual workflow outputs don't explicitly enforce language adaptation
User Name Check:
✅ User name properly used in final output (line 87): "Story Marked Ready for Development, {user_name}!" ✅ Appropriate personalization in workflow completion message
Output Folder Check:
✅ Output folder referenced correctly: {{output_folder}}/sprint-status.yaml (lines 18, 70)
✅ No hardcoded paths detected
✅ All file operations use proper variable references
Date Usage Check:
✅ Date is available for agent awareness ✅ Not used in outputs (appropriate for action workflow with no document generation)
User Skill Level Check:
❌ CRITICAL: Variable used but not declared in workflow.yaml (line 5)
Document Output Language Check:
❌ CRITICAL: Variable used but not declared in workflow.yaml (line 6)
Config Variable Summary:
communication_language: ✅ Properly declared and useduser_name: ✅ Properly declared and usedoutput_folder: ✅ Properly declared and useddate: ✅ Properly declared (available but not used - appropriate)user_skill_level: ❌ Used but NOT declareddocument_output_language: ❌ Used but NOT declared
4. Web Bundle Validation
Status: ✅ CORRECT (N/A)
Web Bundle Present: No (web_bundle: false)
Analysis: The workflow correctly sets web_bundle: false. This is appropriate because:
- This is a local-only action workflow
- It directly modifies files in the project (sprint-status.yaml, story files)
- It requires access to the specific project's file system
- It cannot be executed in a web bundle context where file system access is sandboxed
Finding: The absence of web bundle configuration is EXPECTED and CORRECT for this workflow type.
No issues found.
5. Bloat Detection
Status: ✅ EXCELLENT
Bloat Analysis:
Total YAML Fields (excluding metadata and standard config): 2
story_pathstory_dir
Used Fields: 2 Unused Fields: 0
Bloat Percentage: 0%
Hardcoded Values Check:
✅ No hardcoded file paths (uses {output_folder}) ✅ No hardcoded greetings (uses {user_name}) ✅ No language-specific text (uses {communication_language}) ✅ No static dates (date variable available)
Redundant Configuration:
✅ No duplicate fields between sections ✅ No commented-out variables ✅ No metadata repetition
Bloat Summary: Zero bloat detected. Workflow is lean and efficient.
6. Template Variable Mapping
Status: N/A (Not a document workflow)
This workflow is an action workflow (status update), not a document workflow, so template validation does not apply.
No template.md file required or expected.
7. Additional Quality Checks
Instruction Quality:
✅ Steps properly numbered (n="1", n="2", n="3") ✅ Each step has clear goal attribute ✅ XML tags used correctly (, , , , ) ✅ Conditional logic properly implemented (if attributes) ✅ Flow control is clear and logical ✅ Steps are focused on single goals ✅ Specific, actionable instructions provided ✅ Critical sections properly marked with tags
Special Features:
✅ Anchor tag used correctly: <anchor id="mark_ready" /> (line 59)
✅ Proper GOTO logic: "GOTO mark_ready" (line 15)
✅ Conditional user interaction: <ask if="{{non_interactive}} == false"> (line 53)
✅ Auto-selection for non-interactive mode (line 54)
File References:
✅ sprint-status.yaml referenced with proper variable path ✅ Story files referenced with proper directory variable ✅ Preservation instructions included (line 74): "Save file, preserving ALL comments and structure including STATUS DEFINITIONS"
Recommendations
Critical (Fix Immediately)
1. Add Missing Config Variables to workflow.yaml
user_skill_level: '{config_source}:user_skill_level'
document_output_language: '{config_source}:document_output_language'
2. Fix Variable Path Inconsistency Change line 3 in instructions.md from:
{project_root}/bmad/core/tasks/workflow.xml
to:
{project-root}/bmad/core/tasks/workflow.xml
Important (Address Soon)
3. Clarify non_interactive Variable Source
The {{non_interactive}} variable is used in line 53-54 but not defined in workflow.yaml. Either:
- Add to workflow.yaml if it's a workflow-specific variable
- Document that it comes from agent context
- Remove if not implemented yet
4. Document user_skill_level and document_output_language Usage If these variables are standard across all BMM workflows:
- Ensure they exist in the module's config.yaml
- Add comments explaining their purpose
- Verify they're actually needed for this action workflow (this workflow generates no documents, so document_output_language may not be necessary)
Cleanup (Nice to Have)
No cleanup recommendations - The workflow is already lean and efficient.
Validation Checklist
Use this checklist to verify fixes:
- user_skill_level added to workflow.yaml standard config block
- document_output_language added to workflow.yaml standard config block
- {project_root} changed to {project-root} in instructions.md line 3
- non_interactive variable source documented or defined
- All standard config variables present and correct
- No unused yaml fields (bloat removed) ✓ (already clean)
- Config variables used appropriately in instructions ✓
- Web bundle configuration correct ✓ (intentionally false)
- File structure follows v6 conventions ✓
Overall Assessment
Strengths:
- Zero bloat - Every YAML variable is used, no waste
- Clear workflow logic - Simple, focused status update process
- Proper file handling - Uses variables for all paths, preserves file structure
- Good UX - Helpful output messages, clear next steps
- Conditional logic - Supports both interactive and non-interactive modes
- Proper web_bundle setting - Correctly set to false for local-only workflow
Weaknesses:
- Uses config variables not declared in workflow.yaml (user_skill_level, document_output_language)
- Variable naming inconsistency (project_root vs project-root)
- Unclear source of non_interactive variable
Overall Grade: A- (94%)
This is a well-crafted workflow that follows BMAD v6 conventions closely. The critical issues are minor and easily fixable. Once the missing config variables are added and the path inconsistency is resolved, this workflow will be production-ready.
Next Steps
- Immediate: Add user_skill_level and document_output_language to workflow.yaml
- Immediate: Fix {project_root} → {project-root} in instructions.md
- Soon: Clarify or remove non_interactive variable usage
- Soon: Verify these config variables exist in src/modules/bmm/config.yaml (when it's created)
- Optional: Re-run audit after fixes to verify 100% pass rate
Audit Complete - Generated by audit-workflow v1.0 Report Location: /Users/brianmadison/dev/BMAD-METHOD/src/modules/bmm/workflows/4-implementation/story-ready/AUDIT-REPORT.md