Três problemas de exposição, todos com o mesmo efeito: dado interno saindo
para quem não deveria ver.
1. Painel de debug do Rails na tela do usuário
O servidor sobe com RAILS_ENV=development (docker-compose.yml), e
development tinha `consider_all_requests_local = true`. A página
"Action Controller: Exception caught" mostra parâmetros, SESSÃO
(session_id, _csrf_token, id do usuário logado), cookies, IP do cliente,
caminho do servidor e o trace inteiro — para qualquer pessoa que
provocasse um erro. Agora o detalhe depende de ERROS_DETALHADOS=true,
que só é ligado na máquina de desenvolvimento.
2. Senha e PIN em texto puro no log
Não existia filter_parameter_logging.rb neste projeto: toda senha do
login, PIN de motorista e token do WhatsApp iam para log/ em texto
puro — e log vai junto em backup e em suporte. Era o pior dos três,
porque é permanente e não aparece na tela de ninguém.
3. Páginas de erro do usuário final
Sem public/500.html, desligar o painel deixaria tela em branco. Criadas
500/404/422 em português, sem CSS externo (precisam funcionar com a
aplicação fora do ar).
Também sai do versionamento a pasta Erros/, com 16 páginas de debug salvas
do navegador. Não há cookie de sessão assinado nelas — ninguém entra no
sistema com o que está ali — mas há session_id, token CSRF, id de usuário e
IPs, que não têm por que estar no repositório.
Correção estrutural pendente: subir o servidor com RAILS_ENV=production
(production.rb já tem consider_all_requests_local=false e force_ssl=true).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Registra o arco do insucesso no pagamento, que não estava documentado: a
mudança da base do dashboard de `pagas` para `atendidas` (completed +
failed), a troca do eixo de planned_date para checkout, o mesmo ajuste no
painel do motorista, a aba Consolidado no ranking e a correção da barra.
Inclui a conferência com dados reais do ambiente de teste — a aba
Consolidado fecha em R$ 72.508,00 / 3.858 entregas, idêntico aos KPIs do
topo — e deixa explícito que a suíte continua pendente de execução, com o
roteiro para rodar no Docker.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A barra era proporcional à QUANTIDADE de entregas, mas as duas abas do card
são ordenadas por VALOR. Na aba Estimado dá no mesmo (valor = qtd × preço),
mas na Consolidada bônus/retirada/termo mudam o preço unitário: com os dados
do teste a barra do 3º (290 entregas, R$ 5.250) saía MAIOR que a do 2º
(261 entregas, R$ 5.260), contradizendo a ordem do ranking. Invertia em três
pontos da lista.
Passa a escalar pelo valor, que é o número que ordena — as barras encurtam
sempre de cima para baixo. Mantida a guarda de divisão por zero.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>