2
0

instructions.md 15 KB

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 ⚠️ ABSOLUTELY NO TIME ESTIMATES - NEVER mention hours, days, weeks, months, or ANY time-based predictions. AI has fundamentally changed development speed - what once took teams weeks/months can now be done by one person in hours. DO NOT give ANY time estimates whatsoever.

Check for {{mode}} parameter passed by calling workflow Default mode = "interactive" if not specified

<action>Continue to Step 1 for normal status check flow</action>

<action>Jump to Step 10 for workflow validation service</action>

<action>Jump to Step 20 for data extraction service</action>

<action>Jump to Step 30 for simple init check</action>

<action>Jump to Step 40 for status update service</action>

Search {planning_artifacts}/ for file: bmm-workflow-status.yaml

No workflow status found. Would you like to run Workflow Init now? (y/n)

<action>Launching workflow-init to set up your project tracking...</action>
<invoke-workflow path="{project-root}/_bmad/bmm/workflows/workflow-status/init/workflow.yaml"></invoke-workflow>
<action>Exit workflow and let workflow-init take over</action>

<output>No workflow status file. Run workflow-init when ready to enable progress tracking.</output>
<action>Exit workflow</action>

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 For each workflow, look up its agent from the path file

📊 Current 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:bmm:workflows:{{next_workflow_id}}

{{#if optional_workflows_available}} Optional Workflows Available: {{#each optional_workflows}}

  • {{workflow_name}} ({{agent}}) - {{status}} {{/each}} {{/if}}

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:

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?

  1. Mark a workflow as completed (provide file path)
  2. Mark a workflow as skipped

Your choice:

<ask>Which workflow? (Enter workflow ID like 'prd' or 'create-architecture')</ask>
<ask>File path created? (e.g., docs/prd.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>

<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>

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}}

<template-output>should_proceed = true</template-output>
<template-output>warning = ""</template-output>
<template-output>suggestion = "Proceeding with planned next step"</template-output>

<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>

<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>

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

<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>

<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>

<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>

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

<action>Get {{workflow_id}} parameter (required)</action>
<action>Get {{default_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}}: {{default_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>default_output_file = {{default_output_file}}</template-output>

<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>

<template-output>success = false</template-output>
<template-output>error = "Unknown action: {{action}}. Valid actions: complete_workflow, skip_workflow"</template-output>

Return control to calling workflow with template outputs