Mudando do 2026.1 ESR para o 2026.7 - O que encontrei

Primeiro de tudo, parabéns à equipe do Discourse pelo novo ESR, e obrigado pelo trabalho que foi feito nele. Seis meses de lançamentos chegando em um único ponto de verificação suportado é MUITA engenharia, e o fato de agora haver um site de lançamento e um changelog para explorar tornou essa pesquisa muito mais fácil do que nos últimos 4 anos.

Estou na versão 2026.1.5 ESR. Passei de lançamento em lançamento antes de tentar encontrar uma configuração onde as atualizações ocorram da forma mais suave possível.

Revisti tudo entre 2026.1.5 e 2026.7.0 antes de tocar em qualquer coisa, e achei que as notas seriam úteis para qualquer outra pessoa que esteja na versão 2026.1 agora, tentando decidir: aplicar patch agora, ou pular agora?

Aplicarei o patch para 2026.1.6 hoje pelas correções de segurança, e migrarei para 2026.7.0 na primeira semana do próximo mês, quando tiver tempo para testar adequadamente meus componentes de tema e outras coisas.


A pegadinha do version: stable!

Se, como o meu, seu app.yml diz:

  version: stable

…então sua próxima reconstrução o colocará na versão 2026.7.0, quer você tenha pretendido ou não. stable é um alias de compatibilidade retroativa para esr, e esr sempre aponta para o ESR mais recente, que mudou hoje.

Não há caminho de downgrade que eu conheça, então, se você reconstruir apenas para pegar a correção de segurança, você recebe o salto de seis meses junto com ele!

Para permanecer na versão 2026.1 e obter apenas patches de segurança, fixe explicitamente:

  version: release/2026.1

Para migrar para o novo ESR e não ser movido novamente automaticamente em seis meses:

  version: release/2026.7

A versão 2026.1 é suportada até setembro de 2026. A versão 2026.7 roda até março de 2027. Então o salto está chegando independentemente, é apenas uma questão de se isso acontece no seu cronograma.


Pré-requisitos

PostgreSQL 15 é agora o mínimo. Verifique o seu de dentro do container:

cat /shared/postgres_data/PG_VERSION

O meu retornou 15, então estou tranquilo. Se você estiver na versão 13 ou 14, acredito que seja uma atualização separada a ser feita antes do salto de versão.

Vale notar: a imagem do container agora vem com PG 18 junto com o 15, mas estou recusando isso por enquanto, uma variável de cada vez.


Tempo de inatividade?


Faça um backup primeiro e bloqueie os fóruns com o modo de manutenção.

Sem tempo de inatividade, mas eles não são instantâneos em um fórum maduro:

A reconstrução levou < 5 minutos no meu VPS, planeje por ~ 10 minutos na maioria dos provedores de hospedagem, mas também depende muito da contagem de posts do seu fórum, então planeje uma janela de 30 a 45 minutos.


Segurança: a que você está exposto na versão 2026.1.5

17 avisos se aplicam se você estiver na versão 2026.1.5. Tudo publicado antes de 30 de junho já estava corrigido na sua compilação. Todos os 17 estão corrigidos tanto na 2026.1.6 quanto na 2026.7.0, o que torna a opção de aplicar patch primeiro uma alternativa legítima.

  • 1 crítico - envenenamento de cache / XSS via cookies de esquema de cores
  • 2 altos - RCE via arquivo HEIF malformado; XSS armazenado via nome de usuário de transcrição de chat não escapado no editor de texto rico
  • 13 médios, 1 baixo - XSS armazenado na fila de revisão, logs de ações de staff, ações de post e datas locais; vazamento de nome e descrição de tags ocultas; títulos de tópicos restritos expostos via URLs canônicos; vazamento de título/resumo de rascunhos compartilhados; bypass da lista de bloqueio de domínios onebox via comparação sensível a maiúsculas/minúsculas; escuta de conversação de bot de IA; conteúdo de PM acessível através de revisáveis de IA; incompatibilidade de ID de canal/thread no onebox de chat; resumo do primeiro post oculto emitido no JSON-LD de Q&A

