Gravedad
Normal, pero con alto nivel de molestia en temas públicos con mucho tráfico: los clics repetidos en «Reintentar» inundan el tema con publicaciones duplicadas del bot, por lo que para los miembros parece que el bot está «publicando por su cuenta / atascado en un bucle».
Plataforma
- Servidor: Discourse core
main(rama 2026.7.x), reproducido contra la última versión deorigin/main(dbf5eedac40, 2026-07-14).discourse-aiincluido en el núcleo. - Cliente: reproducido desde múltiples navegadores/dispositivos (Chrome de escritorio, Chrome para Android, Safari para iOS): al ser un problema del servidor, el cliente es irrelevante.
Descripción
Resultado actual: En un tema público, hacer clic en Reintentar en una respuesta del bot de IA añade una publicación nueva del bot al tema. La respuesta original se deja intacta, por lo que cada reintento añade otra publicación. N reintentos → N publicaciones extra.
Resultado esperado: Reintentar debería regenerar la respuesta existente del bot en su lugar (reemplazando su contenido), igual que lo hace dentro de una conversación de MP / DM con el bot de IA. No debería crearse ninguna publicación nueva.
Pasos para reproducir (desde una instalación fresca de Discourse)
- Habilita Discourse AI + el bot de IA; crea/habilita un agente (persona) de IA con un usuario bot y activa la opción «Permitir menciones en temas» para que pueda responder en temas públicos (
allow_topic_mentions). Añade el grupo de tu usuario a los grupos permitidos del agente y aai_bot_allowed_groups. - En un tema público,
@mencionaal bot en una publicación para que responda. - En la respuesta del bot, abre el menú de administración/arandelas de la publicación y haz clic en Reintentar (la acción de regenerar →
POST /discourse-ai/ai-bot/post/:post_id/retry). - Observa: se añade una nueva respuesta del bot en lugar de regenerar la existente. Repite el reintento → una publicación extra cada vez.
- Para contrastar, haz lo mismo dentro de un MP con el bot: Reintentar regenera correctamente en su lugar (sin duplicados). La divergencia entre MP y tema público es la clave.
Se reproduce el 100 % de las veces en temas públicos.
Causa raíz (punteros de código, origin/main actual)
BotController#retry_response(plugins/discourse-ai/app/controllers/discourse_ai/ai_bot/bot_controller.rb) encolaJobs::CreateAiReplyconreply_post_id: post.id— es decir, «regenera esta publicación existente».Jobs::CreateAiReplyla carga comoreply_posty la pasa aPlayground#reply_to(..., existing_reply_post: reply_post).- En
Playground#reply_to(plugins/discourse-ai/lib/ai_bot/playground.rb):stream_reply = post.topic.private_message? if stream_reply.nil?→falsepara temas públicos (~L518).existing_reply_postsolo se consume dentro de la ramaif stream_reply(reply_post = existing_reply_post, ~L538).- La rama
elseno transmitida (~L662) hace incondicionalmentePostCreator.create!(...), añadiendo una nueva publicación y sin tocar nunca la publicación que se está reintentando.
Por lo tanto, en cualquier tema que no sea MP, la intención de «regenerar en su lugar» de retry_response se descarta silenciosamente y se crea un duplicado en su lugar. (La misma asimetría significa que las respuestas del bot en temas públicos no son transmitidas, que es el comportamiento preexistente; el error es específicamente que existing_reply_post de Reintentar se ignora en esa ruta).
Corrección sugerida (solo dirección)
Respetar existing_reply_post independientemente de la transmisión — por ejemplo, en la rama no transmitida, si existing_reply_post está presente, revise en lugar de llamar a PostCreator.create!; o desacoplar la decisión de «reutilizar publicación existente» de stream_reply.
Modo seguro
N/A — comportamiento del plugin del servidor, independiente de temas/JS del sitio.