# Backlog do bolão

37 stories escritas a partir dos 5 PRDs em `docs/prd/`, **nenhuma bloqueada**.
**Todas as tasks estão desmarcadas** — só marca `- [x]` a skill que executou o
trabalho, e só depois do gate dela (build, testes e app rodado em device). O PO
não marca.

| Prefixo | Épico                    | PRD                              |
| ------- | ------------------------ | -------------------------------- |
| `AC-`   | Identificação e acesso   | `prd/identificacao-e-acesso.md`  |
| `PP-`   | Palpite e prazo          | `prd/palpite-e-prazo.md`         |
| `PR-`   | Pontuação e ranking      | `prd/pontuacao-e-ranking.md`     |
| `CC-`   | Criação e convite        | `prd/criacao-e-convite.md`       |
| `CV-`   | Ciclo de vida do bolão   | `prd/ciclo-de-vida-do-bolao.md`  |

---

## Must (26) — sem isso não há produto

Núcleo em ordem de execução, respeitando dependências:

| # | Story | Por que agora |
| - | ----- | ------------- |
| 1 | [AC-1](AC-1-cadastro-com-email.md) Cadastro com e-mail | Bloqueia CC-5 e PP-1; nada tem dono sem isso |
| 2 | [AC-2](AC-2-login-com-email.md) Login com e-mail | Caminho de volta à conta |
| 3 | [AC-3](AC-3-sessao-persistente.md) Sessão persistente e logout | Login com prazo estourando faz o casual desistir |
| 4 | [CC-1](CC-1-criar-bolao.md) Criar bolão com jogos carregados | Bloqueia quase tudo; a mais arriscada do projeto |
| 5 | [CC-2](CC-2-definir-regras-na-criacao.md) Pontuação e desempate na criação | Regra tem que existir antes do 1º palpite |
| 6 | [CC-4](CC-4-gerar-link-de-convite.md) Gerar link de convite | Sem convite não entra ninguém |
| 7 | [CC-5](CC-5-entrar-pelo-convite.md) Entrar pelo link | Caminho do convidado novo |
| 8 | [PP-1](PP-1-palpitar-jogos-prazo-aberto.md) Palpitar nos jogos abertos | Razão de existir do app |
| 9 | [PP-3](PP-3-contagem-tempo-restante.md) Contagem de tempo restante | 1º motivo de abandono da Fase 1 |
| 10 | [PP-5](PP-5-bloqueio-no-apito.md) Bloqueio no apito | Integridade da competição |
| 11 | [PP-2](PP-2-editar-palpite.md) Editar palpite até o prazo | Decisão explícita do PRD |
| 12 | [CC-3](CC-3-travar-regras-no-primeiro-palpite.md) Travar regras no 1º palpite | Sustenta o admin-jogador |
| 13 | [PR-1](PR-1-calcular-ponto.md) Calcular o ponto (10/5/3) | Tira o admin da calculadora |
| 14 | [PP-7](PP-7-sigilo-do-palpite.md) Sigilo até o jogo terminar | Pior dor da Fase 1 |
| 15 | [PR-5](PR-5-desempate.md) Desempate | Sem ela o ranking tem ordem indefinida |
| 16 | [PR-3](PR-3-ranking-geral.md) Ranking geral | 2º item da prioridade do usuário |
| 17 | [PR-2](PR-2-extrato-do-ponto.md) Extrato do ponto por jogo | Substitui o admin como árbitro |

Ainda Must, depois do núcleo acima:

- [PP-4](PP-4-rascunho-offline.md) Rascunho offline com envio automático
- [PP-6](PP-6-reabertura-jogo-adiado.md) Reabertura automática por adiamento
- [PP-8](PP-8-lembrete-de-prazo.md) Lembrete de prazo só para quem não palpitou
- [PR-6](PR-6-recalculo-placar-corrigido.md) Recálculo por placar corrigido
- [PR-7](PR-7-aviso-de-recalculo.md) Aviso do recálculo — **entra junto com PR-6**
- [CC-6](CC-6-ver-regras-do-bolao.md) Ver as regras a qualquer momento
- [CV-1](CV-1-encerrar-bolao.md) Encerrar com campeão e ranking final
- [CV-2](CV-2-co-campeoes.md) Co-campeões quando o empate persiste

Também Must, criada na auditoria de cobertura de 03/08:

- [PP-10](PP-10-sincronizacao-com-a-fonte.md) Job de sincronização com a fonte —
  **nenhuma story era dona do processo recorrente** que busca calendário e
  placar. `PP-6`, `PR-1` e `PR-6` param sem ela

Também Must, promovida em 03/08:

- [PR-10](PR-10-correcao-manual-de-placar.md) Correção manual de placar —
  **subiu de Should para Must**: sem conceito de W.O. no sistema, é a única
  forma de resolver um jogo que nunca será reagendado

