# Execução — `AC-1` Cadastro com e-mail, senha e nome de exibição

**Plano:** `AC-1-plano.md` · **Data:** 07/08/2026
**Ambiente:** backend local (`test/auth.e2e-spec.ts`), Flutter em teste de widget
(`test/cadastro_page_test.dart`, `test/convite_funil_test.dart`).

**Resultado: 12/12 ✅** — nenhum defeito; 1 caso novo (falha de rede real, não
falha de validação).

| ID | Resultado | Onde |
| -- | --------- | ---- |
| AC-1-01 | ✅ | e2e "cria a conta e não devolve senha nem hash" |
| AC-1-02 | ✅ | e2e mesma suíte |
| AC-1-03 | ✅ | e2e "recusa e-mail duplicado apontando para o login" |
| AC-1-04 | ✅ | e2e "recusa e-mail malformado" |
| AC-1-05 | ✅ | e2e "recusa senha curta sem ecoar o valor enviado" |
| AC-1-06 | ✅ | e2e "recusa campo não previsto no contrato" |
| AC-1-07 | ✅ | e2e "normaliza e-mail para minúsculas" |
| AC-1-08 | ✅ | widget "valida campo por campo antes de enviar" |
| AC-1-09 | ✅ | widget "o mínimo de senha do app é o mesmo do servidor" |
| AC-1-10 | ✅ **novo** | widget "AC-1-10 mostra o motivo e mantém e-mail e nome na tela" |
| AC-1-11 | ✅ | widget "avisa que não há recuperação de senha nesta versão" |
| AC-1-12 | ✅ | widget "AC-1 FE-4 o cadastro avisa que o convite continua valendo" |

## Observações

- **`AC-1-10` cobria só metade antes.** Havia teste de "o digitado permanece
  quando a **validação** falha", mas não quando **a rede** falha — que é o caso da
  story e o mais provável na vida real. O caso novo derruba o cadastro com
  `ApiError` e verifica três coisas: o motivo aparece, e-mail e nome continuam
  preenchidos, e o botão **volta a funcionar** (não fica preso em "enviando", que
  seria uma forma silenciosa de perder o convidado).
- **Por que isso é grave aqui e não em outra tela:** não existe recuperação de
  senha nesta versão. Quem desiste no cadastro não volta com um "esqueci minha
  senha" — desiste do convite.
- `AC-1-05` e `AC-1-06` são os dois casos de segurança que ninguém pensa em
  escrever: senha **não ecoada** na mensagem de erro (resposta de erro vai para
  log) e campo fora do contrato **recusado**, não ignorado.
