O CeLiLac é uma plataforma de segurança alimentar focada em celíacos e pessoas com restrições alimentares.
- Backend: Node.js/TypeScript, Clean Architecture, DDD.
- Banco de Dados: PostgreSQL.
- Frontend: Web (React/Next), Mobile (Flutter).
- Padronização: O código deve seguir SOLID e ser altamente testado.
- Fonte única da marca:
frontend/web-app/public/brand/. Use semprelogo_with_transparent_background.png(maior resolução, com alpha) para qualquer novo uso da logo — web ou mobile. - Mobile (
frontend/mobile-app, Flutter): a logo mestre vive emassets/brand/logo.png(cópia do arquivo acima, registrada empubspec.yaml) e todo ícone/splash gerado (mipmaps Android emandroid/app/src/main/res/mipmap-*/ic_launcher.png,AppIcon.appiconsetno iOS,drawable/launch_image.pngeLaunchImage.imageset) deriva dela. Para exibir a marca em telas, use o widgetlib/shared/widgets/brand_logo.dart(BrandLogo) em vez de emoji ou texto solto. - Nunca reintroduzir os assets placeholder padrão do template Flutter (o ícone azul "F") nem emojis como substituto da logo.
-
Planejamento Obrigatório por Ambiente (Apenas para Novas Features):
- Para Novas Features:
- No Antigravity IDE (Gemini / Code Agent): O plano de implementação DEVE ser apresentado EXCLUSIVAMENTE como o Artefato Nativo do IDE denominado obrigatoriamente
plano_de_implementacao.mdcom o título# Plano de Implementação(write_to_fileno diretório de artefatos comRequestFeedback: truenoArtifactMetadata), exibindo o botão "Proceed". É TERMINANTEMENTE PROIBIDO criar múltiplos arquivos de plano (plan_x.md,plan_y.md) ou arquivosPLAN.mdno workspace. O Agente deve SEMPRE atualizar/sobrescrever o mesmo artefatoplano_de_implementacao.md. - No Claude Code (CLI via terminal): Crie o plano como
PLAN.mdlocal para acompanhamento da tarefa.
- No Antigravity IDE (Gemini / Code Agent): O plano de implementação DEVE ser apresentado EXCLUSIVAMENTE como o Artefato Nativo do IDE denominado obrigatoriamente
- Para Correção de Bugs / Fixes em Geral: NÃO é necessário criar plano de implementação nem pausar para autorização; o Agente tem autonomia para diagnosticar e aplicar o fix diretamente.
- Para Novas Features:
-
Aprovação Humana Prévia Obrigatória (Apenas para Novas Features):
- Para Novas Features: O Agente está PROIBIDO de iniciar desenvolvimento, alterar arquivos de código, criar componentes ou aplicar alterações estruturais sem que o usuário tenha explicitamente aprovado o plano (seja clicando em "Proceed" no artefato nativo ou autorizando explicitamente no chat). Após criar o artefato de plano, o Agente DEVE pausar e aguardar a decisão do usuário.
- Para Correções de Bugs / Fixes Gerais: O Agente pode tocar direto sem precisar pedir autorização, aplicando as correções e testes de forma ágil e objetiva.
-
Criação Obrigatória de Branch para Features (Proibido Commit Direto na
develop):- TODA VEZ que uma nova funcionalidade (feature) for implementada, o Agente DEVE OBRIGATORIAMENTE criar uma nova branch a partir de
developatualizada (padrão de nomenclatura:feat/<nome-da-feature>oufeature/<nome-da-feature>). - É TERMINANTEMENTE PROIBIDO commitar código de novas features diretamente na branch
develop. Todo o desenvolvimento, testes e commits da feature devem viver na branch isolada, sendo integrados nadevelopexclusivamente via Pull Request após validação completa. - Para correções de bugs, deve-se priorizar o uso de branches
fix/<nome-do-fix>.
- TODA VEZ que uma nova funcionalidade (feature) for implementada, o Agente DEVE OBRIGATORIAMENTE criar uma nova branch a partir de
-
Camadas Isoladas: Regras de negócio ficam APENAS no
domain. Controllers não decidem lógica. -
Segurança Alimentar: Qualquer alteração no
ALLERGEN_ENGINEexige aprovação humana imediata. -
Testes Primeiro: Siga a cultura de TDD sempre que possível.
Esta seção define as limitações estritas de operação do Agente, baseadas no princípio do menor privilégio e segurança by-design.
- Execução de testes locais:
npm test,jest - Build e compilação:
npm run build,tsc - Gestão local de containers:
docker-compose up,docker-compose down - Linting e formatação:
npm run lint,prettier
- Deleção em massa ou alteração arbitrária de permissões:
rm -rf /,chmod 777 - Comandos que exigem elevação de privilégio:
sudo,su - Comandos destrutivos de rede e deploy direto via shell.
- Acessos a instâncias, servidores remotos ou bancos de dados de produção.
- Documentação central legada que fuja do escopo da tarefa atual.
- Logs e dumps de banco de dados extraídos de produção (arquivos
.logreais não devem ser apagados, apenas lidos).
- Dependências Externas: O Agente está terminantemente proibido de instalar bibliotecas sem autorização humana. Se precisar, deve propor no plano e pausar.
- Variáveis de Ambiente: Nunca hardcodar senhas, tokens ou chaves criptográficas em código. Sempre usar leitura segura de
.envviaprocess.env. - Dados Sensíveis (PII): Não armazenar nem trafegar informações críticas de saúde sem devida proteção. Hashes e JWT não podem vazar nas respostas JSON das rotas.
- Uso de Sandbox: Todo código gerado atua no sandbox do projeto. Scripts não devem tentar modificar o sistema operacional host além dos artefatos da aplicação.
- Princípio do Menor Privilégio: A infraestrutura de um contexto não pode acessar as tabelas de outro diretamente. Funções não devem ter poderes além do seu propósito estrito.
- Remoção de Testes: É expressamente proibido deletar, comentar ou pular testes (
.skip) para mascarar quebras. Se um teste quebrar, a lógica (ou o teste defasado) deve ser corrigida.
O Agente tem autonomia para proceder com os passos acordados nos seguintes cenários:
- Correção de bugs, ajustes de CSS/UI, pequenos reparos e qualquer fix diretamente, sem necessidade de aprovação prévia.
- Criar testes unitários para o motor de compatibilidade alimentar (
AllergenEngine.spec.ts). - Criar testes de integração para o cadastro de produtos.
- Implementar lógicas de validação em Value Objects (ex:
Email,Rating). - Criar scripts de seed com dados fictícios em
harness/scripts/. - Refatorar controllers para extrair lógica para Use Cases (Clean Architecture).
- Implementar endpoint de busca de produtos compatíveis.
- Criar componente visual de alerta alimentar no frontend web.
- Atualizar documentação de API em
docs/API_CONTRACTS.mdapós criar um endpoint.
⚠️ Alterar regras de compatibilidade alimentar.⚠️ Alterar Termos de Uso ou Políticas de Privacidade.⚠️ Modificar mecanismos de autenticação (senhas, sessões, JWT).⚠️ Alterar scripts de migração (migrations) de banco de dados já aplicadas.⚠️ Adicionar, atualizar ou remover dependências.⚠️ Remover testes da suíte ou reduzir threshold de cobertura.⚠️ Alterar regras de segurança (CORS, middlewares de Rate Limit).⚠️ Realizar Deploy.⚠️ Conectar ou ler dados de ambiente de produção.
Antes de implementar qualquer nova funcionalidade, o Agente DEVE ler e compreender os seguintes documentos:
docs/PRD.md(Visão do produto, personas e requisitos)docs/DOMAIN_MODEL.md(Contextos Delimitados e regras de negócio)docs/API_CONTRACTS.md(Contratos de comunicação HTTP)docs/DATABASE.md(Esquemas de banco e tabelas existentes)docs/ARCHITECTURE.md(Regras de Clean Architecture e estrutura de camadas)docs/FRONTEND_STRATEGY.md(Regras para agentes que atuam em interfaces web/mobile)
O Agente DEVE adaptar seu comportamento de acordo com o tipo da tarefa solicitada, seguindo os fluxos abaixo:
- Ler documentação obrigatória (
PRD,DOMAIN_MODEL,API_CONTRACTS,DATABASE). - Identificar o módulo/contexto afetado.
- Criar ou Atualizar o Plano no Artefato Único (
plano_de_implementacao.md): Gerar ou sobrescrever exclusivamente o arquivoplano_de_implementacao.mdcom o título# Plano de ImplementaçãoeRequestFeedback: trueno metadata. NUNCA criar múltiplos arquivos de plano nem arquivosPLAN.mdno workspace. - PAUSAR e Aguardar Aprovação Humana: Aguardar o usuário clicar no botão "Proceed" ou autorizar explicitamente no chat antes de editar ou criar arquivos.
- Criar Branch Isolada da Feature: Após aprovação do plano, atualizar a
develop(git checkout develop && git pull origin develop) e criar uma nova branch dedicada (git checkout -b feat/<nome-da-feature>). É PROIBIDO commitar features diretamente nadevelop. - Criar ou atualizar testes antes ou junto do código (TDD).
- Implementar em pequenos passos.
- Rodar Bateria de Testes & Auto-Cura: Executar
node scripts/agent-verify.mjs(ounpm run verify). Se houver falha, corrigir autonomamente até 100% verde. - Gerar relatório final atualizando
walkthrough.md.
- Reproduzir e Diagnosticar o problema (analisar logs ou código existente).
- Tocar Direto (Sem Plano/Sem Pausa): Em correções de bugs, fixes visuais ou pequenos ajustes, o Agente tem autonomia para aplicar a correção imediatamente sem precisar criar artefato de plano nem pausar para autorização prévia.
- Criar ou ajustar teste para garantir que o bug foi isolado e evitar regressões.
- Corrigir a menor parte possível para manter a estabilidade.
- Rodar testes e validações (
npm test,npm run build). - Explicar de forma concisa a causa e a correção no relatório final.
- Ler
docs/ALLERGEN_ENGINE.mdedocs/DOMAIN_MODEL.md. - Descrever impacto que a regra trará no resto do sistema.
- Aguardar autorização humana (modificar regras impacta diretamente a vida do consumidor).
- Criar testes cobrindo todos os cenários críticos e edge-cases.
- Implementar a regra exclusivamente na camada de Domain.
- Validar com a suíte de testes.
- Registrar decisão no
DOMAIN_MODEL.mdeCHANGELOG.md.
- Ler
docs/DATABASE.md. - Propor alteração (novas tabelas, colunas, constraints ou índices).
- Explicar impacto sobre os dados existentes e performance.
- Aguardar autorização humana se envolver a criação/execução de uma migration estrutural.
- Criar migration de forma segura e idempotente: Criar arquivo
.sqlemharness/scripts/migrations/e registrar nodocker-compose.yml. - Sincronizar no
connection.ts: Replicar as DDLs de forma defensiva nobackend/src/infrastructure/database/connection.tsusandoexecuteSafeDdlpara execução automática em bancos já persistidos na VPS. - Rodar testes para assegurar que a camada de repositório continua íntegra.
- Documentar alteração no
docs/DATABASE.md.
Diretiva Sagrada: "Encontrou um problema? Corriga. Achou um bug? Resolva."
Após qualquer implementação de funcionalidade ou correção de bug, o Agente DEVE testar autonomamente o sistema antes de considerar a tarefa entregue. O Agente opera sob um ciclo controlado de auto-cura:
-
Dever de Testar Pós-Alteração:
- O Agente DEVE rodar a bateria de validação usando o orquestrador autônomo:
node scripts/agent-verify.mjs(ounpm run verify/npm run verify:quick). - Se a alteração envolver telas ou componentes no
frontend/web-app, o Agente DEVE acionar obrowser_subagentna URL local (http://localhost:3001), navegar pelo fluxo afetado, verificar a ausência de exceções no console do navegador e inspecionar a interface.
- O Agente DEVE rodar a bateria de validação usando o orquestrador autônomo:
-
Princípio de Resolução Autônoma & Limite de Tentativas (Cap de 3 Iterações):
- Se qualquer camada acusar erro (falha de compilação TypeScript, erro de teste unitário Jest, quebra de rota no Smoke Test HTTP ou bug visual/console no navegador):
- O Agente DEVE:
- Isolar a causa raiz do erro a partir dos logs e stack traces.
- Aplicar a correção cirúrgica na implementação interna.
- Re-executar os testes relevantes.
- Trava de Loop Infinito (Máximo 3 Iterações): O ciclo de auto-cura é limitado a no máximo 3 tentativas consecutivas. Se após a 3ª iteração o sistema ainda não estiver 100% verde, o Agente está TERMINANTEMENTE PROIBIDO de continuar tentando em looping. Ele DEVE reverter as alterações que causaram regressão (
git checkout -- .) e reportar um diagnóstico claro ao usuário solicitando intervenção humana.
-
Fronteiras Estritas de Blast Radius (O que PODE e o que NÃO PODE ser alterado):
- ✅ O que o Agente PODE alterar autonomamente:
- Implementação interna de funções auxiliares, controllers, use cases e componentes criados/afetados pela tarefa.
- Correção de erros de tipagem estática do TypeScript (interfaces internas, generics, imports).
- Correção de sintaxe, seletores CSS, alinhamentos e responsividade no Frontend.
- Ajuste do payload ou headers enviados pelo cliente quando a API exigir parâmetros válidos.
- 🚫 O que é TERMINANTEMENTE PROIBIDO sem autorização humana expressa:
- Proibido flexibilizar asserções de testes: É proibido alterar os
expect()ouassert()de testes existentes para deixá-los mais permissivos apenas para fazê-los passar. - Proibido alterar contratos públicos de API: Proibido modificar parâmetros obrigatórios, status codes de sucesso ou schemas de retorno em endpoints públicos sem atualização formal de
docs/API_CONTRACTS.md. - Proibido enfraquecer segurança: Proibido desativar, enfraquecer ou contornar validações de middlewares (CORS, Rate Limit, BotBlocker, Auth, Zod DTOs) ou criar backdoors sob pretexto de testes.
- Proibido alterar regras biológicas: Qualquer alteração no
ALLERGEN_ENGINEpermanece bloqueada. - Proibido alterar migrations ou schemas de banco já consolidados.
- Proibido flexibilizar asserções de testes: É proibido alterar os
- ✅ O que o Agente PODE alterar autonomamente:
-
Comportamento em CI vs Local (Strict Fail):
- Em Ambientes de CI (GitHub Actions / Pipelines): Smoke tests HTTP e testes de integração operam em modo Strict Fail. Qualquer timeout, recusa de conexão ou indisponibilidade da API gera
exit 1e interrompe o build imediatamente. A tolerância offline é bloqueada em CI. - Em Ambiente Local de Desenvolvimento: A tolerância offline (
--allow-offline) só é permitida quando explicitada pelo desenvolvedor (npm run verify:offline), emitindo aviso de que a validação de rede foi ignorada.
- Em Ambientes de CI (GitHub Actions / Pipelines): Smoke tests HTTP e testes de integração operam em modo Strict Fail. Qualquer timeout, recusa de conexão ou indisponibilidade da API gera
Para evitar que o backend entre em crash após o deploy na VPS (o que causa 502 Bad Gateway no Traefik e a mensagem "Erro ao entrar" no frontend), o Agente DEVE cumprir rigorosamente:
- Sincronização Idempotente no
connection.ts:- O container oficial do PostgreSQL só executa scripts de
/docker-entrypoint-initdb.d/na primeira criação do volume. Em volumes existentes na VPS, novas migrations NÃO são executadas pelo Docker automaticamente. - Portanto, toda nova migration DEVE ser replicada no
connection.tsdentro de blocosexecuteSafeDdlcomIF NOT EXISTSeDROP CONSTRAINT IF EXISTS. - NUNCA introduzir colunas
NOT NULLsem valorDEFAULTem tabelas existentes.
- O container oficial do PostgreSQL só executa scripts de
- Inicialização Resiliente do Servidor:
- O servidor Express DEVE inicializar e escutar a porta HTTP mesmo em caso de lentidão temporária do banco, permitindo que a rota
/healthforneça diagnóstico ativo (status: 503 DEGRADED). O processo NÃO deve abortar abruptamente comprocess.exit(1).
- O servidor Express DEVE inicializar e escutar a porta HTTP mesmo em caso de lentidão temporária do banco, permitindo que a rota
- Healthcheck Ativo no CD (
cd-deploy.yml):- O pipeline de deploy SSH valida a subida dos containers com
docker compose psewget -qO- http://localhost:3000/health. Em caso de falha, os logs do container são exibidos no output do GitHub Actions e o pipeline falha para intervenção rápida.
- O pipeline de deploy SSH valida a subida dos containers com
- Resolução de API no Frontend (
client.ts):- Requisições ao backend em produção devem sempre apontar para o domínio oficial
https://api.celilac.com.br, sem injetar portas fantasmas (ex::3002). - Erros de rede (Failed to fetch) e status 502/503 devem ser exibidos ao usuário como "Serviço temporariamente indisponível. O backend está em manutenção ou inicializando."
- Requisições ao backend em produção devem sempre apontar para o domínio oficial
Ao entregar uma feature nova, o Agente DEVE cumprir:
- Docs de Feature: Criar
docs/features/<nome-do-contexto>.mdcontendo: status, tabela de endpoints, entidades/VOs principais e regras críticas (baseado no modelodocs/features/food-profile.md). - README.md: Adicionar link para a feature nova na tabela "Funcionalidades". O README serve como mapa, não duplique endpoints ou regras detalhadas nele.
- CHANGELOG.md: Adicionar uma entrada com data, nome da feature e descrição curta.
- Contratos (API_CONTRACTS.md): Atualizar a fonte da verdade de requests/responses. Remover qualquer anotação de "planejado/futuro" assim que o endpoint for criado.
- Domínio (DOMAIN_MODEL.md): Regras de negócio conceituais (o "porquê") ficam aqui. O arquivo de feature deve apenas gerar um link para o documento de domínio, sem duplicar o conceito.
Ao final de cada tarefa, o Agente deve apresentar um resumo claro contendo:
- Status da Missão: Breve parágrafo confirmando se a meta foi alcançada.
- O que foi feito: Lista em tópicos das principais adições e modificações estruturais.
- Qualidade: Resultado da execução dos testes (
npm test,npm run verify) com a cobertura de código atingida e confirmação de sucesso do build. - Auto-Cura Realizada: Descrição concisa de problemas/bugs encontrados durante a validação e como foram sanados autonomamente.
- Próximos Passos: Uma recomendação clara de qual deve ser a próxima feature a ser atacada (conforme PRD).
O Agente também deve manter o artefato
walkthrough.mdsempre atualizado com o histórico de entregas.
Para que uma alteração feita pelo Agente seja considerada concluída e pronta para aceite (Merge/Commit), os seguintes critérios DEVEM ser obrigatoriamente preenchidos:
- Bateria de testes e auto-cura executada com 100% de sucesso (
node scripts/agent-verify.mjsounpm run verify). - Testes unitários Jest passando (100% verde).
- Compilação do Backend (
tsc -p tsconfig.build.json) e Build do Frontend sem erros de tipagem. - Smoke tests de API HTTP respondendo com sucesso (
/health, produtos, parceiros). - Teste de navegação e interface executado via
browser_subagent(quando envolver alterações no frontend). - Migrations novas replicadas de forma idempotente no
connection.tse registradas nodocker-compose.yml. - Rota
/healthe resiliência de boot preservadas. - Nenhum segredo ou credencial (variáveis de ambiente, senhas, tokens) exposto no código.
- Nenhuma regra crítica de negócio alterada sem autorização prévia humana.
- Documentação atualizada quando necessário (
PRD,DATABASE, contratos, etc). - Aderência estrita à Clean Architecture.
- Aderência aos Bounded Contexts (sem ferir os limites dos domínios).
- Relatório final gerado de forma clara e objetiva com seção de auto-cura se aplicável.
- Revisão humana solicitada e realizada antes do aceite definitivo da branch.