+🎨 Ponte desatualizada, nome do Baileys fora da tela e padronização visual (25/08/2026)
+
+> ⚠️ **STATUS: implementado, não executado.** Sem migration. Sintaxe conferida nos 16 `.erb`
+> tocados e nos 2 `.rb`. **Testes não rodados** — não há bundler na máquina de desenvolvimento,
+> só no container.
+
+### 1. `rota desconhecida` ao buscar os grupos
+
+O botão "Buscar grupos" do cadastro de contato respondia **`rota desconhecida`**. Não era bug do
+Rails: é o 404 da própria ponte (`whatsapp/server.js`, fallback de rota inexistente) repassado cru
+para a tela.
+
+A rota `GET /grupos` existe no código desde o commit `568f185`, mas **o container `whatsapp` do
+ambiente de teste rodava uma imagem construída antes dele**. O deploy subiu o `app` e reaproveitou
+a imagem em cache da ponte.
+
+**Correção no servidor:**
+```bash
+docker compose up -d --build whatsapp
+# se o cache ainda entregar a imagem velha:
+docker compose build --no-cache whatsapp && docker compose up -d whatsapp
+```
+O volume `whatsapp_auth` é preservado — **não precisa ler o QR de novo**.
+
+> 🔁 **A armadilha que volta:** toda vez que `whatsapp/server.js` ganha rota nova, a ponte precisa
+> de rebuild próprio. `docker compose up -d --build` sem nomear o serviço pode reaproveitar a
+> camada em cache, e o sintoma é sempre este: a tela nova chama uma rota que a ponte em pé não
+> conhece. Vale conferir também que o `whatsapp/server.js` foi junto no merge para a `main` — o
+> recurso de grupos ainda **não está lá**.
+
+**Correção no código:** o 404 da ponte deixou de aparecer cru. `ClienteWhatsapp#mensagem_de_erro`
+agora traduz para *"Ponte do WhatsApp desatualizada (não conhece esta rota) — refaça o build do
+container `whatsapp`"*. É cosmético e **não substitui o rebuild**; serve para a próxima vez o erro
+dizer o que fazer.
+
+### 2. O nome "Baileys" saiu da interface
+
+Nenhum texto que o usuário lê cita mais a biblioteca. A env var mostrada na tela de configuração
+virou **`WHATSAPP_URL`**, e `baileys_url_efetiva` lê nesta ordem:
+
+```
+banco → ENV['WHATSAPP_URL'] → ENV['BAILEYS_URL'] → 'http://whatsapp:3001'
+```
+
+O nome antigo continua sendo lido de propósito: **nenhum `.env` já em produção quebra**.
+
+> **Ficou de fora, de propósito:** as colunas `baileys_url` / `baileys_token` e os métodos
+> `baileys?`, `baileys_pronto?`, `BAILEYS_URL_PADRAO` mantêm o nome no banco e no código.
+> Renomear exigiria migration + model + controller + service + specs, e **nada disso aparece na
+> tela** — os rótulos que o usuário lê já eram "Endereço da ponte" e "Token da ponte". O valor
+> `'baileys'` do seletor de provedor também continua: é chave interna, o rótulo visível é
+> "QR code (grátis, não oficial)".
+
+### 3. Padronização visual das telas de notificação
+
+As 9 telas do módulo nasceram com um dialeto próprio e destoavam do resto do admin. O padrão de
+referência é **Usuários** — a tela mais madura. O que mudou:
+
+| Antes (telas de notificação) | Agora (padrão do admin) |
+|---|---|
+| Botão `bg-orange-500 text-black`, `py-2.5` | `bg-[#f97316] text-white` com ícone, `min-h-[48px]` |
+| `thead` com `bg-white/5`, `py-3`, `font-medium` | `border-b border-white/10`, `py-4`, `font-semibold` |
+| Ações "Editar"/"Excluir" em texto | Ícones com `opacity-0 group-hover:opacity-100` |
+| Vazio: `` solto fora da tabela | Linha na tabela, ícone `:vazio`, `py-16` |
+| Situação em texto colorido | `badge_status_usuario` / `badge_com_icone` |
+| Inputs `bg-[#1a1a1a]`, `py-2.5` | `bg-[#0a0a0a]`, `py-3`, `focus:ring` laranja |
+| Checkbox de ativo/inativo | Toggle switch, igual ao de Usuários |
+| Formulário solto na página | Card `rounded-2xl border` com seções divididas |
+
+**Correções de comportamento que vieram junto:**
+
+- **`render 'shared/flash'` nas telas que não tinham.** Mensagens de sucesso e erro simplesmente
+ **não apareciam** em Contatos, Grupos, Eventos e Envios — a ação dava certo e a tela ficava muda.
+- **O aviso do "Buscar grupos" ganhou cor semântica** — verde no sucesso, vermelho no erro. Antes
+ toda resposta saía em cinza, então "5 grupos encontrados" e "não foi possível falar com a ponte"
+ tinham exatamente o mesmo peso visual.
+- O rótulo do botão de busca virou um `` próprio: trocar o `textContent` do botão inteiro
+ apagava o ícone junto.
+
+**Ganhos de leitura:** avatar distingue pessoa de grupo em Contatos; os filtros de Envios ficaram
+agrupados por "Situação" e "Canal" com pílulas; o ponto verde de "Conectado" pulsa; evento
+desativado fica esmaecido na lista.
+
+### 📂 Arquivos
+```
+app/models/configuracao_notificacao.rb (WHATSAPP_URL com fallback p/ BAILEYS_URL)
+app/services/notificacao/cliente_whatsapp.rb (404 da ponte vira mensagem acionável)
+.env.example (WHATSAPP_URL; nome antigo documentado)
+app/views/admin/configuracao_notificacoes/show.html.erb (nome da lib fora da tela)
+app/views/admin/contatos/{index,_form,new,edit}.html.erb
+app/views/admin/grupos_contato/{index,_form,new,edit}.html.erb
+app/views/admin/eventos_notificacao/{index,_form,new,edit}.html.erb
+app/views/admin/notificacao_envios/index.html.erb
+app/views/admin/whatsapp_sessoes/show.html.erb
+app/views/admin/mensagem_templates/edit.html.erb
+```
+
+### ⏳ Pendente
+```bash
+docker compose up -d --build whatsapp # ⚠️ o que resolve o "rota desconhecida"
+docker compose restart app # views mudaram → cache de views do Puma
+
+docker compose exec app bundle exec rspec
+
+# Conferir na tela: Notificações → Contatos → Novo contato
+# → Tipo "Grupo do WhatsApp" → "Buscar grupos" → a lista deve vir com nome,
+# nº de participantes e ⚠️ nos grupos restritos a admin.
+```
+
+### 🐛 Achado não corrigido
+`app/views/admin/mensagem_templates/edit.html.erb` carrega o **SortableJS de
+`cdn.jsdelivr.net`**. Se a CSP passar de `report_only` para enforcing (pendência já registrada
+neste README), o **arrastar-e-soltar dos blocos morre** — o clique na paleta sobrevive, porque o
+código tem `if (window.Sortable)`. O conserto é baixar o arquivo para `public/`. Não foi feito por
+estar fora do escopo pedido.
+
+
+
+---
+
+