# Execução — `PP-1` Palpitar nos jogos com prazo aberto

**Plano:** `PP-1-plano.md` · **Data:** 07/08/2026
**Ambiente:** backend local (`test/palpite.e2e-spec.ts`), Flutter em teste de
widget (`test/pp1_plano_test.dart`, criado nesta execução).

**Resultado: 13/13 ✅** — nenhum defeito; 5 casos novos de tela, incluindo os
limites do campo de placar, que ninguém verificava.

| ID | Resultado | Onde |
| -- | --------- | ---- |
| PP-1-01 | ✅ **novo** | widget "PP-1-01 cada jogo traz dois campos" |
| PP-1-02 | ✅ | e2e "o palpite salvo volta na leitura da rodada" |
| PP-1-03 | ✅ | e2e "registra a rodada inteira em uma requisição" |
| PP-1-04 | ✅ | e2e "recusa placar inválido na borda" |
| PP-1-05 | ✅ **novo** | widget "PP-1-05 o campo não aceita letra, sinal nem 3 dígitos" |
| PP-1-06 | ✅ | e2e "recusa palpite em jogo com prazo fechado" |
| PP-1-07 | ✅ | e2e mesma suíte ("sem derrubar o resto do lote") |
| PP-1-08 | ✅ | e2e "recusa jogo que não pertence ao bolão" |
| PP-1-09 | ✅ | e2e "quem não participa do bolão não palpita nem lê a rodada" |
| PP-1-10 | ✅ | e2e "exige autenticação" |
| PP-1-11 | ✅ **novo** | widget "PP-1-11 envio confirma que salvou" |
| PP-1-12 | ✅ **novo** | widget "PP-1-12 rodada sem jogo tem estado próprio" |
| PP-1-13 | ✅ **novo** | widget "PP-1-13 falha de carga mostra motivo e permite retry" |

## Observações

- **`PP-1-05` é o caso que fecha a distância entre app e servidor.** O campo
  aceita só dígitos, no máximo 2, e o mesmo teto de 20 do servidor. Divergir aqui
  não produz erro de segurança — produz **recusa sem explicação**, que é o
  defeito mais caro em termos de confiança: o participante digitou algo que a tela
  aceitou e o servidor não.
- `PP-1-13` distingue explicitamente erro de rede de "rodada vazia". São dois
  estados parecidos com significados opostos, e é o mesmo par que já tinha
  aparecido na home (`CC-10-11`).
- O envio da rodada inteira num request só (`PP-1-03`) não é otimização: um
  request por jogo, em rede ruim, salva metade da rodada — e o participante não
  tem como saber qual metade.
