Files
BMAD-METHOD/expansion-packs/bmad-godot-game-dev/templates/game-qa-gate-tmpl.yaml
sjennings f20d572216 Godot Game Dev expansion pack for BMAD (#532)
* Godot Game Dev expansion pack for BMAD

* Workflow changes

* Workflow changes

* Fixing config.yaml, editing README.md to indicate correct workflow

* Fixing references to config.yaml, adding missing QA review to game-dev agent

* More game story creation fixes

* More game story creation fixes

* Adding built web agent file

* - Adding ability for QA agent to have preloaded context files similar to Dev agent.
- Fixing stray Unity references in game-architecture-tmpl.yaml

---------

Co-authored-by: Brian <bmadcode@gmail.com>
2025-09-06 13:49:21 -05:00

187 lines
7.0 KiB
YAML

template:
id: godot-qa-gate-template-v2
name: Godot Game Quality Gate Decision
version: 2.0
output:
format: yaml
filename: docs/qa/gates/{{epic_num}}.{{story_num}}-{{story_slug}}.yml
title: "Godot Quality Gate: {{epic_num}}.{{story_num}}"
# Required fields (keep these first)
schema: 1
story: "{{epic_num}}.{{story_num}}"
story_title: "{{story_title}}"
gate: "{{gate_status}}" # PASS|CONCERNS|FAIL|WAIVED
status_reason: "{{status_reason}}" # 1-2 sentence summary focusing on TDD compliance and 60+ FPS performance
reviewer: "Linus (Godot Game Test Architect)"
updated: "{{iso_timestamp}}"
# Always present but only active when WAIVED
waiver: { active: false }
# Godot-specific Issues (if any) - Use fixed severity: low | medium | high
top_issues: [] # Focus on performance drops below 60 FPS, missing TDD tests, wrong language choices
# Risk summary (from risk-profile task if run)
risk_summary:
totals: { critical: 0, high: 0, medium: 0, low: 0 }
recommendations:
must_fix: []
monitor: []
# Godot examples section using block scalars for clarity
examples:
with_issues: |
top_issues:
- id: "PERF-001"
severity: high # ONLY: low|medium|high
finding: "Frame rate drops to 45 FPS during particle spawning"
suggested_action: "Implement object pooling for particle systems"
- id: "TDD-001"
severity: high
finding: "No GUT tests for player controller despite GDScript implementation"
suggested_action: "Add GUT test coverage before marking story complete"
- id: "LANG-001"
severity: medium
finding: "Physics system using GDScript instead of C# causing performance issues"
suggested_action: "Refactor physics calculations to C# for better performance"
when_waived: |
waiver:
active: true
reason: "Performance at 55 FPS acceptable for early access - optimization planned for next sprint"
approved_by: "Product Owner"
# ============ Optional Extended Fields ============
# Uncomment and use if your team wants more detail
# CRITICAL: Gates should FAIL if performance drops below 60 FPS or TDD is not followed
optional_fields_examples:
quality_and_expiry: |
quality_score: 75 # 100 - (20*FAILs) - (10*CONCERNS) - (5*FPS_drops_below_60)
expires: "2025-01-26T00:00:00Z" # Optional gate freshness window
evidence: |
evidence:
gut_tests_reviewed: 15 # GDScript tests
godottest_reviewed: 8 # C# tests
performance_validated: true # 60+ FPS confirmed
language_strategy_verified: true # GDScript/C# choices appropriate
trace:
ac_covered: [1, 2, 3] # AC numbers with GUT/GoDotTest coverage
ac_gaps: [4] # AC numbers lacking TDD coverage
fps_validation: "60+ FPS on all target platforms"
nfr_validation: |
nfr_validation:
performance: { status: PASS, notes: "60+ FPS maintained, frame time <16.67ms" }
tdd_compliance: { status: PASS, notes: "GUT coverage 85%, GoDotTest coverage 80%" }
language_strategy: { status: PASS, notes: "GDScript for logic, C# for physics - appropriate" }
object_pooling: { status: CONCERNS, notes: "Pooling missing for bullet spawns" }
signal_cleanup: { status: PASS, notes: "All signals properly disconnected" }
platform_exports: { status: PASS, notes: "Export templates configured for all targets" }
history: |
history: # Append-only audit trail
- at: "2025-01-12T10:00:00Z"
gate: FAIL
note: "Initial review - FPS dropped to 45, no GUT tests"
- at: "2025-01-12T15:00:00Z"
gate: CONCERNS
note: "GUT tests added, FPS improved to 58 - needs object pooling"
risk_summary: |
risk_summary: # From Godot risk-profile task
totals:
critical: 0 # FPS < 30 or no TDD
high: 0 # FPS < 60 or wrong language choice
medium: 0 # Missing optimizations
low: 0 # Minor issues
# 'highest' is emitted only when risks exist
recommendations:
must_fix: [] # Performance below 60 FPS, missing TDD
monitor: [] # Language strategy concerns
recommendations: |
recommendations:
immediate: # Must fix before production
- action: "Implement object pooling for all spawned entities"
refs: ["res://scripts/spawners/bullet_spawner.gd:42-68"]
- action: "Add GUT tests for player controller"
refs: ["res://scripts/player/player_controller.gd"]
- action: "Optimize particle system to maintain 60+ FPS"
refs: ["res://scenes/effects/particles.tscn"]
future: # Can be addressed later
- action: "Consider migrating physics to C# for 20% performance gain"
refs: ["res://scripts/physics/physics_manager.gd"]
- action: "Add performance benchmarks to GUT test suite"
refs: ["res://tests/"]
godot_performance_metrics: |
godot_metrics:
frame_rate:
current: 62 # Current FPS
target: 60 # Minimum acceptable (FAIL if below)
peak: 120 # Best achieved
frame_time:
current_ms: 16.1 # Current frame time
target_ms: 16.67 # Maximum for 60 FPS
memory:
scene_mb: 45 # Scene memory usage
texture_mb: 128 # Texture memory
pool_count: 5 # Active object pools
draw_calls:
current: 85
budget: 100 # Platform-specific budget
language_distribution:
gdscript_files: 45 # With static typing
csharp_files: 12 # Performance-critical systems
test_coverage_metrics: |
test_coverage:
gut_tests:
total: 45
passing: 43
coverage_percent: 85
performance_tests: 8 # Tests validating 60+ FPS
godottest_tests:
total: 20
passing: 20
coverage_percent: 80
physics_tests: 15 # C# physics validation
tdd_compliance:
stories_with_tests_first: 18
stories_without_tests: 2
compliance_percent: 90
# ============ Godot Gate Decision Criteria ============
# Apply these rules in order to determine gate status:
gate_decision_rules: |
1. AUTOMATIC FAIL CONDITIONS:
- Performance below 60 FPS on any target platform
- No TDD tests (neither GUT nor GoDotTest)
- Memory leaks detected (signals not cleaned up)
- Wrong language choice causing performance issues
- Object pooling missing for frequently spawned entities
2. CONCERNS CONDITIONS:
- Performance between 55-59 FPS
- TDD coverage below 80%
- Static typing not used in GDScript
- LINQ usage in C# hot paths
- Scene transitions exceeding 3 seconds
3. PASS CONDITIONS:
- Consistent 60+ FPS across all platforms
- GUT/GoDotTest coverage >= 80%
- Appropriate language choices (GDScript for logic, C# for performance)
- Object pooling implemented for all spawned entities
- All signals properly connected and cleaned up
4. WAIVER ONLY WITH:
- Product Owner approval
- Clear remediation plan
- Timeline for fixing issues
- Risk acceptance documented