qa-gate-tmpl.yaml 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # <!-- Powered by BMAD™ Core -->
  2. template:
  3. id: qa-gate-template-v1
  4. name: Quality Gate Decision
  5. version: 1.0
  6. output:
  7. format: yaml
  8. filename: qa.qaLocation/gates/{{epic_num}}.{{story_num}}-{{story_slug}}.yml
  9. title: "Quality Gate: {{epic_num}}.{{story_num}}"
  10. # Required fields (keep these first)
  11. schema: 1
  12. story: "{{epic_num}}.{{story_num}}"
  13. story_title: "{{story_title}}"
  14. gate: "{{gate_status}}" # PASS|CONCERNS|FAIL|WAIVED
  15. status_reason: "{{status_reason}}" # 1-2 sentence summary of why this gate decision
  16. reviewer: "Quinn (Test Architect)"
  17. updated: "{{iso_timestamp}}"
  18. # Always present but only active when WAIVED
  19. waiver: { active: false }
  20. # Issues (if any) - Use fixed severity: low | medium | high
  21. top_issues: []
  22. # Risk summary (from risk-profile task if run)
  23. risk_summary:
  24. totals: { critical: 0, high: 0, medium: 0, low: 0 }
  25. recommendations:
  26. must_fix: []
  27. monitor: []
  28. # Examples section using block scalars for clarity
  29. examples:
  30. with_issues: |
  31. top_issues:
  32. - id: "SEC-001"
  33. severity: high # ONLY: low|medium|high
  34. finding: "No rate limiting on login endpoint"
  35. suggested_action: "Add rate limiting middleware before production"
  36. - id: "TEST-001"
  37. severity: medium
  38. finding: "Missing integration tests for auth flow"
  39. suggested_action: "Add test coverage for critical paths"
  40. when_waived: |
  41. waiver:
  42. active: true
  43. reason: "Accepted for MVP release - will address in next sprint"
  44. approved_by: "Product Owner"
  45. # ============ Optional Extended Fields ============
  46. # Uncomment and use if your team wants more detail
  47. optional_fields_examples:
  48. quality_and_expiry: |
  49. quality_score: 75 # 0-100 (optional scoring)
  50. expires: "2025-01-26T00:00:00Z" # Optional gate freshness window
  51. evidence: |
  52. evidence:
  53. tests_reviewed: 15
  54. risks_identified: 3
  55. trace:
  56. ac_covered: [1, 2, 3] # AC numbers with test coverage
  57. ac_gaps: [4] # AC numbers lacking coverage
  58. nfr_validation: |
  59. nfr_validation:
  60. security: { status: CONCERNS, notes: "Rate limiting missing" }
  61. performance: { status: PASS, notes: "" }
  62. reliability: { status: PASS, notes: "" }
  63. maintainability: { status: PASS, notes: "" }
  64. history: |
  65. history: # Append-only audit trail
  66. - at: "2025-01-12T10:00:00Z"
  67. gate: FAIL
  68. note: "Initial review - missing tests"
  69. - at: "2025-01-12T15:00:00Z"
  70. gate: CONCERNS
  71. note: "Tests added but rate limiting still missing"
  72. risk_summary: |
  73. risk_summary: # From risk-profile task
  74. totals:
  75. critical: 0
  76. high: 0
  77. medium: 0
  78. low: 0
  79. # 'highest' is emitted only when risks exist
  80. recommendations:
  81. must_fix: []
  82. monitor: []
  83. recommendations: |
  84. recommendations:
  85. immediate: # Must fix before production
  86. - action: "Add rate limiting to auth endpoints"
  87. refs: ["api/auth/login.ts:42-68"]
  88. future: # Can be addressed later
  89. - action: "Consider caching for better performance"
  90. refs: ["services/data.service.ts"]