Este repositório mantém uma especificação compartilhada para orientar a geração de código por IA e para documentar os padrões técnicos usados nos projetos que o adotam.
A ideia é concentrar aqui as regras comuns de arquitetura, stack, nomenclatura, geração de CRUDs, padrões de backend, padrões de frontend, validações e critérios de aceite. Assim, cada projeto consumidor pode manter no próprio README.md apenas a documentação específica do produto, como problema, objetivo, solução, público-alvo, escopo funcional e decisões de negócio.
Este projeto é baseado no conceito de Spec-Driven Development (SDD).
No SDD, a implementação não parte apenas de prompts soltos ou decisões implícitas da IA. Antes de gerar ou alterar código, a IA deve ler uma especificação versionada, entender as regras do projeto, validar as entradas, reportar o que pretende fazer e só então executar a mudança confirmada pelo desenvolvedor.
Neste repositório, a spec funciona como uma camada de contrato entre:
- o desenvolvedor, que define intenção, padrões e limites;
- a IA, que usa a documentação como instrução principal;
- o projeto consumidor, que recebe código gerado de forma mais consistente;
- novos desenvolvedores, que podem consultar os padrões esperados antes de manter ou criar funcionalidades.
O objetivo não é substituir análise técnica, revisão de código ou testes. O objetivo é reduzir ambiguidade, evitar geração inconsistente e tornar explícitas as decisões que normalmente ficariam espalhadas em conversas, prompts ou código já existente.
Este repositório deve ser compartilhado entre projetos como uma documentação guia. Ele descreve como a IA deve trabalhar ao gerar código e quais padrões técnicos devem ser respeitados.
Ele pode ser usado para:
- orientar a IA durante geração de CRUDs;
- padronizar backend, frontend, banco de dados, nomenclatura e mensagens;
- registrar a stack técnica usada nos projetos;
- servir como material de onboarding para novos desenvolvedores;
- documentar critérios mínimos de aceite antes de considerar uma geração concluída;
- separar documentação técnica compartilhada da documentação específica de cada produto.
Nos projetos que usam esta spec, a recomendação é manter:
README.mddo projeto consumidor: documentação específica do produto, problema, objetivo, solução, público-alvo, execução local e decisões próprias daquele projeto;.specs/do projeto consumidor: cópia ou referência desta documentação compartilhada, usada como instrução para a IA.
A spec atual orienta geração para projetos com:
- Backend: Java 25, Spring Boot 4, PostgreSQL, Liquibase, Logback e QueryDSL.
- Frontend: Angular 21, Node 24, Bootstrap 5, FontAwesome 7, ngx-ui-loader, ngx-toastr, ngx-mask e ng-select.
Essas tecnologias devem ser tratadas como padrão da documentação atual. Se um projeto consumidor divergir, a divergência deve estar documentada no próprio projeto ou refletida em uma variação desta spec.
orquestrador.md: ponto de entrada para a IA. Define ordem de leitura, validação, confirmação e geração.00-contexto-geral.md: regras globais, stack, escopo, auditoria e critérios gerais.01-yaml-contrato.md: contrato esperado para os YAMLs de CRUD.02-backend-liquibase.md: regras para changelogs e banco de dados.03-backend-domain.md: regras para entidades de domínio.04-backend-service.md: regras para services.05-backend-resource.md: regras para resources/controllers.06-frontend-rotas-menu-api.md: regras de rotas, menu e APIs no frontend.07-frontend-domain-service.md: regras de domain e service no frontend.08-frontend-pesquisar.md: regras para tela de pesquisa.09-frontend-cadastro.md: regras para tela de cadastro.10-checklist-final.md: checklist de validação final.templates/: referências visuais executáveis para telas..cruds/: pasta do projeto consumidor para YAMLs operacionais de CRUD. Ela fica fora de.specs/para não misturar dados do projeto consumidor com a spec compartilhada.
Em projetos consumidores, esses arquivos normalmente ficam sob .specs/.
Como este repositório também é um repositório Git, a forma recomendada de incorporá-lo em outro projeto Git é usando git subtree.
Com git subtree, o projeto consumidor recebe uma cópia versionada da spec dentro de uma pasta do próprio repositório, normalmente .specs/, sem transformar o projeto consumidor em submódulo e sem exigir clone separado para quem for trabalhar no projeto.
Execute os comandos abaixo dentro do repositório do projeto consumidor.
Antes de importar a spec, garanta que o working tree esteja limpo:
git statusSe houver mudanças pendentes, faça commit ou stash antes de continuar.
Também confirme que a pasta .specs/ ainda não existe no projeto consumidor. O git subtree add espera criar o prefixo informado.
ls .specsSe a pasta já existir por cópia manual anterior, resolva isso antes de usar git subtree: remova a cópia manual em uma branch própria ou migre seu conteúdo com cuidado. YAMLs operacionais de CRUD devem ficar em .cruds/, não dentro de .specs/.
git remote add spec-driven-development git@github.com:andrepenteado/spec-driven-development.git
git fetch spec-driven-developmentSe o remote já existir e você precisar corrigir a URL:
git remote set-url spec-driven-development git@github.com:andrepenteado/spec-driven-development.git
git fetch spec-driven-developmentUse main se a branch principal deste repositório for main. Se for master ou outra branch, ajuste o comando.
git subtree add --prefix=.specs spec-driven-development main --squashEsse comando cria a pasta .specs/ no projeto consumidor com o conteúdo deste repositório.
Depois disso, confirme o estado do repositório. Em geral, git subtree add já cria um commit no projeto consumidor.
git statusQuando este repositório de specs receber mudanças, atualize o projeto consumidor com:
git fetch spec-driven-development
git subtree pull --prefix=.specs spec-driven-development main --squashDepois, revise as mudanças e rode as validações normais do projeto consumidor.
Os YAMLs de CRUD do projeto consumidor não devem ficar dentro de .specs/, porque essa pasta é controlada pelo subtree da spec compartilhada.
Crie uma pasta .cruds/ na raiz do projeto consumidor:
mkdir .crudsUse essa pasta para os YAMLs de entrada e para os manifestos gerados:
.cruds/marca.yaml
.cruds/marca.generated.yaml
Mudanças na spec podem ser detectadas durante o trabalho em um projeto consumidor. Nesse caso, elas podem ser feitas em .specs/, desde que sejam isoladas das alterações do código do produto e depois promovidas para este repositório com git subtree push.
Quando o projeto consumidor tiver alterações tanto no código do produto quanto em .specs/, primeiro commite somente o código do consumidor:
git status
git add . ':!.specs/**'
git diff --cached --name-only
git commit -m "feat: ajustes no projeto consumidor"Depois commite somente as alterações da spec dentro do próprio projeto consumidor:
git status --short
git add .specs
git diff --cached --name-only
git commit -m "chore(specs): atualiza especificacoes compartilhadas"Atualize a referência do repositório de specs e envie o conteúdo de .specs/ para este repositório:
git fetch spec-driven-development
git subtree push --prefix=.specs spec-driven-development mainPor fim, envie também o histórico do projeto consumidor para o repositório remoto dele:
git pushSe o subtree push falhar porque a branch main deste repositório recebeu mudanças novas, atualize o subtree no projeto consumidor, resolva conflitos se houver, commite e tente o push novamente:
git subtree pull --prefix=.specs spec-driven-development main --squash
git add .specs
git commit
git subtree push --prefix=.specs spec-driven-development mainDepois que o subtree push for concluído, atualize o clone local deste repositório:
cd /caminho/para/spec-driven-development
git pull origin mainAntes de executar subtree push, revise se a pasta .specs/ contém somente mudanças que realmente pertencem à spec compartilhada. YAMLs operacionais, regras específicas de negócio do consumidor e documentação própria do produto não devem ser promovidos para este repositório.
- Alterações em
.specs/*.mde.specs/templates/podem ser feitas no projeto consumidor quando forem necessárias para corrigir ou evoluir a spec durante o uso real. - Mudanças de spec feitas no consumidor devem ser commitadas separadamente das mudanças do produto e promovidas para este repositório com
git subtree push. - Não adaptar a spec silenciosamente em um único projeto consumidor; se a regra é compartilhada, ela deve voltar para este repositório.
- Atualizar a spec nos projetos consumidores com
git subtree pull, não copiando arquivos manualmente. - Manter a documentação específica do produto no
README.mddo projeto consumidor. - Usar
.cruds/*.yamlpara os YAMLs operacionais do projeto consumidor, quando a geração de CRUD for necessária. - Tratar
.cruds/*.generated.yamlcomo manifesto daquilo que já foi gerado. - Não colocar YAMLs operacionais em
.specs/, porque essa pasta pertence ao subtree da spec compartilhada. - Antes de atualizar a spec via
git subtree pull, garantir que mudanças locais em.specs/já foram commitadas, descartadas ou promovidas para este repositório. - Se um projeto consumidor precisar divergir da spec, documentar a exceção no próprio projeto e avaliar se a regra deveria virar uma variação oficial deste repositório.
- Disponibilize esta documentação no projeto consumidor, preferencialmente em
.specs/. - Crie os YAMLs de CRUD em
.cruds/[nome-crud].yaml. - Peça para a IA ler e seguir
.specs/orquestrador.md. - A IA deve validar os YAMLs e informar status.
- O desenvolvedor confirma explicitamente quais CRUDs executar.
- A IA gera backend e frontend seguindo as specs.
- A IA cria
.cruds/[nome-crud].generated.yamlapós sucesso. - A IA informa arquivos criados ou alterados e validações executadas.
Para executar a leitura geral dos CRUDs pendentes:
Leia e siga .specs/orquestrador.md como instrução principal para gerar CRUDs.
Os YAMLs de entrada estão em .cruds/.
Valide, reporte status e aguarde confirmação antes de alterar código.
Para um YAML específico:
Leia e siga .specs/orquestrador.md.
Use o YAML .cruds/marca.yaml.
Valide primeiro, apresente o status e aguarde confirmação antes de criar arquivos.
Depois do relatório da IA, confirme explicitamente:
Execute o CRUD marca.
- Ler
orquestrador.md. - Ler as specs na ordem obrigatória.
- Escanear
.cruds/*.yaml, ignorando*.generated.yaml. - Validar cada YAML conforme o contrato.
- Inspecionar o projeto real antes de criar arquivos.
- Apresentar relatório com status:
novo,existente,conflitoouinvalido. - Aguardar confirmação explícita do desenvolvedor.
- Gerar backend e frontend conforme as specs.
- Criar o manifesto
.generated.yamlsomente após sucesso. - Informar arquivos alterados e validações executadas.
- As specs desta pasta prevalecem sobre inferências genéricas da IA.
- Padrões reais do projeto consumidor prevalecem sobre exemplos, desde que não violem os critérios de aceite.
- A IA deve inspecionar o projeto real antes de gerar arquivos.
- A IA não deve sobrescrever CRUD já gerado.
- A IA não deve alterar arquivos não pertencentes ao CRUD solicitado.
- YAMLs já executados devem ter o respectivo
.generated.yaml. - Templates em
.specs/templatessão referências visuais executáveis. Ao gerar Angular, a IA deve omitir<html>,<head>,<body>, CDNs e scripts.
Evite pedir apenas:
Execute orquestrador.md
Esse pedido pode ser interpretado como leitura simples ou resumo do arquivo.
Prefira:
Leia e siga .specs/orquestrador.md como instrução principal.
Essa formulação deixa claro que o arquivo deve ser usado como regra de execução, não apenas como conteúdo de referência.