# Execução — `CV-5` Histórico de bolões anteriores e títulos

**Plano:** `CV-5-plano.md` · **Data:** 07/08/2026
**Ambiente:** backend local (`test/ciclo-vida.e2e-spec.ts`), Flutter em teste de
widget (`test/ciclo_vida_test.dart`).

**Resultado: 10/10 ✅** — nenhum defeito; 1 caso novo (erro de rede distinto de
histórico vazio).

| ID | Resultado | Onde |
| -- | --------- | ---- |
| CV-5-01 | ✅ | e2e "histórico distingue campeão, co-campeão e abandonado" |
| CV-5-02 | ✅ | widget "conta os títulos e mostra a posição de cada bolão" |
| CV-5-03 | ✅ | e2e mesma suíte (`CO_CAMPEAO`) + widget |
| CV-5-04 | ✅ | e2e "histórico de quem abandonou não traz posição final" + widget |
| CV-5-05 | ✅ | widget "histórico vazio explica quando ele se preenche" |
| CV-5-06 | ✅ | e2e "histórico distingue…" (só encerrados entram) |
| CV-5-07 | ✅ | widget "encerramento antecipado é distinguido no histórico" |
| CV-5-08 | ✅ | e2e "histórico diz quem é admin, para o app não oferecer arquivar a todos" |
| CV-5-09 | ✅ **novo** | widget "CV-5-09 mostra o motivo e permite tentar de novo" |
| CV-5-10 | ✅ | widget "conta os títulos…" |

## Observações

- **`CV-5-09` é o terceiro lugar onde o mesmo par de estados aparece:** "não tenho
  histórico" e "não deu para carregar". Já apareceu na home (`CC-10-11`) e na
  rodada (`PP-1-13`). Aqui o custo do engano é o pior dos três: a pessoa acha que
  **perdeu os títulos** dela.
- `CV-5-04` é o caso que protege a comparação: quem saiu no meio não recebe posição
  final. Dar posição a ele compararia quem jogou o campeonato inteiro com quem
  jogou três rodadas.
- `CV-5-08` existe por causa de um defeito de UI já corrigido: sem `isAdmin` no
  histórico, a tela oferecia arquivar a todos e o participante comum descobria pelo
  403.
