feat(bmgd): add workflow-status and create-tech-spec workflows

Add BMGD-native workflow-status and create-tech-spec workflows,
replacing all BMM references with BMGD paths.

## New Workflows

### workflow-status
- Multi-mode status checker for game projects
- Game-specific project levels (Game Jam → AAA)
- Workflow paths: gamedev-greenfield, gamedev-brownfield,
  quickflow-greenfield, quickflow-brownfield
- Init workflow for new game project setup

### create-tech-spec
- Game-focused spec engineering workflow
- Engine-aware (Unity/Unreal/Godot)
- Performance and gameplay feel considerations

## Agent Updates
Updated all BMGD agents to reference BMGD workflows:
- game-architect, game-designer, game-dev, game-qa,
  game-scrum-master, game-solo-dev

All agents now use /bmad:bmgd:workflows instead of /bmad:bmm:workflows
This commit is contained in:
Scott Jennings 2025-12-16 17:01:34 -06:00
parent 2bee7234e9
commit a9f24509ab
19 changed files with 1218 additions and 7 deletions

View File

@ -27,7 +27,7 @@ agent:
menu: menu:
- trigger: workflow-status - trigger: workflow-status
workflow: "{project-root}/_bmad/bmm/workflows/workflow-status/workflow.yaml" workflow: "{project-root}/_bmad/bmgd/workflows/workflow-status/workflow.yaml"
description: Get workflow status or initialize a workflow if not already done description: Get workflow status or initialize a workflow if not already done
- trigger: create-architecture - trigger: create-architecture

View File

@ -24,7 +24,7 @@ agent:
menu: menu:
- trigger: workflow-status - trigger: workflow-status
workflow: "{project-root}/_bmad/bmm/workflows/workflow-status/workflow.yaml" workflow: "{project-root}/_bmad/bmgd/workflows/workflow-status/workflow.yaml"
description: Get workflow status or initialize a workflow if not already done description: Get workflow status or initialize a workflow if not already done
- trigger: brainstorm-game - trigger: brainstorm-game

View File

@ -26,7 +26,7 @@ agent:
menu: menu:
- trigger: workflow-status - trigger: workflow-status
workflow: "{project-root}/_bmad/bmm/workflows/workflow-status/workflow.yaml" workflow: "{project-root}/_bmad/bmgd/workflows/workflow-status/workflow.yaml"
description: Get workflow status or check current sprint progress description: Get workflow status or check current sprint progress
- trigger: dev-story - trigger: dev-story

View File

@ -28,7 +28,7 @@ agent:
menu: menu:
- trigger: workflow-status - trigger: workflow-status
workflow: "{project-root}/_bmad/bmm/workflows/workflow-status/workflow.yaml" workflow: "{project-root}/_bmad/bmgd/workflows/workflow-status/workflow.yaml"
description: Get workflow status or check current project state description: Get workflow status or check current project state
- trigger: test-framework - trigger: test-framework

View File

@ -26,7 +26,7 @@ agent:
menu: menu:
- trigger: workflow-status - trigger: workflow-status
workflow: "{project-root}/_bmad/bmm/workflows/workflow-status/workflow.yaml" workflow: "{project-root}/_bmad/bmgd/workflows/workflow-status/workflow.yaml"
description: Get workflow status or initialize a workflow if not already done description: Get workflow status or initialize a workflow if not already done
- trigger: sprint-planning - trigger: sprint-planning

View File

@ -32,7 +32,7 @@ agent:
description: Implement features end-to-end solo with game-specific considerations description: Implement features end-to-end solo with game-specific considerations
- trigger: create-tech-spec - trigger: create-tech-spec
workflow: "{project-root}/_bmad/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml" workflow: "{project-root}/_bmad/bmgd/workflows/bmgd-quick-flow/create-tech-spec/workflow.yaml"
description: Architect a technical spec with implementation-ready stories description: Architect a technical spec with implementation-ready stories
- trigger: code-review - trigger: code-review

View File

