# Execução — plano `PR-10` (06/08)

**Veredito: ✅ Aprovado** — 12 de 12 casos (o plano ganhou `PR-10-03b` durante a
execução).

| Caso | Resultado | Evidência |
| ---- | --------- | --------- |
| PR-10-01 | passou | `test/correcao.e2e-spec.ts` — "admin corrige à mão" |
| PR-10-02 | passou | idem — "participante comum não corrige placar" |
| PR-10-03 | passou | idem — "recusa correção de jogo que ainda não começou" |
| PR-10-03b | passou | idem — `PR-10-03b` (novo) |
| PR-10-04 | passou | idem — "não gera aviso" |
| PR-10-05 | passou | idem — trilha com `source: MANUAL` e nome |
| PR-10-06 | passou | idem — participante lê o histórico |
| PR-10-07 | passou | idem — 403 para quem não participa, 404 para jogo de fora |
| PR-10-08 | passou | idem — "a fonte oficial prevalece" |
| PR-10-09 | passou | idem — `PR-10-09` (novo) |
| PR-10-10 | passou | idem — placar inválido |
| PR-10-11 | passou | `test/correcao_placar_test.dart` + device |

## Correção de rumo **no plano**, não no código

`PR-10-03` foi escrito como "jogo **não terminado** é recusado", copiando a
intuição de que só jogo encerrado é corrigível. A regra real do código é outra —
e é a certa: a correção é permitida a partir do **apito**, mesmo sem `FINISHED`.

O motivo está no próprio código: exigir `FINISHED` deixaria o bolão preso para
sempre num W.O., que nunca é reagendado nem recebe placar da fonte. O que barra o
abuso é o apito (antes dele o palpite de todos ainda está aberto), não o
encerramento.

Reescrevi o caso e acrescentei `PR-10-03b` para fixar a regra correta: jogo
começado sem placar final **é** corrigível, e passa a `FINISHED`. Plano também
é artefato revisável — errar nele e "corrigir" o código para caber teria
introduzido um bug de verdade.

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

**`PR-10-09` não tinha cobertura:** correção em bolão **encerrado** trocando o
campeão. É a consequência mais contraintuitiva da decisão de 03/08 ("nada é
congelado") e a que mais gera reclamação — vale ter teste.

**A suíte não se curava entre execuções.** Os casos novos mexem no `kickoffAt`
para montar W.O. e jogo sem placar, e o `afterAll` só devolvia status e placar.
Na execução seguinte o palpite do `beforeAll` era recusado por prazo e **seis
testes caíam por tabela** — falha que parece bug de produto e não é. O teardown
passou a guardar e devolver os horários originais da rodada.
