Elquer Carlos

Bug de duplicidade FTP, dois modais quebrados e a documentação que veio depois

Bug de re-envio FTP, área branca em modal mobile e header sobrepondo modal — três commits e um doc de padrões no mesmo dia.

O dia começou com um problema que estava dormindo silencioso no sistema de FTP do kmaroteApp: arquivos já enviados podiam ser reenfileirados e enviados de novo.

Manhã: bug de duplicidade no FTP

O sistema de envio FTP tem três pontos de checagem para evitar duplicatas — três queries separadas que verificam se um arquivo já está na fila. O problema: nenhuma das três incluía o status enviado na cláusula IN. A query checava na_fila e processando, mas não o estado final. Resultado: arquivo enviado com sucesso voltava para a fila na próxima rodada de sincronização.

A correção foi adicionar enviado ao IN (na_fila, processando) em dois arquivos:

  • funcs/ftp.php
  • admin/scripts/sincronizar_postagens_ftp.php

Commit 22d3fdc7. Cirúrgico, sem efeito colateral.

Tarde e noite: dois problemas de modal completamente distintos

A parte mais longa do dia foi resolvendo dois bugs de modal na tela de agendamento do kmaroteApp. Os dois problemas eram distintos em sintoma e em causa raiz, mas tinham a mesma origem estrutural: uma combinação de classes Bootstrap 5 usada incorretamente.

Problema 1: área branca grande abaixo do input de data

No modal-agendamento, o modal-body estava sendo esticado para 100vh em mobile mesmo com poucos campos — gerando um vazio enorme abaixo do último input.

O Claude Code e o Codex chegaram ao mesmo diagnóstico por caminhos separados: a combinação de modal-fullscreen-sm-down mais modal-dialog-scrollable era o problema. O modal-dialog-scrollable já garante scroll interno quando necessário. O modal-fullscreen-sm-down era redundante nesse contexto e destruía o comportamento de altura do modal-body.

Solução: remover modal-fullscreen-sm-down do modal-agendamento e adicionar modal-lg para alinhar com o padrão do modal-gerar-prompt no mesmo arquivo.

Commit aea607c9.

Problema 2: header sobrepondo o modal em telas menores

O modal-gerar-prompt ficava atrás do header do site em determinadas resoluções. O diagnóstico foi levantado em paralelo nas sessões de Claude Code e de Codex, acoplado à mesma análise de padrões dos modais.

Documentação: padrão oficial de modais Bootstrap 5

Com dois bugs distintos causados pelo mesmo anti-padrão, fazia sentido documentar antes que o problema aparecesse nos outros 90+ modais do sistema.

A análise varreu o admin do kmaroteApp e encontrou aproximadamente 93 modais. Cerca de 84% deles seguem modal-dialog-scrollable sem modal-fullscreen-sm-down — o padrão correto. O anti-padrão (os dois juntos em formulários curtos) aparecia em poucos modais, mas causava regressão visível em mobile.

O resultado foi padroes_modais.md com:

  • Três categorias de modal: confirmação simples, formulário médio, edição pesada
  • Tabela de classes corretas por categoria
  • Exemplos reais do sistema para cada categoria
  • O anti-padrão documentado explicitamente, com o motivo pelo qual quebra

Commit fe0c3053.

Nessa etapa o Codex também foi usado para verificar se kmarote.css estava sobrescrevendo classes nativas do Bootstrap. A regra é usar Bootstrap 5 puro sem customizações nas classes nativas. A verificação confirmou que a regra estava sendo respeitada.

Quando o Claude Code está chutando

Vale registrar porque é relevante para o processo: ao longo das sessões de Claude Code no kmaroteApp, precisei cortar o agente duas vezes no mesmo dia.

Em dois momentos distintos, o Claude Code apresentou uma solução afirmando que não falharia — e a solução nunca funcionou desde o início. Na segunda vez que questionei, o comportamento pareceu ser gerar uma nova resposta sem reler a documentação já configurada. Em vez de verificar o que existia, o agente estava variando a tentativa.

Isso levou a uma sessão dedicada a mapear o padrão de modais do sistema antes de qualquer alteração — uma forma de forçar o agente a trabalhar com evidência em vez de suposição. O padrão de usar sub-agentes para pesquisa antes da execução tem funcionado melhor do que deixar o agente principal tomar decisões sem base empírica.

Codex: revisão do Grok e duplicidades no banco

Uma sessão mais longa do Codex — que começou no dia 31 e continuou hoje — revisou o Grok V1, verificando se o prompt gerado nos testes seguia as premissas do plano original. O Codex identificou pontos de divergência e montou um plano de correção. Uma das correções envolvia excluir um registro duplicado do banco sem hardcodar valores. Uma query também foi gerada para buscar outras duplicidades na base.

Pendências

  • Correções do Grok V1 identificadas pelo Codex ainda não implementadas
  • Larissa indisponível durante todo o dia (SSH com erro)

Estatísticas do dia:

Atividade no PC:

  • Tempo ativo: 3h38min
  • AFK: ~37h
  • Janela total monitorada: ~40h40min

Por categoria (do que ficou ativo):

  • Uncategorized: 1h9min
  • Coding: 1h8min
  • Larissa Project: 1h4min
  • Communication: 15min
  • Browsing: 1min

Top apps: Chrome (1h13min) · Codex (1h4min) · Antigravity IDE (1h3min) · WhatsApp (14min)

Top sites navegados: kmaroteApp dev (2 domínios internos, ~11min) · docs.google.com (4min)

Trabalho com IA:

  • Conversas claude.ai: 0 mensagens novas
  • Sessões Claude Code: 6 (Windows) · Sessões Codex: 2

Código produzido:

  • Commits: 3 (22d3fdc7, aea607c9, fe0c3053) · Repositório: kmaroteApp
Fim do ato