# Execução — `CC-8` Promover e remover segundo administrador

**Plano:** `CC-8-plano.md` · **Data:** 06/08/2026
**Ambiente:** backend local (`test/membros.e2e-spec.ts`), Flutter em teste de
widget (`test/participantes_page_test.dart`).

**Resultado: 12/12 ✅** — nenhum defeito de produto; 4 casos de servidor e 2 de
UI que ninguém cobria passaram na primeira execução.

| ID | Resultado | Onde |
| -- | --------- | ---- |
| CC-8-01 | ✅ | e2e "admin promove outro participante a admin" |
| CC-8-02 | ✅ | e2e "não deixa o bolão sem administrador" (rebaixamento) |
| CC-8-03 | ✅ | e2e "participante comum não promove ninguém" |
| CC-8-04 | ✅ | e2e "o criador é admin permanente e não pode ser rebaixado" |
| CC-8-05 | ✅ | e2e "não deixa o bolão sem administrador" |
| CC-8-06 | ✅ **novo** | e2e "CC-8-06 promover quem já é admin é no-op" |
| CC-8-07 | ✅ **novo** | e2e "CC-8-07 promover quem saiu do bolão é recusado" |
| CC-8-08 | ✅ **novo** | e2e "CC-8-08 promover alguém de fora não cria vínculo" |
| CC-8-09 | ✅ | e2e "admin novo NÃO ganha acesso a palpite oculto" |
| CC-8-10 | ✅ **novo** | e2e "CC-8-10 admin rebaixado perde os poderes na hora" |
| CC-8-11 | ✅ **novo** | widget "CC-8-11 rebaixar pede confirmação…" |
| CC-8-12 | ✅ **novo** | widget "CC-8-12 recusa do servidor aparece com o motivo" |

## Observações

- **CC-8-05 é verdadeiro por construção, não por checagem.** Como o criador é
  admin permanente e não sai nem é removido, existe sempre ≥ 1 admin. A regra
  explícita de "não deixa sem admin" cobre o caminho da saída; o rebaixamento
  cobre o do papel. Vale registrar: se algum dia o criador puder sair ou
  transferir a administração, `remover`/`rebaixar` passam a precisar da checagem
  de "último admin" que hoje não têm.
- **CC-8-10 é o caso que valida a arquitetura de autorização.** O papel é lido
  do banco a cada requisição, não do JWT — se estivesse no token, o rebaixamento
  só valeria no próximo login, e o admin rebaixado continuaria corrigindo placar
  por até uma hora. Passou sem alteração.
- Promover é `changed: false` quando não há mudança: toque duplo no menu não
  produz erro nem registro duplicado.
