mirror of
https://github.com/bmadcode/BMAD-METHOD.git
synced 2025-12-29 16:14:59 +00:00
refactor(bmm,cis,core): Align diagram workflows with agile roles and distribute capabilities
## The Tale of the Frame Expert
Once upon a time, BMad Method had a specialized agent called Frame Expert.
This agent was the master of all visual artifacts - flowcharts, diagrams,
wireframes, data flows. Whenever anyone needed a diagram, they called upon
Frame Expert. The agent lived in its own isolated domain with four dedicated
workflows and a library of shared templates.
## The Awakening
But something felt wrong. Teams using BMad Method were meant to mirror real
agile teams - Product Managers, Architects, UX Designers, Tech Writers,
Developers. Each agent represented an authentic role you'd find in any
software team.
Except Frame Expert.
No real agile team has a "Frame Expert" or "Diagram Specialist" who creates
all visual artifacts. In real teams, Architects diagram system architecture.
PMs flowchart processes. UX Designers wireframe interfaces. Tech Writers
create documentation diagrams. The visuals emerge from the domain experts
who need them, not from a centralized diagram factory.
Frame Expert was an abstraction that made technical sense but violated the
very soul of BMad Method - authentic agile role modeling.
## The Transformation
And so Frame Expert was dissolved, its knowledge distributed to those who
truly needed it:
**The Architect** inherited system architecture diagrams and data flows -
the blueprints of technical systems they design.
**The Product Manager** received process flowcharts - the visual maps of
features and workflows they orchestrate.
**The UX Designer** claimed wireframes - the interface sketches that bring
their vision to life.
**The Tech Writer** gained all diagram types - the visual aids that clarify
their documentation.
Each agent now creates diagrams in their domain, using their expertise,
serving their purpose.
## The Shared Knowledge
But the wisdom of diagram creation itself - the Excalidraw templates, the
component libraries, the validation patterns - this knowledge was too
valuable to scatter. It was elevated to core resources, where both BMM
agents AND the new CIS presentation-master agent could draw upon it.
Shared infrastructure for common needs. Distributed execution for domain
expertise.
## The Ripple Effects
With diagrams now properly distributed, other misalignments became visible:
Epic creation was happening in Phase 2 (Planning), before Architecture
existed. But epics need architectural context - API contracts, data models,
technical decisions. So epic creation migrated to Phase 3 (Solutioning),
after Architecture provides that foundation.
Workflow paths were updated. Documentation gained visual flowcharts showing
the complete journey. Agent naming standards were clarified - filenames are
stable roles, persona names are user dreams.
## What Changed
**Removed:**
- frame-expert.agent.yaml (the centralized specialist)
- All frame-expert workflows and shared resources
- Phase 2 epic creation workflow (wrong timing)
- game-design workflow path (consolidated to method track)
- v6-open-items.md (planning doc, now complete)
**Distributed Diagram Capabilities:**
- Architect: create-excalidraw-diagram, create-excalidraw-dataflow
- PM: create-excalidraw-flowchart
- Tech Writer: create-excalidraw-{diagram,dataflow,flowchart}, generate-mermaid
- UX Designer: create-excalidraw-wireframe
**Created:**
- src/core/resources/ (shared diagram context for all modules)
- src/modules/cis/agents/presentation-master.agent.yaml (visual comms specialist)
- src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/ (epic creation's new home)
- src/modules/bmm/workflows/diagrams/ (distributed diagram implementations)
- src/modules/bmm/docs/images/ (workflow visualization assets)
**Enhanced:**
- All agent definitions with domain-appropriate diagram workflows
- Documentation with embedded workflow diagrams and visual guides
- Agent compilation docs with critical naming convention rules
- All 4 workflow paths (enterprise/method × brownfield/greenfield)
**Fixed:**
- Epic creation now in Phase 3 after Architecture
- Story context path variables in BMGD module
- PRD workflow descriptions (epics moved to Phase 3)
## For Users
The Frame Expert commands are gone. In their place:
- Need architecture diagrams? Ask `/architect`
- Need process flows? Ask `/pm`
- Need wireframes? Ask `/ux-designer`
- Need documentation visuals? Ask `/tech-writer`
Each expert creates diagrams in their domain, with their context, using
their judgment.
This is how real teams work.
This commit is contained in:
@@ -66,13 +66,13 @@ web_bundle:
|
||||
- "{bmad_folder}/bmm/workflows/2-plan-workflows/prd/checklist.md"
|
||||
|
||||
# Child workflow and its files
|
||||
- "{bmad_folder}/bmm/workflows/2-plan-workflows/create-epics-and-stories/workflow.yaml"
|
||||
- "{bmad_folder}/bmm/workflows/2-plan-workflows/create-epics-and-stories/instructions.md"
|
||||
- "{bmad_folder}/bmm/workflows/2-plan-workflows/create-epics-and-stories/epics-template.md"
|
||||
- "{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml"
|
||||
- "{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md"
|
||||
- "{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md"
|
||||
|
||||
# Task dependencies (referenced in instructions.md)
|
||||
- "{bmad_folder}/core/tasks/workflow.xml"
|
||||
- "{bmad_folder}/core/tasks/advanced-elicitation.xml"
|
||||
- "{bmad_folder}/core/tasks/advanced-elicitation-methods.csv"
|
||||
child_workflows:
|
||||
- create-epics-and-stories: "{bmad_folder}/bmm/workflows/2-plan-workflows/create-epics-and-stories/workflow.yaml"
|
||||
- create-epics-and-stories: "{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml"
|
||||
|
||||
@@ -43,7 +43,7 @@ input_file_patterns:
|
||||
load_strategy: "FULL_LOAD"
|
||||
|
||||
# Module path and component files
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/2-plan-workflows/create-epics-and-stories"
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
template: "{installed_path}/epics-template.md"
|
||||
|
||||
@@ -56,8 +56,8 @@ web_bundle:
|
||||
name: "create-epics-and-stories"
|
||||
description: "Transform PRD requirements into bite-sized stories organized in epics for 200k context dev agents"
|
||||
author: "BMad"
|
||||
instructions: "{bmad_folder}/bmm/workflows/2-plan-workflows/create-epics-and-stories/instructions.md"
|
||||
template: "{bmad_folder}/bmm/workflows/2-plan-workflows/create-epics-and-stories/epics-template.md"
|
||||
instructions: "{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md"
|
||||
template: "{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md"
|
||||
web_bundle_files:
|
||||
- "{bmad_folder}/bmm/workflows/2-plan-workflows/create-epics-and-stories/instructions.md"
|
||||
- "{bmad_folder}/bmm/workflows/2-plan-workflows/create-epics-and-stories/epics-template.md"
|
||||
- "{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md"
|
||||
- "{bmad_folder}/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md"
|
||||
@@ -9,7 +9,7 @@ output_folder: "{config_source}:output_folder"
|
||||
user_name: "{config_source}:user_name"
|
||||
communication_language: "{config_source}:communication_language"
|
||||
document_output_language: "{config_source}:document_output_language"
|
||||
story_path: "{config_source}:sprint_artifacts/stories"
|
||||
story_path: "{config_source}:sprint_artifacts"
|
||||
date: system-generated
|
||||
sprint_artifacts: "{config_source}:sprint_artifacts"
|
||||
sprint_status: "{sprint_artifacts}/sprint-status.yaml || {output_folder}/sprint-status.yaml"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<workflow>
|
||||
|
||||
<step n="0" goal="Contextual Analysis">
|
||||
<action>Review user's request and extract: DFD level, processes, data stores, external entities, save location</action>
|
||||
<action>Review user's request and extract: DFD level, processes, data stores, external entities</action>
|
||||
<check if="ALL requirements clear"><action>Skip to Step 4</action></check>
|
||||
</step>
|
||||
|
||||
@@ -20,14 +20,13 @@
|
||||
3. Level 2 DFD - Detailed sub-processes
|
||||
4. Custom - Specify your requirements
|
||||
</action>
|
||||
<action>WAIT for selection, store in {{dfd_level}}</action>
|
||||
<action>WAIT for selection</action>
|
||||
</step>
|
||||
|
||||
<step n="2" goal="Gather Requirements" elicit="true">
|
||||
<action>Ask process count</action>
|
||||
<action>Ask data store count</action>
|
||||
<action>Ask external entity count</action>
|
||||
<action>Ask save location</action>
|
||||
<action>Ask: "Describe the processes, data stores, and external entities in your system"</action>
|
||||
<action>WAIT for user description</action>
|
||||
<action>Summarize what will be included and confirm with user</action>
|
||||
</step>
|
||||
|
||||
<step n="3" goal="Theme Setup" elicit="true">
|
||||
@@ -106,12 +105,12 @@
|
||||
<step n="7" goal="Optimize and Save">
|
||||
<action>Verify DFD rules compliance</action>
|
||||
<action>Strip unused elements and elements with isDeleted: true</action>
|
||||
<action>Save to {{save_location}}</action>
|
||||
<action>Save to {{default_output_file}}</action>
|
||||
</step>
|
||||
|
||||
<step n="8" goal="Validate JSON Syntax">
|
||||
<critical>NEVER delete the file if validation fails - always fix syntax errors</critical>
|
||||
<action>Run: node -e "JSON.parse(require('fs').readFileSync('{{save_location}}', 'utf8')); console.log('✓ Valid JSON')"</action>
|
||||
<action>Run: node -e "JSON.parse(require('fs').readFileSync('{{default_output_file}}', 'utf8')); console.log('✓ Valid JSON')"</action>
|
||||
<check if="validation fails (exit code 1)">
|
||||
<action>Read the error message carefully - it shows the syntax error and position</action>
|
||||
<action>Open the file and navigate to the error location</action>
|
||||
@@ -0,0 +1,27 @@
|
||||
name: create-excalidraw-dataflow
|
||||
description: "Create data flow diagrams (DFD) in Excalidraw format"
|
||||
author: "BMad"
|
||||
|
||||
# Config values
|
||||
config_source: "{project-root}/{bmad_folder}/bmm/config.yaml"
|
||||
output_folder: "{config_source}:output_folder"
|
||||
|
||||
# Workflow components
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/create-dataflow"
|
||||
shared_path: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/_shared"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
validation: "{installed_path}/checklist.md"
|
||||
|
||||
# Core Excalidraw resources (universal knowledge)
|
||||
helpers: "{project-root}/{bmad_folder}/core/resources/excalidraw/excalidraw-helpers.md"
|
||||
json_validation: "{project-root}/{bmad_folder}/core/resources/excalidraw/validate-json-instructions.md"
|
||||
|
||||
# Domain-specific resources (technical diagrams)
|
||||
templates: "{shared_path}/excalidraw-templates.yaml"
|
||||
library: "{shared_path}/excalidraw-library.json"
|
||||
|
||||
# Output file (respects user's configured output_folder)
|
||||
default_output_file: "{output_folder}/diagrams/dataflow-{timestamp}.excalidraw"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
@@ -8,7 +8,7 @@
|
||||
<workflow>
|
||||
|
||||
<step n="0" goal="Contextual Analysis">
|
||||
<action>Review user's request and extract: diagram type, components/entities, relationships, notation preferences, save location</action>
|
||||
<action>Review user's request and extract: diagram type, components/entities, relationships, notation preferences</action>
|
||||
<check if="ALL requirements clear"><action>Skip to Step 5</action></check>
|
||||
<check if="SOME requirements clear"><action>Only ask about missing info in Steps 1-2</action></check>
|
||||
</step>
|
||||
@@ -24,15 +24,14 @@
|
||||
6. Network Diagram
|
||||
7. Other
|
||||
</action>
|
||||
<action>WAIT for selection, store in {{diagram_type}}</action>
|
||||
<action>WAIT for selection</action>
|
||||
</step>
|
||||
|
||||
<step n="2" goal="Gather Requirements" elicit="true">
|
||||
<action>Ask component count (Small/Medium/Large/Very Large)</action>
|
||||
<action>Ask relationship types (Simple/Hierarchical/Many-to-many/Mixed)</action>
|
||||
<action>Ask notation standard (Standard/Simplified/Strict UML-ERD/Company specific)</action>
|
||||
<action>Ask save location (Default/Custom/Architecture folder/Specific folder)</action>
|
||||
<action>Store all responses in variables</action>
|
||||
<action>Ask: "Describe the components/entities and their relationships"</action>
|
||||
<action>Ask: "What notation standard? (Standard/Simplified/Strict UML-ERD)"</action>
|
||||
<action>WAIT for user input</action>
|
||||
<action>Summarize what will be included and confirm with user</action>
|
||||
</step>
|
||||
|
||||
<step n="3" goal="Check for Existing Theme" elicit="true">
|
||||
@@ -117,12 +116,12 @@
|
||||
|
||||
<step n="8" goal="Optimize and Save">
|
||||
<action>Strip unused elements and elements with isDeleted: true</action>
|
||||
<action>Save to {{save_location}}</action>
|
||||
<action>Save to {{default_output_file}}</action>
|
||||
</step>
|
||||
|
||||
<step n="9" goal="Validate JSON Syntax">
|
||||
<critical>NEVER delete the file if validation fails - always fix syntax errors</critical>
|
||||
<action>Run: node -e "JSON.parse(require('fs').readFileSync('{{save_location}}', 'utf8')); console.log('✓ Valid JSON')"</action>
|
||||
<action>Run: node -e "JSON.parse(require('fs').readFileSync('{{default_output_file}}', 'utf8')); console.log('✓ Valid JSON')"</action>
|
||||
<check if="validation fails (exit code 1)">
|
||||
<action>Read the error message carefully - it shows the syntax error and position</action>
|
||||
<action>Open the file and navigate to the error location</action>
|
||||
@@ -131,7 +130,7 @@
|
||||
<action>Re-run validation with the same command</action>
|
||||
<action>Repeat until validation passes</action>
|
||||
</check>
|
||||
<action>Once validation passes, confirm: "Diagram created at {{save_location}}. Open to view?"</action>
|
||||
<action>Once validation passes, confirm: "Diagram created at {{default_output_file}}. Open to view?"</action>
|
||||
</step>
|
||||
|
||||
<step n="10" goal="Validate Content">
|
||||
@@ -0,0 +1,27 @@
|
||||
name: create-excalidraw-diagram
|
||||
description: "Create system architecture diagrams, ERDs, UML diagrams, or general technical diagrams in Excalidraw format"
|
||||
author: "BMad"
|
||||
|
||||
# Config values
|
||||
config_source: "{project-root}/{bmad_folder}/bmm/config.yaml"
|
||||
output_folder: "{config_source}:output_folder"
|
||||
|
||||
# Workflow components
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/create-diagram"
|
||||
shared_path: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/_shared"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
validation: "{installed_path}/checklist.md"
|
||||
|
||||
# Core Excalidraw resources (universal knowledge)
|
||||
helpers: "{project-root}/{bmad_folder}/core/resources/excalidraw/excalidraw-helpers.md"
|
||||
json_validation: "{project-root}/{bmad_folder}/core/resources/excalidraw/validate-json-instructions.md"
|
||||
|
||||
# Domain-specific resources (technical diagrams)
|
||||
templates: "{shared_path}/excalidraw-templates.yaml"
|
||||
library: "{shared_path}/excalidraw-library.json"
|
||||
|
||||
# Output file (respects user's configured output_folder)
|
||||
default_output_file: "{output_folder}/diagrams/diagram-{timestamp}.excalidraw"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
@@ -38,7 +38,6 @@
|
||||
5. Other - Describe your specific flowchart needs
|
||||
</action>
|
||||
<action>WAIT for user selection (1-5)</action>
|
||||
<action>Store selection in {{flowchart_type}}</action>
|
||||
|
||||
<action>Ask Question 2: "How many main steps are in this flow?"</action>
|
||||
<action>Present numbered options:
|
||||
@@ -72,7 +71,7 @@
|
||||
<action>Ask for specific path</action>
|
||||
<action>WAIT for user input</action>
|
||||
</check>
|
||||
<action>Store final path in {{save_location}}</action>
|
||||
<action>Store final path in {{default_output_file}}</action>
|
||||
</step>
|
||||
|
||||
<step n="2" goal="Check for Existing Theme" elicit="true">
|
||||
@@ -217,12 +216,12 @@
|
||||
|
||||
<step n="7" goal="Optimize and Save">
|
||||
<action>Strip unused elements and elements with isDeleted: true</action>
|
||||
<action>Save to {{save_location}}</action>
|
||||
<action>Save to {{default_output_file}}</action>
|
||||
</step>
|
||||
|
||||
<step n="8" goal="Validate JSON Syntax">
|
||||
<critical>NEVER delete the file if validation fails - always fix syntax errors</critical>
|
||||
<action>Run: node -e "JSON.parse(require('fs').readFileSync('{{save_location}}', 'utf8')); console.log('✓ Valid JSON')"</action>
|
||||
<action>Run: node -e "JSON.parse(require('fs').readFileSync('{{default_output_file}}', 'utf8')); console.log('✓ Valid JSON')"</action>
|
||||
<check if="validation fails (exit code 1)">
|
||||
<action>Read the error message carefully - it shows the syntax error and position</action>
|
||||
<action>Open the file and navigate to the error location</action>
|
||||
@@ -231,7 +230,7 @@
|
||||
<action>Re-run validation with the same command</action>
|
||||
<action>Repeat until validation passes</action>
|
||||
</check>
|
||||
<action>Once validation passes, confirm with user: "Flowchart created at {{save_location}}. Open to view?"</action>
|
||||
<action>Once validation passes, confirm with user: "Flowchart created at {{default_output_file}}. Open to view?"</action>
|
||||
</step>
|
||||
|
||||
<step n="9" goal="Validate Content">
|
||||
@@ -0,0 +1,27 @@
|
||||
name: create-excalidraw-flowchart
|
||||
description: "Create a flowchart visualization in Excalidraw format for processes, pipelines, or logic flows"
|
||||
author: "BMad"
|
||||
|
||||
# Config values
|
||||
config_source: "{project-root}/{bmad_folder}/bmm/config.yaml"
|
||||
output_folder: "{config_source}:output_folder"
|
||||
|
||||
# Workflow components
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/create-flowchart"
|
||||
shared_path: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/_shared"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
validation: "{installed_path}/checklist.md"
|
||||
|
||||
# Core Excalidraw resources (universal knowledge)
|
||||
helpers: "{project-root}/{bmad_folder}/core/resources/excalidraw/excalidraw-helpers.md"
|
||||
json_validation: "{project-root}/{bmad_folder}/core/resources/excalidraw/validate-json-instructions.md"
|
||||
|
||||
# Domain-specific resources (technical diagrams)
|
||||
templates: "{shared_path}/excalidraw-templates.yaml"
|
||||
library: "{shared_path}/excalidraw-library.json"
|
||||
|
||||
# Output file (respects user's configured output_folder)
|
||||
default_output_file: "{output_folder}/diagrams/flowchart-{timestamp}.excalidraw"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
@@ -21,7 +21,7 @@
|
||||
4. Tablet App
|
||||
5. Multi-platform
|
||||
</action>
|
||||
<action>WAIT for selection, store in {{wireframe_type}}</action>
|
||||
<action>WAIT for selection</action>
|
||||
</step>
|
||||
|
||||
<step n="2" goal="Gather Requirements" elicit="true">
|
||||
@@ -108,12 +108,12 @@
|
||||
|
||||
<step n="8" goal="Optimize and Save">
|
||||
<action>Strip unused elements and elements with isDeleted: true</action>
|
||||
<action>Save to {{save_location}}</action>
|
||||
<action>Save to {{default_output_file}}</action>
|
||||
</step>
|
||||
|
||||
<step n="9" goal="Validate JSON Syntax">
|
||||
<critical>NEVER delete the file if validation fails - always fix syntax errors</critical>
|
||||
<action>Run: node -e "JSON.parse(require('fs').readFileSync('{{save_location}}', 'utf8')); console.log('✓ Valid JSON')"</action>
|
||||
<action>Run: node -e "JSON.parse(require('fs').readFileSync('{{default_output_file}}', 'utf8')); console.log('✓ Valid JSON')"</action>
|
||||
<check if="validation fails (exit code 1)">
|
||||
<action>Read the error message carefully - it shows the syntax error and position</action>
|
||||
<action>Open the file and navigate to the error location</action>
|
||||
@@ -0,0 +1,27 @@
|
||||
name: create-excalidraw-wireframe
|
||||
description: "Create website or app wireframes in Excalidraw format"
|
||||
author: "BMad"
|
||||
|
||||
# Config values
|
||||
config_source: "{project-root}/{bmad_folder}/bmm/config.yaml"
|
||||
output_folder: "{config_source}:output_folder"
|
||||
|
||||
# Workflow components
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/create-wireframe"
|
||||
shared_path: "{project-root}/{bmad_folder}/bmm/workflows/diagrams/_shared"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
validation: "{installed_path}/checklist.md"
|
||||
|
||||
# Core Excalidraw resources (universal knowledge)
|
||||
helpers: "{project-root}/{bmad_folder}/core/resources/excalidraw/excalidraw-helpers.md"
|
||||
json_validation: "{project-root}/{bmad_folder}/core/resources/excalidraw/validate-json-instructions.md"
|
||||
|
||||
# Domain-specific resources (technical diagrams)
|
||||
templates: "{shared_path}/excalidraw-templates.yaml"
|
||||
library: "{shared_path}/excalidraw-library.json"
|
||||
|
||||
# Output file (respects user's configured output_folder)
|
||||
default_output_file: "{output_folder}/diagrams/wireframe-{timestamp}.excalidraw"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
@@ -1,127 +0,0 @@
|
||||
# Excalidraw Element Creation Guidelines
|
||||
|
||||
## Text Width Calculation
|
||||
|
||||
For text elements inside shapes (labels):
|
||||
|
||||
```
|
||||
text_width = (text.length × fontSize × 0.6) + 20
|
||||
```
|
||||
|
||||
Round to nearest 10 for grid alignment.
|
||||
|
||||
## Element Grouping Rules
|
||||
|
||||
**CRITICAL:** When creating shapes with labels:
|
||||
|
||||
1. Generate unique IDs:
|
||||
- `shape-id` for the shape
|
||||
- `text-id` for the text
|
||||
- `group-id` for the group
|
||||
|
||||
2. Shape element must have:
|
||||
- `groupIds: [group-id]`
|
||||
- `boundElements: [{type: "text", id: text-id}]`
|
||||
|
||||
3. Text element must have:
|
||||
- `containerId: shape-id`
|
||||
- `groupIds: [group-id]` (SAME as shape)
|
||||
- `textAlign: "center"`
|
||||
- `verticalAlign: "middle"`
|
||||
- `width: calculated_width`
|
||||
|
||||
## Grid Alignment
|
||||
|
||||
- Snap all `x`, `y` coordinates to 20px grid
|
||||
- Formula: `Math.round(value / 20) * 20`
|
||||
- Spacing between elements: 60px minimum
|
||||
|
||||
## Arrow Creation
|
||||
|
||||
### Straight Arrows
|
||||
|
||||
Use for forward flow (left-to-right, top-to-bottom):
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "arrow",
|
||||
"startBinding": {
|
||||
"elementId": "source-shape-id",
|
||||
"focus": 0,
|
||||
"gap": 10
|
||||
},
|
||||
"endBinding": {
|
||||
"elementId": "target-shape-id",
|
||||
"focus": 0,
|
||||
"gap": 10
|
||||
},
|
||||
"points": [[0, 0], [distance_x, distance_y]]
|
||||
}
|
||||
```
|
||||
|
||||
### Elbow Arrows
|
||||
|
||||
Use for upward flow, backward flow, or complex routing:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "arrow",
|
||||
"startBinding": {...},
|
||||
"endBinding": {...},
|
||||
"points": [
|
||||
[0, 0],
|
||||
[intermediate_x, 0],
|
||||
[intermediate_x, intermediate_y],
|
||||
[final_x, final_y]
|
||||
],
|
||||
"elbowed": true
|
||||
}
|
||||
```
|
||||
|
||||
### Update Connected Shapes
|
||||
|
||||
After creating arrow, update `boundElements` on both connected shapes:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "shape-id",
|
||||
"boundElements": [
|
||||
{ "type": "text", "id": "text-id" },
|
||||
{ "type": "arrow", "id": "arrow-id" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Theme Application
|
||||
|
||||
Theme colors should be applied consistently:
|
||||
|
||||
- **Shapes**: `backgroundColor` from theme primary fill
|
||||
- **Borders**: `strokeColor` from theme accent
|
||||
- **Text**: `strokeColor` = "#1e1e1e" (dark text)
|
||||
- **Arrows**: `strokeColor` from theme accent
|
||||
|
||||
## Validation Checklist
|
||||
|
||||
Before saving, verify:
|
||||
|
||||
- [ ] All shapes with labels have matching `groupIds`
|
||||
- [ ] All text elements have `containerId` pointing to parent shape
|
||||
- [ ] Text width calculated properly (no cutoff)
|
||||
- [ ] Text alignment set (`textAlign` + `verticalAlign`)
|
||||
- [ ] All elements snapped to 20px grid
|
||||
- [ ] All arrows have `startBinding` and `endBinding`
|
||||
- [ ] `boundElements` array updated on connected shapes
|
||||
- [ ] Theme colors applied consistently
|
||||
- [ ] No metadata or history in final output
|
||||
- [ ] All IDs are unique
|
||||
|
||||
## Optimization
|
||||
|
||||
Remove from final output:
|
||||
|
||||
- `appState` object
|
||||
- `files` object (unless images used)
|
||||
- All elements with `isDeleted: true`
|
||||
- Unused library items
|
||||
- Version history
|
||||
@@ -1,79 +0,0 @@
|
||||
# JSON Validation Instructions
|
||||
|
||||
## Purpose
|
||||
|
||||
Validate Excalidraw JSON files after saving to catch syntax errors (missing commas, brackets, quotes).
|
||||
|
||||
## How to Validate
|
||||
|
||||
Use Node.js built-in JSON parsing to validate the file:
|
||||
|
||||
```bash
|
||||
node -e "JSON.parse(require('fs').readFileSync('FILE_PATH', 'utf8')); console.log('✓ Valid JSON')"
|
||||
```
|
||||
|
||||
Replace `FILE_PATH` with the actual file path.
|
||||
|
||||
## Exit Codes
|
||||
|
||||
- Exit code 0 = Valid JSON
|
||||
- Exit code 1 = Invalid JSON (syntax error)
|
||||
|
||||
## Error Output
|
||||
|
||||
If invalid, Node.js will output:
|
||||
|
||||
- Error message with description
|
||||
- Position in file where error occurred
|
||||
- Line and column information (if available)
|
||||
|
||||
## Common Errors and Fixes
|
||||
|
||||
### Missing Comma
|
||||
|
||||
```
|
||||
SyntaxError: Expected ',' or '}' after property value
|
||||
```
|
||||
|
||||
**Fix:** Add comma after the property value
|
||||
|
||||
### Missing Bracket/Brace
|
||||
|
||||
```
|
||||
SyntaxError: Unexpected end of JSON input
|
||||
```
|
||||
|
||||
**Fix:** Add missing closing bracket `]` or brace `}`
|
||||
|
||||
### Extra Comma (Trailing)
|
||||
|
||||
```
|
||||
SyntaxError: Unexpected token ,
|
||||
```
|
||||
|
||||
**Fix:** Remove the trailing comma before `]` or `}`
|
||||
|
||||
### Missing Quote
|
||||
|
||||
```
|
||||
SyntaxError: Unexpected token
|
||||
```
|
||||
|
||||
**Fix:** Add missing quote around string value
|
||||
|
||||
## Workflow Integration
|
||||
|
||||
After saving an Excalidraw file, run validation:
|
||||
|
||||
1. Save the file
|
||||
2. Run: `node -e "JSON.parse(require('fs').readFileSync('{{save_location}}', 'utf8')); console.log('✓ Valid JSON')"`
|
||||
3. If validation fails:
|
||||
- Read the error message for line/position
|
||||
- Open the file at that location
|
||||
- Fix the syntax error
|
||||
- Save and re-validate
|
||||
4. Repeat until validation passes
|
||||
|
||||
## Critical Rule
|
||||
|
||||
**NEVER delete the file due to validation errors - always fix the syntax error at the reported location.**
|
||||
@@ -1,24 +0,0 @@
|
||||
name: create-dataflow
|
||||
description: "Create data flow diagrams (DFD) in Excalidraw format"
|
||||
author: "BMad"
|
||||
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/frame-expert/create-dataflow"
|
||||
shared_path: "{project-root}/{bmad_folder}/bmm/workflows/frame-expert/_shared"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
validation: "{installed_path}/checklist.md"
|
||||
|
||||
helpers: "{shared_path}/excalidraw-helpers.md"
|
||||
templates: "{shared_path}/excalidraw-templates.yaml"
|
||||
library: "{shared_path}/excalidraw-library.json"
|
||||
|
||||
variables:
|
||||
dfd_level: ""
|
||||
process_count: ""
|
||||
datastore_count: ""
|
||||
external_entities: ""
|
||||
save_location: ""
|
||||
|
||||
default_output_file: "{project-root}/docs/dataflow/dfd-{timestamp}.excalidraw"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
@@ -1,25 +0,0 @@
|
||||
name: create-diagram
|
||||
description: "Create system architecture diagrams, ERDs, UML diagrams, or general technical diagrams in Excalidraw format"
|
||||
author: "BMad"
|
||||
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/frame-expert/create-diagram"
|
||||
shared_path: "{project-root}/{bmad_folder}/bmm/workflows/frame-expert/_shared"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
validation: "{installed_path}/checklist.md"
|
||||
|
||||
helpers: "{shared_path}/excalidraw-helpers.md"
|
||||
templates: "{shared_path}/excalidraw-templates.yaml"
|
||||
library: "{shared_path}/excalidraw-library.json"
|
||||
|
||||
variables:
|
||||
diagram_type: ""
|
||||
component_count: ""
|
||||
relationship_type: ""
|
||||
notation_standard: ""
|
||||
save_location: ""
|
||||
theme_choice: ""
|
||||
|
||||
default_output_file: "{project-root}/docs/diagrams/diagram-{timestamp}.excalidraw"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
@@ -1,28 +0,0 @@
|
||||
name: create-flowchart
|
||||
description: "Create a flowchart visualization in Excalidraw format for processes, pipelines, or logic flows"
|
||||
author: "BMad"
|
||||
|
||||
# Workflow components
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/frame-expert/create-flowchart"
|
||||
shared_path: "{project-root}/{bmad_folder}/bmm/workflows/frame-expert/_shared"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
validation: "{installed_path}/checklist.md"
|
||||
|
||||
# Shared resources
|
||||
helpers: "{shared_path}/excalidraw-helpers.md"
|
||||
templates: "{shared_path}/excalidraw-templates.yaml"
|
||||
library: "{shared_path}/excalidraw-library.json"
|
||||
|
||||
# Variables
|
||||
variables:
|
||||
flowchart_type: "" # Will be elicited
|
||||
complexity: "" # Will be elicited
|
||||
decision_points: "" # Will be elicited
|
||||
save_location: "" # Will be elicited
|
||||
theme_choice: "" # Will be elicited
|
||||
custom_colors: {} # For custom theme
|
||||
|
||||
default_output_file: "{project-root}/docs/flowcharts/flowchart-{timestamp}.excalidraw"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
@@ -1,24 +0,0 @@
|
||||
name: create-wireframe
|
||||
description: "Create website or app wireframes in Excalidraw format"
|
||||
author: "BMad"
|
||||
|
||||
installed_path: "{project-root}/{bmad_folder}/bmm/workflows/frame-expert/create-wireframe"
|
||||
shared_path: "{project-root}/{bmad_folder}/bmm/workflows/frame-expert/_shared"
|
||||
instructions: "{installed_path}/instructions.md"
|
||||
validation: "{installed_path}/checklist.md"
|
||||
|
||||
helpers: "{shared_path}/excalidraw-helpers.md"
|
||||
templates: "{shared_path}/excalidraw-templates.yaml"
|
||||
library: "{shared_path}/excalidraw-library.json"
|
||||
|
||||
variables:
|
||||
wireframe_type: ""
|
||||
fidelity_level: ""
|
||||
screen_count: ""
|
||||
device_type: ""
|
||||
save_location: ""
|
||||
|
||||
default_output_file: "{project-root}/docs/wireframes/wireframe-{timestamp}.excalidraw"
|
||||
|
||||
standalone: true
|
||||
web_bundle: false
|
||||
@@ -60,24 +60,12 @@ phases:
|
||||
agent: "pm"
|
||||
command: "validate-prd"
|
||||
|
||||
- id: "create-epics-and-stories"
|
||||
optional: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Optional: Create epic breakdown early (basic structure only)"
|
||||
|
||||
- id: "create-design"
|
||||
recommended: true
|
||||
agent: "ux-designer"
|
||||
command: "create-design"
|
||||
note: "Recommended - must integrate with existing UX patterns"
|
||||
|
||||
- id: "create-epics-and-stories-after-ux"
|
||||
optional: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Optional: Create epic breakdown with UX context"
|
||||
|
||||
- phase: 2
|
||||
name: "Solutioning"
|
||||
required: true
|
||||
@@ -89,6 +77,12 @@ phases:
|
||||
output: "Integration architecture with enterprise considerations"
|
||||
note: "Distills brownfield context + adds security/scalability/compliance design"
|
||||
|
||||
- id: "create-epics-and-stories"
|
||||
required: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Required: Break down PRD into implementable epics and stories with full context (PRD + UX + Architecture)"
|
||||
|
||||
- id: "test-design"
|
||||
required: true
|
||||
agent: "tea"
|
||||
@@ -96,31 +90,25 @@ phases:
|
||||
output: "System-level testability review"
|
||||
note: "Enterprise requires testability validation - auto-detects system-level mode"
|
||||
|
||||
- id: "create-security-architecture"
|
||||
optional: true
|
||||
agent: "architect"
|
||||
command: "create-security-architecture"
|
||||
output: "Security architecture for brownfield integration"
|
||||
note: "Future workflow - optional extended enterprise workflow for threat model, auth integration, audit requirements"
|
||||
# - id: "create-security-architecture"
|
||||
# optional: true
|
||||
# agent: "architect"
|
||||
# command: "create-security-architecture"
|
||||
# output: "Security architecture for brownfield integration"
|
||||
# note: "Future workflow - optional extended enterprise workflow for threat model, auth integration, audit requirements"
|
||||
|
||||
- id: "create-devops-strategy"
|
||||
optional: true
|
||||
agent: "architect"
|
||||
command: "create-devops-strategy"
|
||||
output: "DevOps strategy for brownfield deployment"
|
||||
note: "Future workflow - optional extended enterprise workflow for CI/CD integration, deployment strategy, monitoring"
|
||||
# - id: "create-devops-strategy"
|
||||
# optional: true
|
||||
# agent: "architect"
|
||||
# command: "create-devops-strategy"
|
||||
# output: "DevOps strategy for brownfield deployment"
|
||||
# note: "Future workflow - optional extended enterprise workflow for CI/CD integration, deployment strategy, monitoring"
|
||||
|
||||
- id: "validate-architecture"
|
||||
recommended: true
|
||||
agent: "architect"
|
||||
command: "validate-architecture"
|
||||
|
||||
- id: "create-epics-and-stories-final"
|
||||
required: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Required: Create final epic breakdown with full context (PRD + UX + Architecture)"
|
||||
|
||||
- id: "implementation-readiness"
|
||||
required: true
|
||||
agent: "architect"
|
||||
|
||||
@@ -48,24 +48,12 @@ phases:
|
||||
agent: "pm"
|
||||
command: "validate-prd"
|
||||
|
||||
- id: "create-epics-and-stories"
|
||||
optional: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Optional: Create epic breakdown early (basic structure only)"
|
||||
|
||||
- id: "create-design"
|
||||
recommended: true
|
||||
agent: "ux-designer"
|
||||
command: "create-design"
|
||||
note: "Highly recommended for enterprise - design system and patterns"
|
||||
|
||||
- id: "create-epics-and-stories-after-ux"
|
||||
optional: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Optional: Create epic breakdown with UX context"
|
||||
|
||||
- phase: 2
|
||||
name: "Solutioning"
|
||||
required: true
|
||||
@@ -103,11 +91,11 @@ phases:
|
||||
agent: "architect"
|
||||
command: "validate-architecture"
|
||||
|
||||
- id: "create-epics-and-stories-final"
|
||||
- id: "create-epics-and-stories"
|
||||
required: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Required: Create final epic breakdown with full context (PRD + UX + Architecture)"
|
||||
note: "Required: Break down PRD into implementable epics and stories with full context (PRD + UX + Architecture)"
|
||||
|
||||
- id: "implementation-readiness"
|
||||
required: true
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# Game Development - Use BMGD Module
|
||||
# Game development workflows have been moved to the BMad Game Development module
|
||||
|
||||
project_type: "game"
|
||||
level: "all"
|
||||
field_type: "any"
|
||||
description: "⚠️ Game development requires the BMGD module"
|
||||
|
||||
error_message: |
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🎮 **GAME DEVELOPMENT DETECTED**
|
||||
|
||||
Game development workflows are now part of the **BMad Game Development (BMGD)** module,
|
||||
which provides specialized workflows and agents for game creation.
|
||||
|
||||
**To proceed with game development:**
|
||||
|
||||
1. Install the BMGD module:
|
||||
```bash
|
||||
bmad install bmgd
|
||||
```
|
||||
|
||||
2. The BMGD module includes:
|
||||
- Game Designer, Game Developer, Game Architect agents
|
||||
- Game Dev Scrum Master for sprint coordination
|
||||
- Industry-standard game dev workflows:
|
||||
• Phase 1 (Preproduction): brainstorm-game, game-brief
|
||||
• Phase 2 (Design): GDD, narrative design
|
||||
• Phase 3 (Technical): game architecture
|
||||
• Phase 4 (Production): sprint planning, story management
|
||||
|
||||
3. After installation, load the Game Designer or Game Dev Scrum Master agent
|
||||
to begin your game development workflow
|
||||
|
||||
**Why a separate module?**
|
||||
- Game development follows different phases than software development
|
||||
- Specialized agents understand game-specific terminology and patterns
|
||||
- Workflows configured for game development needs (playtesting, balancing, etc.)
|
||||
- Can be used standalone or alongside BMM for complete coverage
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
# Placeholder phases - this file should not be used for actual workflow tracking
|
||||
# Users should install BMGD module instead
|
||||
phases:
|
||||
- phase: 1
|
||||
name: "ERROR - Install BMGD Module"
|
||||
workflows:
|
||||
- id: "install-bmgd"
|
||||
required: true
|
||||
note: "Run: bmad install bmgd"
|
||||
@@ -59,23 +59,11 @@ phases:
|
||||
agent: "pm"
|
||||
command: "validate-prd"
|
||||
|
||||
- id: "create-epics-and-stories"
|
||||
optional: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Optional: Create epic breakdown early (basic structure only)"
|
||||
|
||||
- id: "create-design"
|
||||
conditional: "if_has_ui"
|
||||
agent: "ux-designer"
|
||||
command: "create-design"
|
||||
|
||||
- id: "create-epics-and-stories-after-ux"
|
||||
optional: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Optional: Create epic breakdown with UX context"
|
||||
|
||||
- phase: 2
|
||||
name: "Solutioning"
|
||||
required: true
|
||||
@@ -87,11 +75,11 @@ phases:
|
||||
output: "Integration architecture - solution design for THIS project"
|
||||
note: "HIGHLY RECOMMENDED: Distills massive brownfield context into focused solution design. Prevents agent confusion."
|
||||
|
||||
- id: "create-epics-and-stories-final"
|
||||
- id: "create-epics-and-stories"
|
||||
required: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Required: Create final epic breakdown with full context (PRD + UX + Architecture)"
|
||||
note: "Required: Break down PRD into implementable epics and stories with full context (PRD + UX + Architecture)"
|
||||
|
||||
- id: "test-design"
|
||||
recommended: true
|
||||
|
||||
@@ -48,24 +48,12 @@ phases:
|
||||
command: "validate-prd"
|
||||
note: "Quality check for PRD completeness"
|
||||
|
||||
- id: "create-epics-and-stories"
|
||||
optional: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Optional: Create epic breakdown early (basic structure only)"
|
||||
|
||||
- id: "create-design"
|
||||
conditional: "if_has_ui"
|
||||
agent: "ux-designer"
|
||||
command: "create-design"
|
||||
note: "Determined after PRD - user/agent decides if needed"
|
||||
|
||||
- id: "create-epics-and-stories-after-ux"
|
||||
optional: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Optional: Create epic breakdown with UX context"
|
||||
|
||||
- phase: 2
|
||||
name: "Solutioning"
|
||||
required: true
|
||||
@@ -77,11 +65,11 @@ phases:
|
||||
output: "System architecture document"
|
||||
note: "Complete system design for greenfield projects"
|
||||
|
||||
- id: "create-epics-and-stories-final"
|
||||
- id: "create-epics-and-stories"
|
||||
required: true
|
||||
agent: "pm"
|
||||
command: "create-epics-and-stories"
|
||||
note: "Required: Create final epic breakdown with full context (PRD + UX + Architecture)"
|
||||
note: "Required: Break down PRD into implementable epics and stories with full context (PRD + UX + Architecture)"
|
||||
|
||||
- id: "test-design"
|
||||
recommended: true
|
||||
|
||||
Reference in New Issue
Block a user