# Execução — plano `CV-1` (06/08)

**Veredito inicial: ❌ Reprovado** — `CV-1-09` falhou.
**Depois da correção: ✅ Aprovado** — 10 de 10.

| Caso | Resultado | Evidência |
| ---- | --------- | --------- |
| CV-1-01 | passou | `test/ciclo-vida.e2e-spec.ts` — encerra e aponta o campeão |
| CV-1-02 | passou | idem — 409 com jogo sem resultado |
| CV-1-03 | passou | idem — `CV-1-03` (novo) |
| CV-1-04 | passou | idem — `CV-1-04` (novo) |
| CV-1-05 | passou | idem — encerrado não aceita palpite |
| CV-1-06 | passou | idem + `test/convite.e2e-spec.ts` |
| CV-1-07 | passou | `test/correcao.e2e-spec.ts` — `PR-10-09` |
| CV-1-08 | passou | `test/ciclo_vida_test.dart` — classificação final rolável |
| CV-1-09 | **falhou → corrigido** | `test/ciclo-vida.e2e-spec.ts` — `CV-1-09` |
| CV-1-10 | passou | `test/rodada_encerrada_test.dart` + device |

---

## Bug encontrado por `CV-1-09`

**Título:** bolão em que ninguém pontuou declarava **todos** co-campeões

**Passos para reproduzir:**
1. Criar um bolão e encerrá-lo sem que ninguém tenha acertado nada (todos com
   zero — por exemplo, ninguém palpitou).
2. Ler o resultado do encerramento.

**Esperado:** nenhum campeão. A tela diz "Nenhum campeão: ninguém pontuou".

**Obtido:** `champions` com **todos os participantes**, cada um com 0 pontos — e
a tela exibindo "Co-campeões: Ana, Bruno, Carla".

**Severidade: média.** Não corrompe dado, mas inventa um título. O campeão era
derivado de `position === 1`, e com todo mundo empatado em zero **todos** ficam em
primeiro. Declarar a galera inteira co-campeã de um bolão em que ninguém acertou
nada é pior que não ter campeão: transforma o resultado num deboche e some com a
única informação útil, que é "ninguém pontuou".

**Corrigido** exigindo `points > 0` para ser campeão. A tela já tinha o estado
"Nenhum campeão: ninguém pontuou" pronto — ele simplesmente nunca era alcançado.

Registro um detalhe do processo: meu primeiro teste para este caso **afirmava o
comportamento errado** (`champions.every(c => c.points === 0)`), porque eu escrevi
a asserção olhando a resposta em vez do plano. Reescrevi conforme o plano
(`champions` vazio) e aí o teste ficou vermelho, como devia. Teste escrito a
partir da observação valida o que existe, não o que foi pedido.

## Lacunas que a execução expôs

- **`CV-1-04`** — encerrar duas vezes. Dois toques no botão não podem gerar dois
  encerramentos com horários diferentes; o segundo devolve o mesmo resultado.
- **`CV-1-03`** — jogo remarcado para depois do fim do bolão. O normal recusa e o
  antecipado é a única saída, marcado como tal. Sem isso o bolão fica preso para
  sempre esperando um jogo que a CBF remarcou.
