# Workflow Status Check - Multi-Mode Service
The workflow execution engine is governed by: {project-root}/bmad/core/tasks/workflow.xml
You MUST have already loaded and processed: {project-root}/bmad/bmm/workflows/workflow-status/workflow.yaml
This workflow operates in multiple modes: interactive (default), validate, data, init-check, update
Other workflows can call this as a service to avoid duplicating status logic
Check for {{mode}} parameter passed by calling workflow
Default mode = "interactive" if not specified
Continue to Step 1 for normal status check flow
Jump to Step 10 for workflow validation service
Jump to Step 20 for data extraction service
Jump to Step 30 for simple init check
Jump to Step 40 for status update service
Search {output_folder}/ for file: bmm-workflow-status.yaml
Exit workflow
Continue to step 2
Read bmm-workflow-status.yaml
Parse YAML file and extract metadata from comments and fields:
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)
Parse workflow_status section:
- 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)
Determine current state:
- 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
Load workflow path file based on workflow_path field
Identify current phase from next workflow to be done
Build list of completed, pending, and optional workflows
What would you like to do?
1. **Start next workflow** - {{next_workflow_name}} ({{next_agent}} 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:
Handle user selection based on available options
Which optional workflow?
{{#each optional_workflows numbered}}
{{number}}. {{workflow_name}} ({{agent}})
{{/each}}
Your choice:
Display selected workflow command and agent
Display complete bmm-workflow-status.yaml file contents
What would you like to update?
1. Mark a workflow as **completed** (provide file path)
2. Mark a workflow as **skipped**
Your choice:
Which workflow? (Enter workflow ID like 'prd' or 'create-architecture')
File path created? (e.g., docs/prd.md)
ONLY write the file path as the status value - no other text, notes, or metadata
Update workflow_status in YAML file: {{workflow_id}}: {{file_path}}
Save updated YAML file preserving ALL structure and comments
Which workflow to skip? (Enter workflow ID)
Update workflow_status in YAML file: {{workflow_id}}: skipped
Save updated YAML file
Read {output_folder}/bmm-workflow-status.yaml if exists
status_exists = false
should_proceed = true
warning = "No status file found. Running without progress tracking."
suggestion = "Consider running workflow-init first for progress tracking"
Return to calling workflow
Parse YAML file to extract project metadata and workflow_status
Load workflow path file from workflow_path field
Find first non-completed workflow in workflow_status (next workflow)
Check if {{calling_workflow}} matches next workflow or is in the workflow list
status_exists = true
project_level = {{project_level}}
project_type = {{project_type}}
field_type = {{field_type}}
next_workflow = {{next_workflow_id}}
should_proceed = true
warning = ""
suggestion = "Proceeding with planned next step"
Check the status of calling_workflow in YAML
should_proceed = true
warning = "⚠️ Workflow already completed: {{calling_workflow}}"
suggestion = "This workflow was already completed. Re-running will overwrite: {{status}}"
should_proceed = true
warning = "Running optional workflow {{calling_workflow}}"
suggestion = "This is optional. Expected next: {{next_workflow}}"
should_proceed = true
warning = "⚠️ Out of sequence: Expected {{next_workflow}}, running {{calling_workflow}}"
suggestion = "Consider running {{next_workflow}} instead, or continue if intentional"
should_proceed = true
warning = "⚠️ Unknown workflow: {{calling_workflow}} not in workflow path"
suggestion = "This workflow is not part of the defined path for this project"
status_file_path = {{path to bmm-workflow-status.yaml}}
Return control to calling workflow with all template outputs
Read {output_folder}/bmm-workflow-status.yaml if exists
status_exists = false
error = "No status file to extract data from"
Return to calling workflow
Parse YAML file completely
status_exists = true
project_name = {{project}}
project_type = {{project_type}}
project_level = {{project_level}}
field_type = {{field_type}}
workflow_path = {{workflow_path}}
Parse workflow_status section and return all workflow: status pairs
workflow_status = {{workflow_status_object}}
Calculate completion stats:
total_workflows = {{count all workflows}}
completed_workflows = {{count file path statuses}}
pending_workflows = {{count required/optional/etc}}
skipped_workflows = {{count skipped}}
Return all parsed fields as template outputs
project = {{project}}
project_type = {{project_type}}
project_level = {{project_level}}
field_type = {{field_type}}
workflow_path = {{workflow_path}}
workflow_status = {{workflow_status_object}}
generated = {{generated}}
status_file_path = {{path to bmm-workflow-status.yaml}}
Return control to calling workflow with requested data
Check if {output_folder}/bmm-workflow-status.yaml exists
status_exists = true
suggestion = "Status file found. Ready to proceed."
status_exists = false
suggestion = "No status file. Run workflow-init to create one (optional for progress tracking)"
Return immediately to calling workflow
Read {output_folder}/bmm-workflow-status.yaml
success = false
error = "No status file found. Cannot update."
Return to calling workflow
Parse YAML file completely
Load workflow path file from workflow_path field
Check {{action}} parameter to determine update type
Get {{workflow_id}} parameter (required)
Get {{output_file}} parameter (required - path to created file)
ONLY write the file path as the status value - no other text, notes, or metadata
Update workflow status in YAML:
- In workflow_status section, update: {{workflow_id}}: {{output_file}}
Find {{workflow_id}} in loaded path YAML
Determine next workflow from path sequence
Find first workflow in workflow_status with status != file path and != skipped
Save updated YAML file preserving ALL structure and comments
success = true
next_workflow = {{determined next workflow}}
next_agent = {{determined next agent from path file}}
completed_workflow = {{workflow_id}}
output_file = {{output_file}}
Get {{workflow_id}} parameter (required)
Update workflow status in YAML:
- In workflow_status section, update: {{workflow_id}}: skipped
Save updated YAML file
success = true
skipped_workflow = {{workflow_id}}
success = false
error = "Unknown action: {{action}}. Valid actions: complete_workflow, skip_workflow"
Return control to calling workflow with template outputs