Se você estiver aplicando apenas patches, release/2026.1 + reconstrução fecha todos eles.


Minha irritação pessoal: Coisas que mudarão sem você pedir

Esta é a seção que mais queria nos últimos anos. No salto para 2026.7, estas são algumas das mudanças de comportamento que chegam sozinhas:

  1. Reações do Discourse habilitadas por padrão para todos os sites. A implementação chegou ao stable em 21 de julho. Se você não usa Reações hoje, elas estão chegando.

  2. A categoria “Sem Categoria” está sendo removida. Três configurações serão ocultadas do admin (allow_uncategorized_topics, suppress_uncategorized_badge, uncategorized_category_id) e serão removidas completamente quando a mudança se tornar permanente. Gerenciada como uma opção de saída por enquanto.

  3. A configuração do site rich_editor desapareceu. O editor rico agora é incondicional. A preferência de composition_mode por usuário é a única maneira restante de escolher entre markdown e texto rico. O interruptor de pré-visualização Markdown também foi removido - o interruptor de modo MD/RTE o substitui.

  4. Assuntos de e-mail mais simples. Atualmente em beta. Aviso: habilitar isso sobrescreve sua configuração do site email_subject, e desabilitá-lo reverte para o padrão. Então qualquer personalização que você tenha lá pode ser perdida. Verifique essa configuração antes de alternar qualquer coisa.

  5. Cartões de tópico de alto contexto Horizon chegaram ao stable em junho. Relevante apenas se você estiver usando o Horizon, e há uma configuração de tema para reverter para cartões simples.

