Arquitetura & Spec-Driven Development¶
O Neo combina Domain-Driven Design (DDD) tático com Spec-Driven Development (SDD). O objetivo é simples: manter o núcleo fácil de testar e garantir que cada comando novo nasça de um contrato claro antes de virar código.
Arquitetura em Camadas¶
As dependências apontam sempre para dentro, isolando regras de negócio de detalhes de HTTP, terminal ou sistema operacional:
interfaces/(src/neo/cli.pyesrc/neo/commands/): Borda de entrada na linha de comando. Traduz argumentos do Typer, formata painéis e tabelas com Rich e serializa a saída quando--jsonestá ativo.application/&services/: Casos de uso da aplicação, como detecção automática de repositório Git viaremote, resolução de provedor e análise contextual de stories.domain/: Entidades, objetos de valor e protocolos (GitProviderProtocol, modelos de repositório, commit, workspace e story). Não importa bibliotecas de rede ou de interface.infrastructure/(src/neo/integrations/econfig.py): Adaptadores concretos para GitHub, Bitbucket Cloud e Shortcut usandohttpx, além da persistência emkeyringe arquivos TOML.
Essa separação é o que prepara o Neo para os próximos passos do roadmap — novos módulos de vida pessoal (estudos, lazer e finanças) e uma futura API pública entram como novos adaptadores e domínios sem reescrever a base.
Como Funciona o Spec-Driven Development (SDD)¶
Nenhuma feature é implementada no improviso. Todo comando segue quatro etapas verificáveis em CI:
graph LR
Spec["1. spec.md & tasks.md"] --> Testes["2. Testes Unitários & E2E"]
Testes --> Codigo["3. Implementação DDD"]
Codigo --> Gates["4. Gates de Qualidade & DoD"]
- A spec é o contrato: Cada funcionalidade começa em
specs/NNNN-*/spec.mdcom critérios de aceite em formato Given/When/Then (AC-1,AC-2...). - Rastreabilidade ponta a ponta: O script de auditoria valida se todo
AC-Nda especificação possui tarefa correspondente emtasks.mde teste automatizado cobrindo o cenário. - Gates automatizados no CI: Todo push e Pull Request passa por linter (
ruff), checagem estática de tipos em modo estrito (mypy src), compilação da documentação (mkdocs build --strict) e suítepytestcom cobertura mínima de80%. - Memória e decisões documentadas: O estado atual do desenvolvimento fica em
docs/STATE.md, e decisões arquiteturais difíceis de reverter são registradas como ADRs imutáveis emdocs/architecture/adr/.