PP-12: palpite fora do escopo inflava o ranking — fechado nas duas camadas
Achado por auditoria hoje e **reproduzido antes de corrigir**: a rule de
palpite validava dono, placar, prazo e bolao aberto, e nao validava que o
jogo pertence ao bolao. A apuracao tambem nao.
O caminho era auto-servico: `criarBolao` e aberta a qualquer autenticado,
entao a pessoa criava um bolao descartavel de outras rodadas — o que semeia
o calendario global —, listava os jogos futuros (`jogos` e legivel por
qualquer autenticado) e gravava palpites deles **no bolao do grupo**. Cada
acerto somava ponto. E o extrato e por rodada, entao o ponto extra nao
aparecia na conta que o grupo confere.
Duas sondas provaram a cadeia antes de qualquer correcao: escrita aceita
para jogo da rodada 30 num bolao da 21 e para jogo de outro campeonato; e,
com o emulador de Functions, a classificacao subindo para 10 pontos.
**Camada 1, a rule** (`PP-12-01` a `PP-12-07`): o jogo tem de ser do
campeonato e da faixa de rodadas do bolao. Custou **menos** leitura, nao
mais: jogo e bolao sao lidos uma vez e passados adiante, e a escrita de
palpite caiu de 5 para 4 acessos a documento. O limite e 10, e estourar nao
daria erro de seguranca — daria palpite recusado para todo mundo.
**Camada 2, a apuracao** (`PP-12-09` a `PP-12-12`): palpite fora do escopo
nao pontua, e o que estiver pontuado e **zerado**. Zerar em vez de ignorar e
o que alcanca o passado, sem varredura. Bolao sem escopo gravado nao e
tratado como fora de escopo, de proposito: fechar ali zeraria o ranking
inteiro por um campo ausente. Vai para o log como erro.
`MG-3-10`/`MG-3-12` falharam e nao era regressao: o bolao do fixture nao
tinha campeonato nem faixa de rodadas. Quarta vez neste projeto que fixture
mais simples que a realidade acusa o produto.
348 casos em 23 arquivos, verde. Falta o deploy das rules em producao.
Co-Authored-By:
Claude Opus 5 (1M context) <noreply@anthropic.com>
parent
a42f38c0
Please register or sign in to comment