Files
LambdaMail/CHANGELOG.pt-BR.md
T
Lucas RayanandClaude Sonnet 5.5 5bbbb85128
CI / Lint de idioma (R9) (push) Successful in 5s
CI / Go (protocols) (push) Successful in 2m34s
CI / TypeScript (storage) (push) Successful in 15s
CI / Testes (webmail) (push) Successful in 51s
CI / TypeScript (auth) (push) Successful in 2m39s
CI / Trivy (dependências, segredos e Dockerfiles) (push) Successful in 9s
CI / Imagem (migrations) (push) Successful in 5s
CI / Stack completa (push) Successful in 1m11s
CI / Imagem (auth) (push) Successful in 17s
CI / Imagem (protocols) (push) Successful in 7s
CI / Imagem (rspamd) (push) Successful in 5s
CI / Imagem (storage) (push) Successful in 17s
CI / Imagem (webmail) (push) Successful in 1m52s
release: 1.0.0, a changelog, one .env.example and the docs to match
- CHANGELOG.md and CHANGELOG.pt-BR.md, from the project history.
- .env.example now serves development and production; scripts/init-env.sh
  (make env) creates .env with random secrets. .env.production.example is gone.
- docs/RELEASING.md: the pipeline, how a version is cut and deployed, the runners.
- DEPLOYMENT.md and both READMEs updated for Gitea and the new env flow.
- Service versions set to 1.0.0.
- CI: the proxy network step is idempotent and the stack is torn down always,
  since the runner's Docker daemon now outlives a job.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-30 11:36:22 -03:00

5.5 KiB

Registro de mudanças

Tudo o que muda de relevante no LambdaMail está aqui. O formato segue o Keep a Changelog e o projeto segue o Versionamento Semântico.

English

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.

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/<serviço>, e a tag v* cria uma release com notas. Veja 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.
  • 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.