---
id: qa-review-story
agent: qa
title: Review completo de uma story com decisão de gate
inputs: [story]
outputs: [seção "QA Results" da story, decisão de gate, fix-request (se FAIL/CONCERNS)]
elicit: false
modes: [interactive, yolo]
---

# Review completo de uma story com decisão de gate

**Objetivo:** auditar uma story marcada `Ready for Review` em todos os eixos de risco e emitir uma
decisão de gate fundamentada — escrevendo SOMENTE a seção "QA Results" da story.

**Pré-condições:**
- A story existe e está em `Ready for Review`. Se estiver em `Draft`/`InProgress`, **pare** e
  reporte — não reviso o que o @dev ainda não declarou pronto.
- A story tem ACs e seção de Testing. Sem o contrato, não há barra a julgar: devolvo ao @sm/@po.

## Passos

1. **Entendo o contrato.** Leio a story COMPLETA — ACs, escopo, Dev Notes, Testing, File List. Defino
   o que "pronto" significa AQUI antes de julgar qualquer linha.
2. **Perfilo o risco** (`qa-risk-profile`). Mapeio probabilidade × impacto por área para decidir onde
   mergulho fundo e onde sou concisa. Profundidade segue o sinal de risco, não o humor.
3. **Scan automatizado PRIMEIRO** (`*code-review`, CodeRabbit). Roda antes da análise manual,
   self-healing de no máximo 2 iterações para CRITICAL/HIGH. Não começo o manual antes do scan fechar.
4. **Caço o que falha em produção**, com profundidade proporcional ao risco: segurança
   (`qa-security-checklist`), NFRs (`qa-nfr-assess`), migrations (`qa-migration-validation`), console
   do browser (`qa-browser-console-check`).
5. **Rastreio requisito → teste** (`qa-trace-requirements`). Toda AC ganha seu Given-When-Then. AC
   órfã vira gap registrado, com severidade.
6. **Verifico evidência e falso-positivo** (`qa-evidence-requirements`, `qa-false-positive-detection`).
   "Corrigido" sem teste de regressão é hipótese, não fato.
7. **Emito o gate** (`qa-gate`): PASS / CONCERNS / FAIL / WAIVED, com fundamentação rastreável a AC,
   NFR ou CON. Escrevo a decisão na seção "QA Results" da story — nada mais.
8. **Roteio a saída.** FAIL/CONCERNS → gero o fix-request (`qa-create-fix-request`) e devolvo ao @dev
   com o defeito preciso. PASS e pronto pra subir → @devops. Nunca subo nada eu mesma.

## Critério de pronto (DoD)

- [ ] Story lida por inteiro e contrato ("pronto") definido antes do julgamento
- [ ] Scan automatizado rodado e fechado antes da análise manual
- [ ] Todos os eixos de risco cobertos com profundidade proporcional ao risco
- [ ] Toda AC rastreada a teste; gaps registrados com severidade
- [ ] Decisão de gate emitida com fundamentação rastreável
- [ ] Apenas a seção "QA Results" foi escrita — nenhuma outra seção tocada
- [ ] Saída roteada: @dev (fix-request) ou @devops (subida)

## Falha / recuperação

- **Scan automatizado mantém CRITICAL após 2 iterações** → registro e o gate não pode ser PASS.
- **Story sem ACs ou sem Testing** → HALT, devolvo ao @sm/@po; não invento o contrato.
- **Evidência ausente para um "funciona"** → CONCERNS no mínimo; não aprovo no escuro.
- **Achado exige correção de código** → gero fix-request e delego ao @dev; não conserto eu mesma.
