# Registro de mudanças Tudo o que muda de relevante no LambdaMail está aqui. O formato segue o [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/) e o projeto segue o [Versionamento Semântico](https://semver.org/lang/pt-BR/). [English](CHANGELOG.md) ## [Não lançado] ## [1.0.0] - 2026-10-30 A primeira versão com tag. O trabalho anterior nunca foi tagueado, então esta entrada resume tudo desde o primeiro commit, em 2026-07-23, até a mudança para o Gitea. O que ainda falta está no README, em [O que não está pronto](README.pt-BR.md#o-que-não-está-pronto). ### Servidor de e-mail - SMTP MX e Submission (587 STARTTLS, 465 TLS implícito), IMAP com UID, flags, IDLE, CONDSTORE, `SEARCH`, `EXPUNGE`, `COPY` e `MOVE`, POP3 e ManageSieve. - SPF, DKIM (assinatura dupla Ed25519 e RSA), DMARC, selo ARC, MTA-STS e DANE na entrega, e ingestão de relatórios TLS-RPT. - Pontuação do Rspamd com greylisting, RBLs e limite de taxa, e ClamAV. - Fila de saída durável no Postgres, com a escada de tentativas e devoluções RFC 3464, retransmissão por smarthost para hosts com a porta 25 bloqueada, e termo SPF do relay configurável (`RELAY_SPF_INCLUDE`). - O e-mail endereçado a este servidor é entregue localmente, sem sair para a internet e voltar. - Toda mensagem enviada fica na pasta Enviados de quem enviou; as senhas de aplicativo funcionam em SMTP, IMAP e POP3. - Regras Sieve avaliadas na entrega, pastas próprias e resposta de ausência RFC 5230, que responde dentro da conversa e uma vez por remetente por semana. ### Webmail e console - Redesenho completo das duas interfaces ("Nocturne"): temas escuro e claro, menu de comandos em `Ctrl K` / `Cmd K`, atalhos `c` e `/`, app instalável com ícone próprio e um logo desenhado. - Conversas em cascata, com quem escreveu, quantas mensagens e se você já respondeu; responder, responder a todos, importantes, desfazer o envio, e rascunhos que substituem o salvamento automático anterior. - Um leitor que combina com os dois temas: mensagens simples usam as cores do app, as desenhadas mantêm a folha branca, o histórico citado se recolhe e as imagens remotas ficam bloqueadas até serem liberadas. - Remetentes confiáveis, guardados no servidor por caixa: o e-mail deles não vai para o spam e sempre mostra as imagens. - Sessões do webmail de 30 dias que se renovam com o uso, várias contas abertas ao mesmo tempo e trocáveis pela barra lateral; o console continua em 8 horas. - Foto de perfil com editor de recorte circular, e hospedagem e validação do logotipo BIMI por domínio, publicado no DNS e mantido em dia com o logo. - Console de administração com paginação e filtros no servidor, edição de usuários (papel, cota, idioma, senha, segundo fator), apelidos, uma página de diagnóstico e isolamento entre as superfícies de usuário e de administração. Administradores de domínio ficam restritos ao próprio domínio. - Inglês, português e espanhol, com um teste de que toda string existe nos três. ### DNS e TLS - Reconciliação com a Cloudflare dos registros esperados de cada domínio ativo, idempotente, com verificação de cada registro em resolvedores públicos; um registro DKIM nunca é publicado com a chave vazia. - Um painel de TLS que mostra o digest que o registro TLSA precisa carregar, e passos documentados para ligar o DANE. `TLS_MODE=traefik` (padrão) ou `acme`. ### Segurança - Login em duas etapas com TOTP e códigos de recuperação; o cadastro não substitui mais um segredo que o autenticador já tem, não ativa o MFA sem códigos de recuperação e não derruba o serviço de autenticação. O `make reset-mfa` recupera um cadastro quebrado. - A concorrência do Argon2 é limitada, então uma enxurrada de logins não derruba o serviço de autenticação. - Todos os containers de serviço rodam sem root; as imagens passam pelo Trivy e o build falha em achados HIGH ou CRITICAL. - Dependências atualizadas por dois avisos publicados: `next` 15.5.28 (execução remota de código sem autenticação na otimização de imagens, GHSA-2464-fhr4-w9xw) e `go-jose` 4.1.6 (negação de serviço). ### Implantação e CI - O servidor de produção só puxa imagens que o CI construiu e testou; nada é compilado nele. O compose fixa o Traefik na rede do proxy pelo nome. - **Mudança para o Gitea.** O código, os workflows (`.gitea/workflows`) e as imagens de container agora ficam em `git.lucasrguerra.dev.br`; as imagens são publicadas para `linux/amd64` e `linux/arm64` em `git.lucasrguerra.dev.br/lucasrguerra/lambdamail/`, e a tag `v*` cria uma release com notas. Veja [docs/RELEASING.md](docs/RELEASING.md). - O CI guarda em cache o npm, os módulos Go, o Postgres embutido, o banco do Trivy e as camadas das imagens. O Release reconhece imagens que já publicou para os mesmos fontes (tag `inputs-`), então uma mudança de documentação ou uma tag de versão nunca as reconstrói. - Um único `.env.example` para desenvolvimento e produção, e o `scripts/init-env.sh` para criar o `.env` com segredos aleatórios (`make env`). Ele substitui o `.env.production.example`. ### Corrigido - Healthcheck do webmail: o Next escuta só em IPv4 e o `wget` resolvia `localhost` para `::1`. - O bloqueio do administrador, o rascunho que não descartava, os contadores de pastas, uma resposta de ausência que não era resposta, painéis de DNS que diziam faltar registros já publicados e o botão de reconciliar que não criava nada. - Migrações: partição padrão para `email_messages`. [Não lançado]: https://git.lucasrguerra.dev.br/lucasrguerra/LambdaMail/compare/v1.0.0...HEAD [1.0.0]: https://git.lucasrguerra.dev.br/lucasrguerra/LambdaMail/releases/tag/v1.0.0