---
id: qa-verdict-tmpl
kind: template
agent: qa
produces: bloco <verdict> no output do @qa (persistido em .nexus/verdicts/<runId>-<taskId>.json)
---

# Veredito de QA — bloco `<verdict>`

O gate da Quinn tem duas faces. A **prosa** vai na seção "QA Results" da story (para humanos). O
**veredito estruturado** vai num bloco `<verdict>` no fim do output — o motor o parseia, valida contra
o contrato `QaVerdict` e persiste. Emita **exatamente um** bloco; dois é ambíguo e o motor descarta.

```
<verdict>
{
  "verdict": "PASS | FAIL | BLOCKED",
  "attempt": 1,
  "issues": [
    {
      "categoria": "{ex.: layout, segurança, rastreabilidade, regressão}",
      "severidade": "P0 | P1 | P2 | P3",
      "expected": "{o que a AC/spec exige}",
      "actual": "{o que de fato acontece — observado, não suposto}",
      "evidence": "{prova: arquivo:linha, teste que falha, a.png == b.png, log}"
    }
  ],
  "fixInstructions": ["{passo objetivo para o @dev consertar}"],
  "filesToModify": [{ "path": "{arquivo}", "oQueMudar": "{o defeito preciso}" }],
  "evidenceRefs": ["{captura/artefato: .nexus/evidence/<story>/home-1440.png}"]
}
</verdict>
```

## Regras do contrato (o motor força)

- **`verdict: FAIL` exige ao menos 1 `issue`.** Reprovar sem apontar o defeito com evidência não existe
  no Nexus — o boundary Zod recusa. Se você não consegue nomear a issue, você não tem um FAIL: tem uma
  dúvida (investigue) ou um PASS.
- **`evidence` é obrigatória e não-vazia em toda issue.** "Parece errado" não é evidência. `arquivo:linha`,
  o teste que falha, o diff de duas capturas, o log — isso é.
- **`attempt` vai de 1 a 3.** Reprovar 2–3 vezes é o processo funcionando, não falhando. Na 3ª sem
  convergir, o veredito tende a `BLOCKED` (escala), não a um PASS por cansaço.
- **`PASS` sem `evidenceRefs`** é permitido pelo contrato, mas o gate `--reality` avisa: nota perfeita
  sem prova é suspeita. Anexe o que você viu rodar.

## Exemplos

**PASS com evidência:**
```
<verdict>
{ "verdict": "PASS", "attempt": 1, "evidenceRefs": [".nexus/evidence/1.4/checkout-1440.png"] }
</verdict>
```

**FAIL rastreável (o @dev consegue consertar sem adivinhar):**
```
<verdict>
{
  "verdict": "FAIL",
  "attempt": 2,
  "issues": [{
    "categoria": "regressão",
    "severidade": "P1",
    "expected": "acordeão expande ao clicar (AC-3)",
    "actual": "não expande — o handler não é registrado",
    "evidence": "accordion-0-before.png == accordion-0-after.png (idênticos); Accordion.tsx:42"
  }],
  "fixInstructions": ["registrar onClick no item; adicionar teste que reproduz o não-expandir"],
  "filesToModify": [{ "path": "src/Accordion.tsx", "oQueMudar": "bind do onClick ausente na linha 42" }]
}
</verdict>
```
