Estas instruções valem para todo o repositório SmartCommands. Instruções explícitas do usuário e arquivos AGENTS.md mais próximos do código em edição têm precedência.
- Comunique-se em português do Brasil, preservando o idioma e o estilo já usados em código, nomes de API, mensagens e documentos.
- Em pedidos de análise, diagnóstico ou revisão, não altere arquivos — implemente somente quando o usuário também pedir a implementação.
- Não faça commit, push, publicação de pacote, alteração de versão ou de CI/CD sem pedido explícito.
- Quando o pedido depender de uma decisão sobre contrato público, breaking change, arquitetura, persistência, segurança ou publicação, apresente a decisão antes de implementar.
A solução está em src/SmartCommands.sln. Os projetos se dividem em três grupos:
| Grupo | Projetos | Finalidade |
|---|---|---|
| Bibliotecas publicáveis | RoyalCode.SmartCommands, RoyalCode.SmartCommands.Generators, RoyalCode.SmartCommands.EntityFramework, RoyalCode.SmartCommands.WorkContext |
Pacotes NuGet que formam a entrega do repositório. |
| Testes e suporte | RoyalCode.SmartCommands.Tests, RoyalCode.SmartCommands.Tests.Models, RoyalCode.SmartCommands.Demo.Tests |
Testes do runtime/generator, modelos e fixtures compartilhados, e testes de integração HTTP dos exemplos. Tests.Models não é biblioteca de produção. |
| Exemplos e demonstrações | RoyalCode.SmartCommands.Demo e todos os RoyalCode.SmartCommands.Demo.* restantes |
Host demonstrativo e módulos verticais que exercitam formas de uso da biblioteca. Não são aplicações reais de produção nem modelos completos de requisitos não funcionais, segurança, observabilidade ou operação. |
Alvos: bibliotecas runtime net8.0/net9.0/net10.0; testes e Demo net10.0; generator/analyzer netstandard2.0.
RoyalCode.SmartCommands.Generators --(build/analyzer)--> código dos handlers, DI e endpoints
RoyalCode.SmartCommands.EntityFramework ---┐
RoyalCode.SmartCommands.WorkContext -------┴--> RoyalCode.SmartCommands
├── RoyalCode.SmartProblems
└── RoyalCode.SmartValidations
RoyalCode.SmartCommandsé o núcleo runtime: atributos públicos, contratos de accessors/repositórios, decorators e mediator. Não contém implementação concreta de EF Core ou WorkContext.RoyalCode.SmartCommands.Generatorsé a camada de compilação: incremental generator/analyzer, diagnósticos, leitura dos atributos e emissão de handlers, registros de DI e mapeamentos HTTP.Generators/contém transformação/modelos/emissão;Commands/contém blocos usados para construir o fluxo gerado. O pacote é distribuído emanalyzers/dotnet/cse usaRoyalCode.Extensions.SourceGeneratorcomo base.RoyalCode.SmartCommands.EntityFrameworkadapta os contratos do núcleo diretamente ao EF Core. Organiza-se emAdapters/,Extensions/para DI eOptions/.RoyalCode.SmartCommands.WorkContextadapta os mesmos contratos ao ecossistema WorkContext, incluindo repositórios, UnitOfWork e retry de concorrência. Organiza-se emAdapters/,Extensions/,Options/,Internals/e contratos/factories de problemas de concorrência.pack.targetscentraliza metadados e empacotamento;Directory.Build.propscentraliza TFMs e versões das dependências. Mudanças de API pública devem considerar os quatro pacotes e o comportamento do código gerado.
Antes de tarefas que envolvam arquitetura, comportamento ou uso das bibliotecas, leia o que for pertinente:
src/README.md— visão geral e uso público.src/.docs/references/smart-commands.ai-rules.md— regras operacionais concisas para gerar código com SmartCommands.src/.docs/references/smart-commands.md— guia completo de SmartCommands: atributos, handlers, pipeline, adapters e Minimal APIs.src/.docs/commands.md— índice curto mantido para compatibilidade com links existentes.src/.docs/feature-slice-architecture.md— padrão arquitetural atual para novos módulos: DDD modular, Features verticais e lentes Explícita/Gritante.src/.docs/legacy-architecture.md— arquitetura anterior baseada emContracts+Application, apenas para compreender soluções existentes e migrações.
Em src/.docs/references/, os arquivos *.ai-rules.md são regras operacionais concisas; os arquivos *.md correspondentes são os guias conceituais completos, com contexto, exemplos e referência de API:
- Domínio — regras para IA | guia completo: Entities, Aggregates e DomainEvents.
- Persistência — regras para IA | guia completo: WorkContext, UnitOfWork e Repositories.
- Validações — regras para IA | guia completo: SmartValidations,
RuleSeteIValidable. - Problemas e resultados — regras para IA | guia completo:
Problem,Problems,ResulteFindResult. - Projeções — regras para IA | guia completo: SmartSelector e seu source generator.
- Buscas — regras para IA | guia completo: SmartSearch, critérios, filtros, ordenação e paginação.
- Comandos — regras para IA | guia completo: handlers, pipeline, persistência e Minimal APIs.
Os documentos em src/.docs/references/ são a documentação das bibliotecas consumidas: use-os para orientar o código, mas não os edite sem pedido explícito.
As versões consumidas por NuGet são definidas em src/Directory.Build.props. No layout local padrão, os repositórios das dependências ficam como irmãos de SmartCommands sob a pasta RoyalCode/. Os caminhos abaixo servem para consultar a implementação ou realizar trabalho coordenado entre repositórios; os projetos desta solução continuam referenciando os pacotes NuGet, salvo mudança deliberada para investigação local.
- SmartProblems — resultados e problemas padronizados: core, ApiResults, HTTP, ProblemDetails e EntityFramework.
- SmartValidations — regras e composição de validações: RoyalCode.SmartValidations.
- SmartSelector — projeções tipadas e geração de mapeamentos: runtime e generator.
- SmartSearch — filtros, critérios e execução de buscas; o repositório local chama-se
Searches: Abstractions, Core, Linq, EntityFramework e AspNetCore. - Bibliotecas de domínio — base DDD no repositório
EnterprisePatterns: Entities, DomainEvents e Aggregates. - WorkContext e persistência — abstrações e implementações EF Core no repositório
EnterprisePatterns: Repositories.Abstractions, Repositories.EntityFramework, UnitOfWork.Abstractions, UnitOfWork.EntityFramework, WorkContext.Abstractions e WorkContext.EntityFramework. - Extensions.SourceGenerator — infraestrutura compartilhada dos generators: RoyalCode.Extensions.SourceGenerator.
- Documente APIs públicas e funcionalidade de domínio com XML documentation ao criar ou alterar seus contratos.
- Para falhas esperadas de domínio, prefira
Result,Result<T>,ProblemseProblemem vez de exceções; valide com SmartValidations/Rules.Set<T>()eHasProblems. - Propague
CancellationTokenem fluxos assíncronos e eviteasync void. - Mudanças no generator devem manter saída determinística, cabeçalho
// <auto-generated/>,#nullable enablee diagnósticos para entradas inválidas em vez de falhas do generator. - Prefira corrigir o código-fonte que gera os artefatos a editar artefatos gerados à mão; atualize snapshots/fixtures apenas com a mudança verificada.
- Mantenha os patches focados no pedido. Problemas fora do escopo podem ser relatados à parte, em vez de expandir a alteração.
- Para executar planos em
src/.ai/plans/, leia antes as decisões, dependências, invariantes, critérios de aceite e riscos. Atualize tarefas e resultados só depois da verificação correspondente.
A partir de src/, os comandos padrão são:
dotnet build SmartCommands.sln -c Release
dotnet test RoyalCode.SmartCommands.Tests/RoyalCode.SmartCommands.Tests.csproj -c Release
dotnet test RoyalCode.SmartCommands.Demo.Tests/RoyalCode.SmartCommands.Demo.Tests.csproj -c Release- Valide na proporção do risco: testes diretos para mudanças localizadas; suíte relevante completa para contratos públicos, generator ou mudanças transversais.
- Não aceite warnings novos silenciosamente; compare com o baseline.
- Relate exatamente quais verificações rodaram e seus resultados — não afirme que um teste passou sem tê-lo executado.
- O comportamento pedido está implementado (ou a análise está sustentada por evidências), com testes criados/atualizados quando o comportamento mudou.
- As verificações relevantes passaram, ou os impedimentos e falhas remanescentes foram relatados com clareza.