Cerebro Studio · Backlog · Changelog
RioNoTeatro • /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md
Abrir Studio Projeto externo em modo read-only; encaminhamento permitido, escrita bloqueada.

Backlog Unificado

Projeto: RioNoTeatro. Fonte principal: /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md.

Modo read-only: ações de escrita ficam disponíveis apenas para o Cérebro.

Sem itens pendentes em /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md.

Especificações Disponíveis (fora da fila pendente)

Detalhe do BK Selecionado

/www/wwwroot/rionoteatro.com.br/docs/backlog/BK-275-hotfix-audio-copy-timeout-502.md • 2026-04-29T03:54:33.085Z

BK-275 - Hotfix 502 no Gerar com IA do Texto para Audio

Status

DONE em 28/04/2026.

Contexto

O admin reportou 502 Gateway Timeout ao clicar em Gerar com IA em:

  • admin/modulos/campanhas/redes_sociais/texto_for_audio.php

O botao afetado submetia action=audio_generate_with_ai, que chamava provedores de IA dentro da propria requisicao web.

Diagnostico

  • A pagina publica sem sessao retorna redirect para login, entao o 502 era do POST autenticado.
  • O fluxo sincrono chamava rnt_social_audio_generate_versions_with_ai() antes de responder ao navegador.
  • Os provedores podem esperar 75-120s por resposta (Gemini, Kimi ou bridge), acima do limite tipico do gateway.
  • Ja existia uma trilha segura para lote em audio_generate_all_background, que enfileira em social_audio_jobs e processa apos fastcgi_finish_request().

Entrega

  • Criado executor reutilizavel rnt_audio_process_pending_copy_job() para processar um job pendente.
  • Criado helper rnt_audio_redirect_and_process_pending_jobs() para responder por redirect e processar a fila depois.
  • Adicionada action audio_generate_one_background para o botao principal.
  • Alterados os formularios visiveis:
  • Gerar com IA
  • Refazer com sugestao
  • O fluxo Gerar TUDO (background) foi reduzido para reaproveitar o mesmo executor, evitando duplicacao da logica de IA/fallback/validacao.
  • Pos-teste admin do job #13: o job saiu do timeout web, mas ficou sem retorno visual enquanto o bridge Gemini aguardava; o executor agora marca processando antes da chamada de IA.
  • Reduzida a janela do bridge Gemini/Kimi para cair em fallback mais rapido quando o provedor nao responder.
  • A tela do job ativo passou a exibir alerta para pendente, processando, fallback, suspeito e erro.
  • Enquanto o job ativo estiver pendente ou processando, a pagina faz auto-refresh controlado a cada 12s.
  • Pos-teste admin do job #14: Gemini voltou a cair em fallback; teste isolado mostrou quota/billing/rate-limit. O fluxo agora pula o bridge quando o erro direto ja e terminal.
  • Decisao operacional posterior: esquecer API para Gemini neste modulo. O provider gemini do Texto para Audio agora chama sempre o Gemini CLI logado na VPS, via binario local, e ignora chaves Google/Gemini.

Validacoes

  • php -l admin/modulos/campanhas/redes_sociais/texto_for_audio.php
  • php -l admin/modulos/campanhas/redes_sociais/audio_common.php
  • Conferencia estatica das actions no HTML renderizado pelo PHP.
  • Teste real do admin com job #13: redirect rapido confirmado; geracao finalizou como fallback apos timeout do bridge Gemini, com texto salvo.
  • Teste real do admin com job #14: fallback confirmado; diagnostico local mostrou Gemini com quota excedida, OpenAI com chave invalida e Kimi sem JSON/timeout.
  • Teste PHP isolado apos migracao Gemini CLI: rnt_social_audio_generate_versions_with_ai("gemini", ...) retornou ok=1, provider=gemini, model=gemini_cli_default e 3 versoes em cerca de 15s.

O que falta

  • Validar novo clique autenticado em producao com uma peca real para confirmar que o navegador recebe redirect imediato e o job usa Gemini CLI ate gerado, fallback ou suspeito.
  • Avaliar, em rodada posterior, trocar o auto-refresh simples por polling AJAX se a tela de jobs ganhar mais operacao simultanea.
  • Revisar, em uma rodada separada, se os timeouts dos provedores devem ser reduzidos mesmo no background para proteger workers PHP.
  • OpenAI segue fora do caminho principal deste fluxo; se voltar a ser exibido no seletor, a chave precisa ser trocada/removida.
  • Discord fica por ultimo na fila operacional, conforme orientacao humana da rodada.

Arquivos alterados