A boa notícia: todas essas agora chegam através do sistema de Mudanças Futuras, o que significa que não está na versão 2026.1.5. Você recebe uma página de configuração, aviso prévio, opção de saída por mudança e uma correção (#39279) que especificamente impede que uma implementação sobrescreva uma configuração que você já personalizou.

Se, como eu, você ficou frustrado com configurações mudando entre lançamentos, esse sistema é a resposta, e permanecer na versão 2026.1 mantém você na compilação que antecede isso. A primeira coisa que farei após o salto é revisar as Mudanças Futuras e definir cada item pendente deliberadamente, antes que qualquer coisa se promova sozinha.


Se você usa temas ou componentes personalizados

É aqui que espero gastar meu tempo de teste, e parte do motivo pelo qual não estou pulando hoje:

  • Avisos de admin agora estão habilitados para todas as depreciações pendentes. Espere que seus componentes personalizados comecem a exibir avisos de admin se usarem qualquer coisa legada. Melhor saber, mas é uma revisão.
  • Novas depreciações para extensões de arquivo .hbs e .js.es6. Verifique a nomenclatura dos arquivos do seu componente.
  • Shims de widgets legados removidos, junto com os caminhos de depreciação para discourse.breadcrumbs.*, add-flag-property, add-header-panel e bootbox.
  • Saídas de plugin agora podem ser aliasadas e depreciadas em vez de quebrar silenciosamente. Uma mudança genuinamente boa. Saídas renomeadas avisam em vez de simplesmente desaparecerem.
  • Configurações de tema movidas do bundle JS para dados de pré-carregamento, o que muda quando elas estão disponíveis na inicialização. Vale a pena verificar se seu componente lê configurações cedo.
  • Configurações de site de modo móvel legado removidas, e as folhas de estilo core vazias de móvel/desktop removidas. Se seu CSS visa móvel e desktop separadamente, teste em um telefone real após a atualização.

Por baixo dos panos: Ember 6.6 → 6.10, ember-cli 6.9 → 7.0.1, a migração Rolldown concluída, suporte TypeScript adicionado para temas e plugins, e muito jQuery removido em todo o lugar.

Usuários de House Ads: JS inline agora é bloqueado em house ads, e a interface de admin foi reconstruída em FormKit. house_ads_after_nth_root também é agora respeitado na visualização de respostas aninhadas.


Novos recursos notáveis

37 recursos foram destacados nestes seis meses. Aqueles que acho mais importantes para um fórum de comunidade geral:

  1. Mudanças Futuras - a página de configuração e o sistema de implementação descritos acima.
  2. Respostas aninhadas - visualização de tópico em árvore/thread experimental, configurável por tópico e por categoria, com habilitação em massa na lista de tópicos e experiência móvel reformulada.
  3. Login e cadastro com código de e-mail único (enable_local_logins_via_code) - sem senha, atualmente em alpha. Cadastro requer apenas um e-mail mais um código.
  4. Nova página de gerenciamento de categorias do admin mais criação de categorias simplificada. Um diretório completo de categorias e seus tipos.
  5. Ações em massa em toda parte - gerenciamento de tags em massa (adicionar/remover/substituir), fixar/desfixar em massa e suspensão em massa para usuários não ativados, junto com um novo filtro de status de ativação em Admin → Usuários. Essa última combinação é excelente para limpar ondas de registro de spam.

Também vale a pena mencionar: uma configuração de página inicial padrão explícita, grupos de emojis fixados com importação/exportação em massa de emojis personalizados, pontos agora permitidos em nomes de tags, uma página dedicada de edição de tags, modo de aplicativo completo para incorporação, sincronização de grupo para OAuth2 e OpenID Connect, e ícones de status de PR ao vivo em oneboxes inline do GitHub.


Por que apliquei patch primeiro

Nada acima é um motivo para não migrar para 2026.7. O sistema de Mudanças Futuras sozinho já vale a pena, e eu vou na primeira ou segunda semana do próximo mês.

Mas as correções de segurança estão disponíveis em ambas as branches, o que significava que eu poderia desacoplar a parte urgente da parte que precisa de teste. Como o editor rico agora é incondicional. Tenho certeza que, lendo pelos fóruns, encontrarei um caminho rápido, espero.

Aplicar patch hoje fechou todos os avisos. O salto agora recebe uma janela adequada onde posso revisar Mudanças Futuras deliberadamente e verificar meus componentes de tema em desktop e móvel sem correr contra um CVE crítico.

Se você estiver na versão 2026.1 e com pouco tempo esta semana, sugiro o mesmo. Se você tiver tempo, vá direto para release/2026.7, apenas fixe-o explicitamente e verifique sua versão do Postgres.

Obrigado novamente à equipe. O site de changelog tornou essa investigação muito menos dolorosa do que teria sido há um ano.


Divulgação: Usei IA para me ajudar a estruturar esta postagem; caso contrário, não teria tempo para postar isso. Por favor, aponte qualquer coisa que eu precise adicionar, remover ou mudar.

A funcionalidade está ativada por padrão (não apenas para novos fóruns, mas também para os existentes), mas você ainda pode usar a configuração do site discourse_reactions_enabled e desativá-la após a atualização. Você ainda pode optar por não usá-la.

Não tenho certeza se isso vai funcionar por dois motivos. Acho que estar na versão ESR significa que você perderá as mudanças pendentes que passam por todas as etapas antes do próximo lançamento da versão ESR. Simplified category setup é um exemplo disso. Enquanto os usuários que atualizavam mensalmente tinham a chance de testar isso e fornecer feedback, você recebe apenas o resultado final, como qualquer outra alteração de código, sem uma mudança pendente.
Além disso, você pode optar por ativar mudanças mais cedo ou desativá-las após a ativação automática quando forem promovidas à versão beta — mas você não pode desativá-las antes que sejam ativadas automaticamente.

Claro, verificar mudanças na versão alpha para estar ciente do que está por vir faz sentido. Você já pode testar o recurso como administrador sem afetar seus usuários e pode desativá-lo rapidamente após realizar uma atualização que o ativou — mas, como você está na versão ESR, não haverá uma atualização que promova a mudança pendente. Para você, nada será aplicado automaticamente até que você atualize para uma versão posterior, mas isso também significa que você perde a opção de testar antes que as mudanças sejam implementadas permanentemente, ou pode testar como está hoje, mas não conseguirá testar as melhorias que ocorrerão nas próximas iterações.

@Moin, muito obrigado! É por isso que também espero cerca de uma semana para postar o pulo do ESR. O feedback e as correções sobre os pontos em que errei, etc… superam qualquer coisa que eu consiga descobrir sozinho. Vou atualizar o post. Obrigado!