2025-08-15 21:02:37 -05:00
# qa-gate
Create or update a quality gate decision file for a story based on review findings.
## Purpose
Generate a standalone quality gate file that provides a clear pass/fail decision with actionable feedback. This gate serves as an advisory checkpoint for teams to understand quality status.
## Prerequisites
- Story has been reviewed (manually or via review-story task)
- Review findings are available
- Understanding of story requirements and implementation
## Gate File Location
2025-08-16 21:38:33 -05:00
**ALWAYS** check the `bmad-core/core-config.yaml` for the `qa.qaLocation/gates`
2025-08-15 21:02:37 -05:00
Slug rules:
- Convert to lowercase
- Replace spaces with hyphens
- Strip punctuation
- Example: "User Auth - Login!" becomes "user-auth-login"
## Minimal Required Schema
```yaml
schema: 1
2025-08-16 19:08:39 -05:00
story: '{epic}.{story}'
2025-08-15 21:02:37 -05:00
gate: PASS|CONCERNS|FAIL|WAIVED
2025-08-16 19:08:39 -05:00
status_reason: '1-2 sentence explanation of gate decision'
reviewer: 'Quinn'
updated: '{ISO-8601 timestamp}'
2025-08-15 21:02:37 -05:00
top_issues: [] # Empty array if no issues
waiver: { active: false } # Only set active: true if WAIVED
```
## Schema with Issues
```yaml
schema: 1
2025-08-16 19:08:39 -05:00
story: '1.3'
2025-08-15 21:02:37 -05:00
gate: CONCERNS
2025-08-16 19:08:39 -05:00
status_reason: 'Missing rate limiting on auth endpoints poses security risk.'
reviewer: 'Quinn'
updated: '2025-01-12T10:15:00Z'
2025-08-15 21:02:37 -05:00
top_issues:
2025-08-16 19:08:39 -05:00
- id: 'SEC-001'
2025-08-15 21:02:37 -05:00
severity: high # ONLY: low|medium|high
2025-08-16 19:08:39 -05:00
finding: 'No rate limiting on login endpoint'
suggested_action: 'Add rate limiting middleware before production'
- id: 'TEST-001'
2025-08-15 21:02:37 -05:00
severity: medium
2025-08-16 19:08:39 -05:00
finding: 'No integration tests for auth flow'
suggested_action: 'Add integration test coverage'
2025-08-15 21:02:37 -05:00
waiver: { active: false }
```
## Schema when Waived
```yaml
schema: 1
2025-08-16 19:08:39 -05:00
story: '1.3'
2025-08-15 21:02:37 -05:00
gate: WAIVED
2025-08-16 19:08:39 -05:00
status_reason: 'Known issues accepted for MVP release.'
reviewer: 'Quinn'
updated: '2025-01-12T10:15:00Z'
2025-08-15 21:02:37 -05:00
top_issues:
2025-08-16 19:08:39 -05:00
- id: 'PERF-001'
2025-08-15 21:02:37 -05:00
severity: low
2025-08-16 19:08:39 -05:00
finding: 'Dashboard loads slowly with 1000+ items'
suggested_action: 'Implement pagination in next sprint'
2025-08-15 21:02:37 -05:00
waiver:
active: true
2025-08-16 19:08:39 -05:00
reason: 'MVP release - performance optimization deferred'
approved_by: 'Product Owner'
2025-08-15 21:02:37 -05:00
```
## Gate Decision Criteria
### PASS
- All acceptance criteria met
- No high-severity issues
- Test coverage meets project standards
### CONCERNS
- Non-blocking issues present
- Should be tracked and scheduled
- Can proceed with awareness
### FAIL
- Acceptance criteria not met
- High-severity issues present
- Recommend return to InProgress
### WAIVED
- Issues explicitly accepted
- Requires approval and reason
- Proceed despite known issues
## Severity Scale
**FIXED VALUES - NO VARIATIONS:**
- `low` : Minor issues, cosmetic problems
- `medium` : Should fix soon, not blocking
- `high` : Critical issues, should block release
## Issue ID Prefixes
- `SEC-` : Security issues
- `PERF-` : Performance issues
- `REL-` : Reliability issues
- `TEST-` : Testing gaps
- `MNT-` : Maintainability concerns
- `ARCH-` : Architecture issues
- `DOC-` : Documentation gaps
- `REQ-` : Requirements issues
## Output Requirements
2025-08-16 21:38:33 -05:00
1. **ALWAYS** create gate file at: `qa.qaLocation/gates` from `bmad-core/core-config.yaml`
2025-08-15 21:02:37 -05:00
2. **ALWAYS** append this exact format to story's QA Results section:
2025-08-16 21:38:33 -05:00
```text
Gate: {STATUS} → qa.qaLocation/gates/{epic}.{story}-{slug}.yml
2025-08-15 21:02:37 -05:00
```
2025-08-16 21:38:33 -05:00
2025-08-15 21:02:37 -05:00
3. Keep status_reason to 1-2 sentences maximum
4. Use severity values exactly: `low` , `medium` , or `high`
## Example Story Update
After creating gate file, append to story's QA Results section:
```markdown
## QA Results
### Review Date: 2025-01-12
### Reviewed By: Quinn (Test Architect)
[... existing review content ...]
### Gate Status
2025-08-16 21:38:33 -05:00
Gate: CONCERNS → qa.qaLocation/gates/{epic}.{story}-{slug}.yml
2025-08-15 21:02:37 -05:00
```
## Key Principles
- Keep it minimal and predictable
- Fixed severity scale (low/medium/high)
- Always write to standard path
- Always update story with gate reference
- Clear, actionable findings