@ -0,0 +1,140 @@
# Create Tech-Spec - Spec Engineering for Game Development
<workflow>
<critical>Communicate in {communication_language}, tailored to {user_skill_level}</critical>
<critical>Generate documents in {document_output_language}</critical>
<critical>Conversational spec engineering - ask questions, investigate code, produce complete spec</critical>
<critical>Spec must contain ALL context a fresh dev agent needs to implement it</critical>
<critical>Focus on game-specific considerations: performance, feel, engine patterns</critical>
<checkpoint-handlers>
<on-select key="a">Load and execute {advanced_elicitation}, then return to current step</on-select>
<on-select key="p">Load and execute {party_mode_workflow}, then return to current step</on-select>
<on-select key="b">Load and execute {quick_dev_workflow} with the tech-spec file</on-select>
</checkpoint-handlers>
<step n="1" goal="Understand what the user wants to build">
<action>Greet {user_name} and ask them to describe what they want to build or change in their game.</action>
<action>Ask game-specific clarifying questions:
- What's the feature/mechanic?
- How does it affect gameplay feel?
- Performance requirements? (60fps critical path?)
- Which game systems does it touch?
- Existing code to integrate with?
</action>
<action>Check for existing context in {output_folder} and {sprint_artifacts}</action>
<checkpoint title="Problem Understanding">
[a] Advanced Elicitation [c] Continue [p] Party Mode
</checkpoint>
</step>
<step n="2" goal="Investigate existing game code (if applicable)">
<action>If brownfield: identify game engine (Unity/Unreal/Godot/custom)</action>
<action>Get file paths, read code, identify:
- Engine patterns and conventions
- Existing game systems to integrate with
- Performance-critical code paths
- Test patterns if any
</action>
<action>Document: engine version, code patterns, files to modify, system dependencies</action>
<checkpoint title="Context Gathered">
[a] Advanced Elicitation [c] Continue [p] Party Mode
</checkpoint>
</step>
<step n="3" goal="Generate the technical specification">
<action>Create tech-spec using this game-focused structure:
```markdown
# Tech-Spec: {title}
**Created:** {date}
**Status:** Ready for Development
**Engine:** {engine_name} {version}
## Overview
### Feature/Mechanic Description
### Gameplay Impact
### Scope (In/Out)
## Context for Development
### Engine Patterns
### Existing Systems Integration
### Files to Reference
### Technical Decisions
## Implementation Plan
### Tasks
- [ ] Task 1: Description
- [ ] Task 2: Description
### Performance Considerations
- Frame budget impact
- Memory considerations
- Critical path notes
### Acceptance Criteria
- [ ] AC 1: Given/When/Then (include feel/responsiveness criteria)
- [ ] AC 2: ...
## Additional Context
### Dependencies
### Testing Strategy
### Notes
```
</action>
<action>Save to {sprint_artifacts}/tech-spec-{slug}.md</action>
</step>
<step n="4" goal="Review and finalize">
<action>Present spec to {user_name}, ask if it captures intent, make changes as needed</action>
<output>**Tech-Spec Complete!** 🎮
Saved to: {sprint_artifacts}/tech-spec-{slug}.md
[a] Advanced Elicitation - refine further
[b] Begin Development (not recommended - fresh context better)
[d] Done - exit
[p] Party Mode - get feedback
**Recommended:** Run `quick-dev` in fresh context with this spec.
</output>
<ask>Choice (a/b/d/p):</ask>
</step>
</workflow>

View File

@ -0,0 +1,27 @@
# Quick-Flow: Create Tech-Spec (Game Development)
name: create-tech-spec
description: "Conversational spec engineering for games - ask questions, investigate code, produce implementation-ready tech-spec."
author: "BMad"
# Config
config_source: "{project-root}/_bmad/bmgd/config.yaml"
output_folder: "{config_source}:output_folder"
sprint_artifacts: "{config_source}:sprint_artifacts"
user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:game_dev_experience"
date: system-generated
# Workflow components
installed_path: "{project-root}/_bmad/bmgd/workflows/bmgd-quick-flow/create-tech-spec"
instructions: "{installed_path}/instructions.md"
# Related workflows
quick_dev_workflow: "{project-root}/_bmad/bmgd/workflows/bmgd-quick-flow/quick-dev/workflow.yaml"
quick_prototype_workflow: "{project-root}/_bmad/bmgd/workflows/bmgd-quick-flow/quick-prototype/workflow.yaml"
party_mode_exec: "{project-root}/_bmad/core/workflows/party-mode/workflow.md"
advanced_elicitation: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml"
standalone: true
web_bundle: false

View File

@ -26,7 +26,7 @@ party_mode_exec: "{project-root}/_bmad/core/workflows/party-mode/workflow.md"
advanced_elicitation: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml" advanced_elicitation: "{project-root}/_bmad/core/tasks/advanced-elicitation.xml"
# Routing resources (lazy-loaded) # Routing resources (lazy-loaded)
workflow_init: "{project-root}/_bmad/bmm/workflows/workflow-status/init/workflow.yaml" workflow_init: "{project-root}/_bmad/bmgd/workflows/workflow-status/init/workflow.yaml"
# Game-specific input patterns # Game-specific input patterns
input_file_patterns: input_file_patterns:

View File

