BMAD-METHOD/src/bmm/workflows/5-validation/uat-validate/workflow.yaml

157 lines
4.5 KiB
YAML

# UAT Validate Workflow
name: uat-validate
description: "Execute User Acceptance Testing scenarios against a completed epic, validate implementations meet acceptance criteria, and trigger self-healing fix loops on failures"
author: "BMad"
# Critical variables from config
config_source: "{project-root}/_bmad/bmm/config.yaml"
user_name: "{config_source}:user_name"
communication_language: "{config_source}:communication_language"
date: system-generated
planning_artifacts: "{config_source}:planning_artifacts"
implementation_artifacts: "{config_source}:implementation_artifacts"
sprint_artifacts: "{config_source}:sprint_artifacts"
output_folder: "{sprint_artifacts}"
# Workflow components
installed_path: "{project-root}/_bmad/bmm/workflows/5-validation/uat-validate"
instructions: "{installed_path}/instructions.md"
fix_context_template: "{installed_path}/uat-fix-context-template.md"
# Variables and inputs
variables:
# Project context
project_context: "**/project-context.md"
project_name: "{config_source}:project_name"
# UAT document locations
uat_docs_location: "{planning_artifacts}/uat"
uat_doc_pattern: "epic-{epic_id}-uat.md"
# Story locations (for acceptance criteria reference)
stories_location: "{implementation_artifacts}"
# Metrics output
metrics_folder: "{sprint_artifacts}/metrics"
metrics_file: "{metrics_folder}/epic-{epic_id}-metrics.yaml"
# Fix context output (for self-healing loop)
fix_context_file: "{sprint_artifacts}/uat-fix-context-{epic_id}-{attempt}.md"
# Gate configuration
gate_mode: "quick" # quick | full | skip
timeout_per_scenario: 30 # seconds per scenario execution
# Self-healing configuration
self_heal_enabled: true
max_retries: 2 # maximum fix attempts before halting
fix_workflow: "quick-dev" # workflow to invoke for fixes
on_max_retries: "halt" # halt | continue_with_warning | notify_human
# Scenario classification patterns
scenario_patterns:
automatable:
description: "Scenarios that can be fully automated via shell execution"
indicators:
- "npx"
- "npm run"
- "curl"
- "wget"
- "--version"
- "db status"
- "db migrate"
- "config validate"
- "/health"
- "test-queue"
validation_method: "shell_execution"
semi_automated:
description: "Scenarios that can be executed but require manual verification"
indicators:
- "test-send"
- "email"
- "inbox"
- "check your"
- "verify in browser"
validation_method: "execute_and_flag"
manual_only:
description: "Scenarios requiring full human interaction"
indicators:
- "Railway"
- "dashboard"
- "two terminal"
- "side by side"
- "browser"
- "visual"
validation_method: "skip_with_checklist"
# Input file patterns
input_file_patterns:
uat_document:
description: "UAT document for the epic being validated"
pattern: "{uat_docs_location}/epic-{epic_id}-uat.md"
load_strategy: "FULL_LOAD"
required: true
stories:
description: "Story files for acceptance criteria reference"
pattern: "{stories_location}/story-{epic_id}.*.md"
load_strategy: "METADATA_ONLY"
required: false
epic_metrics:
description: "Existing metrics file if re-validating"
pattern: "{metrics_folder}/epic-{epic_id}-metrics.yaml"
load_strategy: "FULL_LOAD"
required: false
# Output files
outputs:
gate_result:
description: "Gate pass/fail result for script parsing"
format: |
UAT_GATE_RESULT: {PASS|FAIL}
CRITICAL_PASSED: {n}/{total}
BLOCKING_ISSUES: [{scenario_ids}]
FIX_CONTEXT: {path_if_generated}
metrics_update:
description: "Updated metrics file with validation results"
path: "{metrics_file}"
fix_context:
description: "Fix context document for quick-dev (only on failure)"
path: "{fix_context_file}"
condition: "gate_result == FAIL"
# Workflow phases
phases:
- name: "load"
description: "Load UAT document and classify scenarios"
outputs:
- scenario_list
- classification_summary
- name: "execute"
description: "Execute automatable scenarios via shell"
outputs:
- execution_results
- pass_count
- fail_count
- name: "evaluate"
description: "Determine gate status and generate fix context if needed"
outputs:
- gate_result
- fix_context (conditional)
- name: "report"
description: "Update metrics and output results"
outputs:
- metrics_file
- gate_output
standalone: true
web_bundle: false