15 KiB
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 No workflow status found. To get started:Load analyst agent and run: workflow-init
This will guide you through project setup and create your workflow path. 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
Project: {{project}} (Level {{project_level}} {{project_type}})
Path: {{workflow_path}}
Progress:
{{#each phases}} {{phase_name}}: {{#each workflows_in_phase}}
- {{workflow_name}}: {{status_display}} {{/each}} {{/each}}
🎯 Next Steps
Next Workflow: {{next_workflow_name}}
Agent: {{next_agent}}
Command: /bmad:bmm:workflows:{{next_workflow_id}}
{{#if optional_workflows_available}} Optional Workflows Available: {{#each optional_workflows}}
- {{workflow_name}} ({{agent}}) - {{status}} {{/each}} {{/if}}
- Start next workflow - {{next_workflow_name}} ({{next_agent}} agent) {{#if optional_workflows_available}}
- Run optional workflow - Choose from available options {{/if}}
- View full status YAML - See complete status file
- Update workflow status - Mark a workflow as completed or skipped
- Exit - Return to agent
Your choice:
Handle user selection based on available options
Ready to run {{next_workflow_name}}!Command: /bmad:bmm: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}}
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?- Mark a workflow as completed (provide file path)
- 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 ✅ Updated {{workflow_id}} to completed: {{file_path}} Which workflow to skip? (Enter workflow ID) Update workflow_status in YAML file: {{workflow_id}}: skipped Save updated YAML file ✅ Marked {{workflow_id}} as skipped 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 liststatus_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<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>
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)<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>
Get {{workflow_id}} parameter (required)
<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>
success = false
error = "Unknown action: {{action}}. Valid actions: complete_workflow, skip_workflow"
Return control to calling workflow with template outputs