## Should (8)

- [CC-9](CC-9-remover-participante.md) Remover participante
- [CV-7](CV-7-recriar-temporada.md) Recriar temporada
- [PP-9](PP-9-admin-ve-quem-nao-palpitou.md) Admin vê quem não palpitou
- [PR-4](PR-4-ranking-da-rodada.md) Ranking da rodada
- [CC-7](CC-7-lista-de-participantes.md) Lista de participantes
- [CC-8](CC-8-segundo-administrador.md) Segundo administrador
- [CV-3](CV-3-encerramento-antecipado.md) Encerramento antecipado
- [CV-4](CV-4-sair-do-bolao.md) Sair do bolão

## Could (2)

- [CV-5](CV-5-historico-de-boloes.md) Histórico de bolões e títulos
- [CV-6](CV-6-arquivar-bolao.md) Arquivar e desarquivar bolão

---

## Bloqueadas: nenhuma ✅

As 6 perguntas de "confirma ou nega" foram respondidas em 03/08. **Três**
stories saíram do bloqueio e **duas foram canceladas**:

| Story | Destravada por |
| ----- | -------------- |
| [CC-9](CC-9-remover-participante.md) Remover participante | Palpites **ficam** no histórico — mesma regra de CV-4 |
| [CV-6](CV-6-arquivar-bolao.md) Arquivar e desarquivar | Arquivamento é reversível |
| [CV-7](CV-7-recriar-temporada.md) Recriar temporada | Reconvida todos automaticamente |

**Duas stories foram canceladas, não destravadas:**

- `PR-9` (pontuação de quem entra no meio) — não é possível entrar atrasado.
- `AC-4` (recuperação de acesso por e-mail) — **não haverá serviço de e-mail
  nesta versão**. Consequência: esquecer a senha custa a conta em definitivo.
- `PR-8` (anular jogo cancelado / W.O.) — **não existem cancelado nem W.O.**:
  todo jogo não realizado é adiado e aguarda nova data. Sem anulação, não há
  nada a implementar. W.O. real é resolvido por `PR-10`.

## Decisões registradas em 03/08/2026

Onze perguntas respondidas. As que mudaram story já escrita:

| Decisão | Efeito |
| ------- | ------ |
| Cadastro/login por e-mail | 5º PRD + `AC-1`..`AC-3` (`AC-4` cancelada: sem e-mail) |
| Admin pode corrigir placar à mão | nova story `PR-10` |
| Correção após encerramento troca o campeão | `CV-1` não congela ranking · `CV-5` título pode ser revogado |
| Jogo adiado sem data: aguarda indefinidamente | `CV-1` · `CV-3` passa a ser a única saída |
| Convite expira em 1 dia | `CC-4` |
| Criador é sempre admin | `CC-8` recusa rebaixar o criador · `CV-4` criador nunca sai |
| **Sair do bolão é definitivo** (revisou a resposta anterior) | `CV-4` avisa antes de confirmar · `CC-5` recusa reentrada |
| **Não é possível entrar atrasado** — fecha no 1º jogo | reverteu regra "decidida" em 3 PRDs · **cancelou `PR-9`** · `CC-5` recusa entrada |
| Apenas Brasileirão Série A | `CC-1` |
| Fonte gratuita (football-data.org Free) | `CC-1` — **provisória até o spike** |

## Riscos de integridade assumidos conscientemente

O sigilo (`PP-7`), a reabertura automática (`PP-6`) e o travamento de regras
(`CC-3`) foram desenhados para impedir que o admin — que também disputa —
influencie o resultado. Três decisões de 03/08 abrem caminho de volta:

1. Admin pode corrigir placar à mão (`PR-10`)
2. Encerramento antecipado sem nenhuma proteção (`CV-3`)
3. Correção troca o campeão mesmo após o encerramento (`CV-1`)

**Única mitigação prevista:** toda correção manual é visível a todos, com
autor e valor anterior (`PR-10 FE-2`). Por isso essa task não é opcional.

## Ainda sem story

- **Spike da fonte de dados** — restam **2 itens** a verificar no tier Free da
  football-data.org:
  1. **A fonte informa a nova data quando um jogo é adiado?** Sem isso `PP-6`
     nunca dispara — e como não existe mais anulação, não há caminho
     alternativo para jogo não realizado.
  2. **Qual o atraso real do placar?** Atraso grande contraria a métrica
     aceita ("ponto logo após o apito").

  _O 3º item — distinguir cancelado de W.O. de adiado — **deixou de ser
  necessário** com a decisão de tratar tudo como adiado._
- **Licença de uso comercial da fonte** — alguns tiers gratuitos proíbem.
- **Excluir conta (LGPD)** — fora de escopo do 5º PRD por decisão, mas é
  obrigação legal antes de publicar nas lojas.