@ -0,0 +1,299 @@
# Workflow Init - Game Project Setup Instructions
<critical>The workflow execution engine is governed by: {project-root}/\_bmad/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: workflow-init/workflow.yaml</critical>
<critical>Communicate in {communication_language} with {user_name}</critical>
<critical>This workflow handles BOTH new game projects AND existing game projects</critical>
<workflow>
<step n="1" goal="Scan for existing work">
<output>Welcome to BMGD Game Development, {user_name}! 🎮</output>
<action>Perform comprehensive scan for existing work:
- BMGD artifacts: GDD, game brief, architecture, narrative design
- Implementation: stories, sprint-status, workflow-status
- Game project: engine files (Unity, Unreal, Godot), source directories
- Check both {output_folder} and {sprint_artifacts} locations
</action>
<action>Categorize into one of these states:
- CLEAN: No artifacts or code (or scaffold only)
- DESIGN: Has GDD/brief but no implementation
- ACTIVE: Has stories or sprint status
- EXISTING: Has game code but no BMGD artifacts
- UNCLEAR: Mixed state needs clarification
</action>
<ask>What's your game project called? {{#if project_name}}(Config shows: {{project_name}}){{/if}}</ask>
<action>Store project_name</action>
<template-output>project_name</template-output>
</step>
<step n="2" goal="Choose setup path">
<check if="state == CLEAN">
<output>Perfect! Fresh start detected. Let's design your game!</output>
<action>Continue to step 3</action>
</check>
<check if="state == ACTIVE AND workflow_status exists">
<output>✅ You already have workflow tracking at: {{workflow_status_path}}
To check progress: Load any BMGD agent and run /bmad:bmgd:workflows:workflow-status
Happy game dev! 🎮</output>
<action>Exit workflow (already initialized)</action>
</check>
<check if="state != CLEAN">
<output>Found existing work:
{{summary_of_findings}}</output>
<ask>How would you like to proceed?
1. **Continue** - Work with existing artifacts
2. **Archive & Start Fresh** - Move old work to archive
3. **Express Setup** - I know exactly what I need
4. **Guided Setup** - Walk me through options
Choice [1-4]</ask>
<check if="choice == 1">
<action>Set continuing_existing = true</action>
<action>Store found artifacts</action>
<action>Continue to step 7 (detect track from artifacts)</action>
</check>
<check if="choice == 2">
<ask>Archive existing work? (y/n)</ask>
<action if="y">Move artifacts to {output_folder}/archive/</action>
<output>Ready for fresh start!</output>
<action>Continue to step 3</action>
</check>
<check if="choice == 3">
<action>Jump to step 3 (express path)</action>
</check>
<check if="choice == 4">
<action>Continue to step 4 (guided path)</action>
</check>
</check>
<check if="state == CLEAN">
<ask>Setup approach:
1. **Express** - I know what I need
2. **Guided** - Show me the options
Choice [1 or 2]:</ask>
<check if="choice == 1">
<action>Continue to step 3 (express)</action>
</check>
<check if="choice == 2">
<action>Continue to step 4 (guided)</action>
</check>
</check>
</step>
<step n="3" goal="Express setup path">
<ask>Is this for:
1. **New game** (greenfield)
2. **Existing game codebase** (brownfield)
Choice [1/2]:</ask>
<action>Set field_type based on choice</action>
<ask>Development approach:
1. **Full Game Dev** - Complete GDD + Architecture + Production pipeline
2. **Quick Flow** - Rapid prototyping and iteration
Choice [1/2]:</ask>
<action>Map to selected_track: gamedev/quickflow</action>
<template-output>field_type</template-output>
<template-output>selected_track</template-output>
<action>Jump to step 6 (discovery options)</action>
</step>
<step n="4" goal="Guided setup - understand project">
<ask>Tell me about your game. What are you making?</ask>
<action>Store user_description</action>
<action>Analyze for field type indicators:
- Brownfield: "existing", "current", "enhance", "update", "add to"
- Greenfield: "new", "build", "create", "from scratch", "fresh"
- If game project exists, default to brownfield unless user indicates new
</action>
<check if="field_type unclear AND game project exists">
<ask>I see existing game files. Are you:
1. **Modifying** existing game (brownfield)
2. **Starting fresh** - code is just scaffold (greenfield)
Choice [1/2]:</ask>
<action>Set field_type based on answer</action>
</check>
<action if="field_type not set">Set based on project presence</action>
<template-output>user_description</template-output>
<template-output>field_type</template-output>
<action>Continue to step 5</action>
</step>
<step n="5" goal="Guided setup - select track">
<output>Based on your game, here are your BMGD development options:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
**1. Full Game Dev** 🎮 {{#if recommended}}(RECOMMENDED){{/if}}
- Complete: Game Brief + GDD + Architecture + Production
- Best for: Indie games, AA projects, complete releases
- Benefit: AI agents have full game context for better results
**2. Quick Flow** 🚀
- Rapid: Prototype → Iterate → Ship
- Best for: Game jams, prototypes, experiments
- Benefit: Get playable builds fast
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{{#if brownfield}}
💡 Architecture helps integrate new features with your existing game systems.
{{/if}}</output>
<ask>Which approach fits your game?
1. Full Game Dev {{#if recommended}}(recommended){{/if}}
2. Quick Flow
3. Help me decide
Choice [1/2/3]:</ask>
<check if="choice == 3">
<ask>What concerns you about choosing?</ask>
<action>Provide tailored guidance based on concerns</action>
<action>Loop back to choice</action>
</check>
<action>Map choice to selected_track</action>
<template-output>selected_track</template-output>
</step>
<step n="6" goal="Discovery workflows selection (unified)">
<action>Determine available discovery workflows based on:
- field_type (greenfield gets game-brief option)
- selected_track (gamedev/quickflow options)
</action>
<check if="field_type == greenfield AND selected_track == gamedev">
<output>Optional pre-production workflows can help clarify your game vision:</output>
<ask>Select any you'd like to include:
1. 🧠 **Brainstorm Game** - Creative exploration and ideation
2. 📋 **Game Brief** - Strategic game planning (recommended)
Enter numbers (e.g., "1,2" or "all" or "none"): </ask>
</check>
<check if="field_type == brownfield AND selected_track == gamedev">
<output>Optional discovery workflows:</output>
<ask>Include any of these?
1. 🧠 **Brainstorm Game** - Creative exploration for new features
Enter "1" or "none": </ask>
</check>
<check if="selected_track == quickflow">
<output>Quick Flow focuses on rapid iteration. You can brainstorm during development.</output>
</check>
<action>Parse selections and set:
- brainstorm_requested
- game_brief_requested (if applicable)
</action>
<template-output>brainstorm_requested</template-output>
<template-output>game_brief_requested</template-output>
</step>
<step n="7" goal="Detect track from artifacts" if="continuing_existing">
<action>Analyze artifacts to detect track:
- Has GDD → Full Game Dev
- Has tech-spec only → Quick Flow
</action>
<output>Detected: **{{detected_track}}** based on {{found_artifacts}}</output>
<ask>Correct? (y/n)</ask>
<ask if="n">Which BMGD track instead?
1. Full Game Dev
2. Quick Flow
Choice:</ask>
<action>Set selected_track</action>
<template-output>selected_track</template-output>
</step>
<step n="8" goal="Generate workflow path">
<action>Load path file: {path_files}/{{selected_track}}-{{field_type}}.yaml</action>
<action>Build workflow_items from path file</action>
<action>Scan for existing completed work and update statuses</action>
<action>Set generated date</action>
<template-output>generated</template-output>
<template-output>workflow_path_file</template-output>
<template-output>workflow_items</template-output>
</step>
<step n="9" goal="Create tracking file">
<output>Your BMGD workflow path:
**Track:** {{selected_track}}
**Type:** {{field_type}}
**Project:** {{project_name}}
{{#if brownfield}}Prerequisites: Analyze existing game code{{/if}}
{{#if has_discovery}}Pre-production: {{list_selected_discovery}}{{/if}}
{{workflow_path_summary}}
</output>
<ask>Create workflow tracking file? (y/n)</ask>
<check if="y">
<action>Generate YAML from template with all variables</action>
<action>Save to {output_folder}/bmgd-workflow-status.yaml</action>
<action>Identify next workflow and agent</action>
<output>**Created:** {output_folder}/bmgd-workflow-status.yaml
**Next:** {{next_workflow_name}}
**Agent:** {{next_agent}}
**Command:** /bmad:bmgd:workflows:{{next_workflow_id}}
{{#if next_agent not in [game-designer]}}
💡 Start new chat with **{{next_agent}}** agent first.
{{/if}}
To check progress: /bmad:bmgd:workflows:workflow-status
Happy game dev! 🎮</output>
</check>
</step>
</workflow>

View File

@ -0,0 +1,29 @@
# Workflow Init - Initial Game Project Setup
name: workflow-init
description: "Initialize a new BMGD game project by determining level, type, and creating workflow path"
author: "BMad"
# Critical variables from config
config_source: "{project-root}/_bmad/bmgd/config.yaml"
output_folder: "{config_source}:output_folder"
sprint_artifacts: "{config_source}:sprint_artifacts"
user_name: "{config_source}:user_name"
project_name: "{config_source}:project_name"
communication_language: "{config_source}:communication_language"
document_output_language: "{config_source}:document_output_language"
user_skill_level: "{config_source}:game_dev_experience"
date: system-generated
# Workflow components
installed_path: "{project-root}/_bmad/bmgd/workflows/workflow-status/init"
instructions: "{installed_path}/instructions.md"
template: "{project-root}/_bmad/bmgd/workflows/workflow-status/workflow-status-template.yaml"
# Path data files
path_files: "{project-root}/_bmad/bmgd/workflows/workflow-status/paths/"
# Output configuration
default_output_file: "{output_folder}/bmgd-workflow-status.yaml"
standalone: true
web_bundle: false

View File

@ -0,0 +1,395 @@
# Workflow Status Check - Multi-Mode Service (BMGD)
<critical>The workflow execution engine is governed by: {project-root}/\_bmad/core/tasks/workflow.xml</critical>
<critical>You MUST have already loaded and processed: {project-root}/\_bmad/bmgd/workflows/workflow-status/workflow.yaml</critical>
<critical>This workflow operates in multiple modes: interactive (default), validate, data, init-check, update</critical>
<critical>Other workflows can call this as a service to avoid duplicating status logic</critical>
<critical>⚠️ ABSOLUTELY NO TIME ESTIMATES - NEVER mention hours, days, weeks, months, or ANY time-based predictions.</critical>
<workflow>
<step n="0" goal="Determine execution mode">
<action>Check for {{mode}} parameter passed by calling workflow</action>
<action>Default mode = "interactive" if not specified</action>
<check if="mode == interactive">
<action>Continue to Step 1 for normal status check flow</action>
</check>
<check if="mode == validate">
<action>Jump to Step 10 for workflow validation service</action>
</check>
<check if="mode == data">
<action>Jump to Step 20 for data extraction service</action>
</check>
<check if="mode == init-check">
<action>Jump to Step 30 for simple init check</action>
</check>
<check if="mode == update">
<action>Jump to Step 40 for status update service</action>
</check>
</step>
<step n="1" goal="Check for status file">
<action>Search {output_folder}/ for file: bmgd-workflow-status.yaml</action>
<check if="no status file found">
<output>No game development workflow status found.</output>
<ask>Would you like to run Workflow Init now? (y/n)</ask>
<check if="response == y OR response == yes">
<action>Launching workflow-init to set up your game project tracking...</action>
<invoke-workflow path="{project-root}/_bmad/bmgd/workflows/workflow-status/init/workflow.yaml"></invoke-workflow>
<action>Exit workflow and let workflow-init take over</action>
</check>
<check if="else">
<output>No workflow status file. Run workflow-init when ready to enable progress tracking.</output>
<action>Exit workflow</action>
</check>
</check>
<check if="status file found">
<action>Continue to step 2</action>
</check>
</step>
<step n="2" goal="Read and parse status">
<action>Read bmgd-workflow-status.yaml</action>
<action>Parse YAML file and extract metadata from comments and fields:</action>
Parse these fields from YAML comments and metadata:
- project (from YAML field)
- project_type (from YAML field)
- project_level (from YAML field)
- field_type (from YAML field)
- workflow_path (from YAML field)
<action>Parse workflow_status section:</action>
- Extract all workflow entries with their statuses
- Identify completed workflows (status = file path)
- Identify pending workflows (status = required/optional/recommended/conditional)
- Identify skipped workflows (status = skipped)
<action>Determine current state:</action>
- Find first workflow with status != file path and != skipped
- This is the NEXT workflow to work on
- Look up agent and command from workflow path file
</step>
<step n="3" goal="Display current status and options">
<action>Load workflow path file based on workflow_path field</action>
<action>Identify current phase from next workflow to be done</action>
<action>Build list of completed, pending, and optional workflows</action>
<action>For each workflow, look up its agent from the path file</action>
<output>
## 🎮 Game Dev Status
**Project:** {{project}} (Level {{project_level}} {{project_type}})
**Path:** {{workflow_path}}
**Progress:**
{{#each phases}}
{{phase_name}}:
{{#each workflows_in_phase}}
- {{workflow_name}} ({{agent}}): {{status_display}}
{{/each}}
{{/each}}
## 🎯 Next Steps
**Next Workflow:** {{next_workflow_name}}
**Agent:** {{next_agent}}
**Command:** /bmad:bmgd:workflows:{{next_workflow_id}}
{{#if optional_workflows_available}}
**Optional Workflows Available:**
{{#each optional_workflows}}
- {{workflow_name}} ({{agent}}) - {{status}}
{{/each}}
{{/if}}
</output>
</step>
<step n="4" goal="Offer actions">
<ask>What would you like to do?
1. **Start next workflow** - {{next_workflow_name}} ({{next_agent}})
{{#if optional_workflows_available}}
2. **Run optional workflow** - Choose from available options
{{/if}}
3. **View full status YAML** - See complete status file
4. **Update workflow status** - Mark a workflow as completed or skipped
5. **Exit** - Return to agent
Your choice:</ask>
<action>Handle user selection based on available options</action>
<check if="choice == 1">
<output>Ready to run {{next_workflow_name}}!
**Command:** /bmad:bmgd:workflows:{{next_workflow_id}}
**Agent:** Load {{next_agent}} agent first
{{#if next_agent !== current_agent}}
Tip: Start a new chat and load the {{next_agent}} agent before running this workflow.
{{/if}}
</output>
</check>
<check if="choice == 2 AND optional_workflows_available">
<ask>Which optional workflow?
{{#each optional_workflows numbered}}
{{number}}. {{workflow_name}} ({{agent}})
{{/each}}
Your choice:</ask>
<action>Display selected workflow command and agent</action>
</check>
<check if="choice == 3">
<action>Display complete bmgd-workflow-status.yaml file contents</action>
</check>
<check if="choice == 4">
<ask>What would you like to update?
1. Mark a workflow as **completed** (provide file path)
2. Mark a workflow as **skipped**
Your choice:</ask>
<check if="update_choice == 1">
<ask>Which workflow? (Enter workflow ID like 'gdd' or 'create-architecture')</ask>
<ask>File path created? (e.g., docs/gdd.md)</ask>
<critical>ONLY write the file path as the status value - no other text, notes, or metadata</critical>
<action>Update workflow_status in YAML file: {{workflow_id}}: {{file_path}}</action>
<action>Save updated YAML file preserving ALL structure and comments</action>
<output>✅ Updated {{workflow_id}} to completed: {{file_path}}</output>
</check>
<check if="update_choice == 2">
<ask>Which workflow to skip? (Enter workflow ID)</ask>
<action>Update workflow_status in YAML file: {{workflow_id}}: skipped</action>
<action>Save updated YAML file</action>
<output>✅ Marked {{workflow_id}} as skipped</output>
</check>
</check>
</step>
<!-- ============================================= -->
<!-- SERVICE MODES - Called by other workflows -->
<!-- ============================================= -->
<step n="10" goal="Validate mode - Check if calling workflow should proceed">
<action>Read {output_folder}/bmgd-workflow-status.yaml if exists</action>
<check if="status file not found">
<template-output>status_exists = false</template-output>
<template-output>should_proceed = true</template-output>
<template-output>warning = "No status file found. Running without progress tracking."</template-output>
<template-output>suggestion = "Consider running workflow-init first for progress tracking"</template-output>
<action>Return to calling workflow</action>
</check>
<check if="status file found">
<action>Parse YAML file to extract project metadata and workflow_status</action>
<action>Load workflow path file from workflow_path field</action>
<action>Find first non-completed workflow in workflow_status (next workflow)</action>
<action>Check if {{calling_workflow}} matches next workflow or is in the workflow list</action>
<template-output>status_exists = true</template-output>
<template-output>project_level = {{project_level}}</template-output>
<template-output>project_type = {{project_type}}</template-output>
<template-output>field_type = {{field_type}}</template-output>
<template-output>next_workflow = {{next_workflow_id}}</template-output>
<check if="calling_workflow == next_workflow">
<template-output>should_proceed = true</template-output>
<template-output>warning = ""</template-output>
<template-output>suggestion = "Proceeding with planned next step"</template-output>
</check>
<check if="calling_workflow in workflow_status list">
<action>Check the status of calling_workflow in YAML</action>
<check if="status is file path">
<template-output>should_proceed = true</template-output>
<template-output>warning = "⚠️ Workflow already completed: {{calling_workflow}}"</template-output>
<template-output>suggestion = "This workflow was already completed. Re-running will overwrite: {{status}}"</template-output>
</check>
<check if="status is optional/recommended">
<template-output>should_proceed = true</template-output>
<template-output>warning = "Running optional workflow {{calling_workflow}}"</template-output>
<template-output>suggestion = "This is optional. Expected next: {{next_workflow}}"</template-output>
</check>
<check if="status is required but not next">
<template-output>should_proceed = true</template-output>
<template-output>warning = "⚠️ Out of sequence: Expected {{next_workflow}}, running {{calling_workflow}}"</template-output>
<template-output>suggestion = "Consider running {{next_workflow}} instead, or continue if intentional"</template-output>
</check>
</check>
<check if="calling_workflow NOT in workflow_status list">
<template-output>should_proceed = true</template-output>
<template-output>warning = "⚠️ Unknown workflow: {{calling_workflow}} not in workflow path"</template-output>
<template-output>suggestion = "This workflow is not part of the defined path for this project"</template-output>
</check>
<template-output>status_file_path = {{path to bmgd-workflow-status.yaml}}</template-output>
</check>
<action>Return control to calling workflow with all template outputs</action>
</step>
<step n="20" goal="Data mode - Extract specific information">
<action>Read {output_folder}/bmgd-workflow-status.yaml if exists</action>
<check if="status file not found">
<template-output>status_exists = false</template-output>
<template-output>error = "No status file to extract data from"</template-output>
<action>Return to calling workflow</action>
</check>
<check if="status file found">
<action>Parse YAML file completely</action>
<template-output>status_exists = true</template-output>
<check if="data_request == project_config">
<template-output>project_name = {{project}}</template-output>
<template-output>project_type = {{project_type}}</template-output>
<template-output>project_level = {{project_level}}</template-output>
<template-output>field_type = {{field_type}}</template-output>
<template-output>workflow_path = {{workflow_path}}</template-output>
</check>
<check if="data_request == workflow_status">
<action>Parse workflow_status section and return all workflow: status pairs</action>
<template-output>workflow_status = {{workflow_status_object}}</template-output>
<action>Calculate completion stats:</action>
<template-output>total_workflows = {{count all workflows}}</template-output>
<template-output>completed_workflows = {{count file path statuses}}</template-output>
<template-output>pending_workflows = {{count required/optional/etc}}</template-output>
<template-output>skipped_workflows = {{count skipped}}</template-output>
</check>
<check if="data_request == all">
<action>Return all parsed fields as template outputs</action>
<template-output>project = {{project}}</template-output>
<template-output>project_type = {{project_type}}</template-output>
<template-output>project_level = {{project_level}}</template-output>
<template-output>field_type = {{field_type}}</template-output>
<template-output>workflow_path = {{workflow_path}}</template-output>
<template-output>workflow_status = {{workflow_status_object}}</template-output>
<template-output>generated = {{generated}}</template-output>
</check>
<template-output>status_file_path = {{path to bmgd-workflow-status.yaml}}</template-output>
</check>
<action>Return control to calling workflow with requested data</action>
</step>
<step n="30" goal="Init-check mode - Simple existence check">
<action>Check if {output_folder}/bmgd-workflow-status.yaml exists</action>
<check if="exists">
<template-output>status_exists = true</template-output>
<template-output>suggestion = "Status file found. Ready to proceed."</template-output>
</check>
<check if="not exists">
<template-output>status_exists = false</template-output>
<template-output>suggestion = "No status file. Run workflow-init to create one (optional for progress tracking)"</template-output>
</check>
<action>Return immediately to calling workflow</action>
</step>
<step n="40" goal="Update mode - Centralized status file updates">
<action>Read {output_folder}/bmgd-workflow-status.yaml</action>
<check if="status file not found">
<template-output>success = false</template-output>
<template-output>error = "No status file found. Cannot update."</template-output>
<action>Return to calling workflow</action>
</check>
<check if="status file found">
<action>Parse YAML file completely</action>
<action>Load workflow path file from workflow_path field</action>
<action>Check {{action}} parameter to determine update type</action>
<!-- ============================================= -->
<!-- ACTION: complete_workflow -->
<!-- ============================================= -->
<check if="action == complete_workflow">
<action>Get {{workflow_id}} parameter (required)</action>
<action>Get {{output_file}} parameter (required - path to created file)</action>
<critical>ONLY write the file path as the status value - no other text, notes, or metadata</critical>
<action>Update workflow status in YAML:</action>
- In workflow_status section, update: {{workflow_id}}: {{output_file}}
<action>Find {{workflow_id}} in loaded path YAML</action>
<action>Determine next workflow from path sequence</action>
<action>Find first workflow in workflow_status with status != file path and != skipped</action>
<action>Save updated YAML file preserving ALL structure and comments</action>
<template-output>success = true</template-output>
<template-output>next_workflow = {{determined next workflow}}</template-output>
<template-output>next_agent = {{determined next agent from path file}}</template-output>
<template-output>completed_workflow = {{workflow_id}}</template-output>
<template-output>output_file = {{output_file}}</template-output>
</check>
<!-- ============================================= -->
<!-- ACTION: skip_workflow -->
<!-- ============================================= -->
<check if="action == skip_workflow">
<action>Get {{workflow_id}} parameter (required)</action>
<action>Update workflow status in YAML:</action>
- In workflow_status section, update: {{workflow_id}}: skipped
<action>Save updated YAML file</action>
<template-output>success = true</template-output>
<template-output>skipped_workflow = {{workflow_id}}</template-output>
</check>
<!-- ============================================= -->
<!-- Unknown action -->
<!-- ============================================= -->
<check if="action not recognized">
<template-output>success = false</template-output>
<template-output>error = "Unknown action: {{action}}. Valid actions: complete_workflow, skip_workflow"</template-output>
</check>
</check>
<action>Return control to calling workflow with template outputs</action>
</step>
</workflow>

View File

@ -0,0 +1,65 @@
# BMGD Game Development - Brownfield
# Game development methodology for existing game projects
method_name: "BMGD Game Development"
track: "gamedev"
field_type: "brownfield"
description: "Game development methodology for existing codebases and projects"
phases:
- phase: 0
name: "Discovery (Optional)"
optional: true
note: "User-selected during workflow-init"
workflows:
- id: "brainstorm-game"
optional: true
agent: "game-designer"
command: "brainstorm-game"
included_by: "user_choice"
note: "Creative exploration for new features or improvements"
- phase: 1
name: "Design"
required: true
workflows:
- id: "gdd"
required: true
agent: "game-designer"
command: "create-gdd"
output: "Game Design Document for new features/systems"
note: "Focus on changes and additions to existing game"
- id: "narrative"
conditional: "if_narrative_focused"
agent: "game-designer"
command: "narrative"
note: "For story-driven additions"
- phase: 2
name: "Technical"
required: true
workflows:
- id: "game-architecture"
required: true
agent: "game-architect"
command: "create-architecture"
output: "Architecture update document"
note: "Focus on integration with existing systems"
- id: "test-framework"
recommended: true
agent: "game-qa"
command: "test-framework"
output: "Testing framework extension"
note: "Extend existing tests or set up new framework"
- phase: 3
name: "Production"
required: true
workflows:
- id: "sprint-planning"
required: true
agent: "game-scrum-master"
command: "sprint-planning"
note: "Creates sprint plan - subsequent work tracked in sprint-status.yaml"

View File

@ -0,0 +1,71 @@
# BMGD Game Development - Greenfield
# Full game design and development methodology for new game projects
method_name: "BMGD Game Development"
track: "gamedev"
field_type: "greenfield"
description: "Complete game design and development methodology for greenfield projects"
phases:
- phase: 0
name: "Pre-production (Optional)"
optional: true
note: "User-selected during workflow-init"
workflows:
- id: "brainstorm-game"
optional: true
agent: "game-designer"
command: "brainstorm-game"
included_by: "user_choice"
note: "Creative exploration and ideation for game concepts"
- id: "game-brief"
optional: true
agent: "game-designer"
command: "create-game-brief"
included_by: "user_choice"
note: "Recommended for greenfield game projects"
- phase: 1
name: "Design"
required: true
workflows:
- id: "gdd"
required: true
agent: "game-designer"
command: "create-gdd"
output: "Game Design Document with mechanics, systems, and content"
- id: "narrative"
conditional: "if_narrative_focused"
agent: "game-designer"
command: "narrative"
note: "For story-driven games - determined after GDD"
- phase: 2
name: "Technical"
required: true
workflows:
- id: "game-architecture"
required: true
agent: "game-architect"
command: "create-architecture"
output: "Game architecture document with systems and patterns"
note: "Complete technical design for game systems"
- id: "test-framework"
recommended: true
agent: "game-qa"
command: "test-framework"
output: "Game testing framework setup"
note: "Set up automated testing early"
- phase: 3
name: "Production"
required: true
workflows:
- id: "sprint-planning"
required: true
agent: "game-scrum-master"
command: "sprint-planning"
note: "Creates sprint plan - subsequent work tracked in sprint-status.yaml"

View File

@ -0,0 +1,29 @@
# BMGD Quick Flow - Brownfield
# Rapid game development for existing projects
method_name: "BMGD Quick Flow"
track: "quickflow"
field_type: "brownfield"
description: "Rapid development and iteration for existing game projects"
phases:
- phase: 1
name: "Planning"
required: true
workflows:
- id: "create-tech-spec"
required: true
agent: "game-solo-dev"
command: "create-tech-spec"
output: "Technical specification"
note: "Define changes for existing codebase"
- phase: 2
name: "Development"
required: true
workflows:
- id: "quick-dev"
required: true
agent: "game-solo-dev"
command: "quick-dev"
note: "Iterative development - repeat as needed"

View File

@ -0,0 +1,39 @@
# BMGD Quick Flow - Greenfield
# Rapid game prototyping and development for new projects
method_name: "BMGD Quick Flow"
track: "quickflow"
field_type: "greenfield"
description: "Rapid prototyping and development for new game projects"
phases:
- phase: 0
name: "Concept (Optional)"
optional: true
workflows:
- id: "brainstorm-game"
optional: true
agent: "game-solo-dev"
command: "brainstorm-game"
included_by: "user_choice"
- phase: 1
name: "Prototype"
required: true
workflows:
- id: "quick-prototype"
required: true
agent: "game-solo-dev"
command: "quick-prototype"
output: "Playable prototype"
note: "Test core mechanic quickly"
- phase: 2
name: "Development"
required: true
workflows:
- id: "quick-dev"
required: true
agent: "game-solo-dev"
command: "quick-dev"
note: "Iterative development - repeat as needed"

View File

@ -0,0 +1,63 @@
# BMGD Game Project Scale Levels - Source of Truth
levels:
0:
name: "Level 0"
title: "Game Jam / Prototype"
stories: "1-5 stories"
description: "48-72 hour game jam, mechanic prototype, proof of concept"
documentation: "Minimal - quick GDD notes only"
architecture: false
1:
name: "Level 1"
title: "Mini Game"
stories: "5-15 stories"
description: "Small complete game, single mechanic focus, mobile hypercasual"
documentation: "Game Brief + Light GDD"
architecture: false
2:
name: "Level 2"
title: "Indie Game"
stories: "15-40 stories"
description: "Full indie title, multiple systems, polished experience"
documentation: "Game Brief + GDD + Architecture"
architecture: true
3:
name: "Level 3"
title: "AA Game"
stories: "40-100 stories"
description: "Mid-size production, team coordination, multiple platforms"
documentation: "Full GDD + Architecture + Narrative Design"
architecture: true
4:
name: "Level 4"
title: "AAA Game"
stories: "100+ stories"
description: "Large-scale production, multiple teams, live service potential"
documentation: "Full documentation suite + production pipelines"
architecture: true
# Quick detection hints for workflow-init
detection_hints:
keywords:
level_0: ["jam", "prototype", "poc", "test", "experiment", "48 hour", "weekend"]
level_1: ["simple", "mini", "casual", "hypercasual", "mobile", "small game"]
level_2: ["indie", "steam", "itch", "complete game", "full game"]
level_3: ["aa", "mid-size", "production", "team", "publisher"]
level_4: ["aaa", "large", "enterprise", "live service", "multiple teams"]
story_counts:
level_0: [1, 5]
level_1: [5, 15]
level_2: [15, 40]
level_3: [40, 100]
level_4: [100, 999]
# Game-specific indicators
game_indicators:
engine_keywords: ["unity", "unreal", "godot", "gamemaker", "construct", "rpgmaker"]
genre_keywords: ["platformer", "rpg", "roguelike", "shooter", "puzzle", "adventure", "strategy", "simulation"]

View File

@ -0,0 +1,24 @@
# Workflow Status Template (BMGD)
# This tracks progress through BMGD methodology Pre-production, Design, and Technical phases.
# Implementation phase is tracked separately in sprint-status.yaml
# STATUS DEFINITIONS:
# ==================
# Initial Status (before completion):
# - required: Must be completed to progress
# - optional: Can be completed but not required
# - recommended: Strongly suggested but not required
# - conditional: Required only if certain conditions met (e.g., if_narrative_focused)
#
# Completion Status:
# - {file-path}: File created/found (e.g., "docs/gdd.md")
# - skipped: Optional/conditional workflow that was skipped
generated: "{{generated}}"
project: "{{project_name}}"
project_type: "{{project_type}}"
selected_track: "{{selected_track}}"
field_type: "{{field_type}}"
workflow_path: "{{workflow_path_file}}"
workflow_status: "{{workflow_items}}"

View File

@ -0,0 +1,30 @@
# Workflow Status - Master Router and Status Tracker for BMGD
name: workflow-status
description: 'Lightweight status checker - answers "what should I do now?" for any game dev agent. Reads YAML status file for workflow tracking. Use workflow-init for new projects.'
author: "BMad"
# Critical variables from config
config_source: "{project-root}/_bmad/bmgd/config.yaml"
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"
user_skill_level: "{config_source}:game_dev_experience"
date: system-generated
# Workflow components
installed_path: "{project-root}/_bmad/bmgd/workflows/workflow-status"
instructions: "{installed_path}/instructions.md"
# Template for status file creation (used by workflow-init)
template: "{installed_path}/workflow-status-template.yaml"
# Path definitions for project types
path_files: "{installed_path}/paths/"
# Output configuration - reads existing status
default_output_file: "{output_folder}/bmgd-workflow-status.yaml"
standalone: true
web_bundle: false