Três arquiteturas convivendo no mesmo servidor
O servidor principal tem cerca de 89.700 linhas de código, sem contar os testes, organizadas de três formas diferentes ao mesmo tempo, sem fronteira garantida entre elas:
A regra oficial do projeto é clara — funcionalidade nova nasce em src/v3/
no padrão DDD, código legado só recebe correção no lugar. Ela já foi escrita: o
docs/arquitetura.md do core traz o ADR-001 (monólito
modular com DDD-lite), de 28/06/2026 — mas com status Proposta, nunca
aprovado. O problema não é a regra: é que nada no código a torna
obrigatória. Quem chega não distingue as três zonas, e as ferramentas não
impedem que uma invada a outra.
Toda tarefa começa com a mesma pergunta perdida: onde isso deveria morar? E como a resposta depende de quem está fazendo, o mesmo tipo de regra acaba escrito em dois lugares — uma vez no serviço antigo, outra no caso de uso novo. Quando divergem, divergem em silêncio: as duas versões continuam funcionando, dando respostas diferentes.
O custo não aparece numa tarefa específica. Ele aparece como lentidão constante em todas, e como uma classe de bug difícil de rastrear — o comportamento muda conforme o caminho que a requisição tomou.
Em toda funcionalidade nova que toca o servidor principal, e com força maior nas áreas onde 2.0 e 3.0 se encostam: loja, checkout, pedidos e perfil. Também afeta a entrada de qualquer desenvolvedor novo no projeto, que precisa aprender três convenções antes de escrever a primeira linha.
Não é reescrever o servidor. Reescrita grande de sistema em produção costuma custar o dobro do previsto e entregar o mesmo comportamento — com bugs novos. O caminho é tornar a fronteira explícita e deixar o legado encolher sozinho:
- Tirar o ADR-001 do status de proposta: revisar, aprovar e acrescentar exemplos dos dois lados. O documento já existe — falta virar decisão.
- Marcar o legado como zona congelada — um
READMEem cada pasta antiga dizendo o que pode e o que não pode acontecer ali. - Ligar uma verificação automática que impeça
src/v3/de importar do legado. É o que transforma a regra em garantia. - Absorver
src/modules/shipping/num dos dois lados, eliminando o terceiro padrão. - A partir daí, cada funcionalidade nova nasce certa, e o legado só diminui.
Cobre a fronteira inteira: a aprovação do documento de decisão, a marcação das zonas, a verificação automática e a absorção do módulo solto. Não resolve o legado que já existe — isso é o item 02 —, mas estanca o crescimento da dívida, que é o mais urgente dos dois.