# Project Discovery - DDD Effect Rust Providers CLI

## Rastreabilidade
- Origem: pedido humano para reorganizar o `sdd-layer` com DDD, runtime Effect-like em Rust, pontos Node+TypeScript com Effect.ts, providers selecionáveis e aprendizado incremental por documentação/uso.
- Estado atual: recorded
- Dono humano: Allan
- Evidências: `sdd doctor --json`, `sdd clients doctor --json`, `cargo check`, `cargo test`, `cargo clippy -- -D warnings`, leitura de `src/main.rs`, `Cargo.toml`, `build.rs`, `tests/cli.rs`, `README.md`, `sdd.config.yaml`.
- Próximo artefato: PRD draft em `docs/ddd-effect-rust-providers-cli/02-prd.md`.

## Identidade do projeto
- Nome: `sdd-layer`
- Tipo: camada de orquestração SDLC/SDD e CLI nativo.
- Lifecycle: brownfield.
- Stack: Rust 2021, `clap`, `anyhow`, `serde_json`, `regex`, `chrono`, `walkdir`, `unicode-normalization`; artefatos Markdown/YAML; GitHub Actions; superfícies para Codex, Claude Code, opencode, Cursor, Devin, Antigravity e Trae.
- Sistemas: work tracker Markdown local, docs Markdown local, repo Git, CI GitHub Actions, sem chat/deploy configurados em `sdd.config.yaml`.

## Estrutura observada
- Código fonte: `src/main.rs` concentra CLI, artifact store, risk classifier, validators, sync de clientes, hooks e installer; `build.rs` empacota arquivos gerenciados no binário.
- Testes: `tests/cli.rs` cobre fluxos de instalação/update/clientes/artifact store; testes unitários no próprio `src/main.rs`.
- Docs: `README.md`, `docs/`, `clients/`, `templates/`, `schemas/`, `examples/`; `.sdd/` existe como instalação local gerada e está ignorada pelo Git.
- Migrations: não há.
- Configurações: `Cargo.toml`, `rust-toolchain.toml`, `sdd.config.yaml`, `.github/workflows/sdd-layer.yml`, surfaces `.codex/`, `.claude/`, `.agents/`, `.opencode/`, `.cursor/`, `.trae/`.
- Node/TypeScript: nenhum `package.json`, `tsconfig.json`, lockfile ou workspace Node foi encontrado na raiz atual; qualquer bridge Effect.ts será uma nova área opcional.

## Comandos verificados
- Instalação: não aplicável neste ciclo; o binário foi executado via `cargo run --quiet -- ...`.
- Lint: `cargo clippy -- -D warnings` passou em 2026-06-06.
- Typecheck: `cargo check` passou em 2026-06-06.
- Testes: `cargo test` passou em 2026-06-06 com 6 testes unitários e 6 testes de integração.
- Build: `cargo build --release` não foi executado neste discovery; CI declara esse passo em `.github/workflows/sdd-layer.yml`.
- Doctor: `sdd doctor --json` passou sem failures/warnings.
- Clients doctor: `sdd clients doctor --json` passou com cobertura para CLI, Codex, Claude Code, Cursor, opencode, Devin, Antigravity e Trae.

## Arquitetura e padrões
- Entrypoints: `src/main.rs::run` roteia subcomandos `init`, `doctor`, `clients`, `context`, `ci`, `install`, `update`, `risk`, stages, `orchestration`, `artifact`, `validate-artifact` e `hook`.
- Camadas atuais: o projeto ainda está em um binário monolítico; as fronteiras existem conceitualmente por funções, não por módulos/crates DDD.
- Convenções: CLI determinístico como harness; surfaces de agentes devem delegar ao CLI; artifact store local em `docs/<slug>/`; `orchestrator` é apenas alias legado.
- Padrões de erro/log: `anyhow::Result`, `bail!`, prints estruturados simples; sem camada de erro de domínio ainda.
- Padrões de teste: testes de integração criam projetos temporários e validam comportamento de CLI end-to-end; unitários cobrem helpers críticos.
- Empacotamento: `build.rs` inclui raízes gerenciadas no binário e ignora diretórios gerados `docs/<orquestracao>/`.

## Riscos do projeto
- Segurança: provider selection envolve API keys/tokens; não pode persistir segredo em docs, logs, traceability map ou artifact store.
- Dados: aprendizado incremental deve operar sobre docs e metadados do SDD, evitando capturar código sensível, prompts privados ou tokens.
- Performance: providers remotos exigem timeout, retry, rate limit, cache e budget de tokens; CLI deve continuar rápido offline.
- Integrações: OpenAI/Codex, Claude, Gemini, opencode e providers customizados têm contratos diferentes; precisa de adapter capability-driven, não switch hardcoded.
- Deploy: mudanças em installer/update/client sync podem quebrar projetos consumidores; requer testes end-to-end e plano de compatibilidade.
- Brownfield: `src/main.rs` monolítico aumenta risco de refactor amplo; DDD deve ser incremental, com compatibilidade de comandos.

## Regras para a pipeline
- Refinement obrigatório quando tocar provider API, credenciais, schema de config, persistência de memória, installer/update ou layout de crates.
- Agent Team obrigatório para Tech Spec: `architecture-reviewer`, `security-reviewer`, `data-contract-reviewer`, `test-reviewer`; incluir `backend-implementer` e `test-implementer` na execução quando houver código.
- Checkpoint adicional quando introduzir Node+TypeScript, novo crate, novo schema de config ou mudança nos comandos públicos do CLI.
- Evidências mínimas de review: `cargo fmt --check`, `cargo clippy -- -D warnings`, `cargo test`, `cargo build --release` ou justificativa; smoke `sdd doctor`, `sdd clients doctor`, `sdd orchestration --dry-run`/artifact store; testes para provider registry e secret redaction.

## Recomendações de skills e regras
- Skills específicas para criar em `.agents/skills/<nome>/SKILL.md`: `rust-ddd-cli`, `rust-effect-runtime`, `provider-adapters`, `sdd-memory-index`; adicionar `node-effect-orchestration` somente se o workspace Node for criado.
- Espelho Claude quando necessário em `.claude/skills/<nome>/SKILL.md`: espelhar skills que forem usadas por Claude Code.
- Rules Cursor em `.cursor/rules/<nome>.mdc`: regras curtas para provider secrets, DDD boundaries e artifact memory.
- Rules Antigravity em `.agents/rules/<nome>.md`: mesmas invariantes de secrets/config e harness CLI.
- Seções curtas para `AGENTS.md`: arquitetura DDD pretendida, política de provider/credenciais, regra de aprendizado incremental e uso de bridge TS.
- Deltas específicos para `CLAUDE.md`: apenas diferenças do Claude Code/Agent SDK quando o provider Claude for implementado.

## Contexto para próximos agentes
O `sdd-layer` já funciona como CLI Rust e pacote de superfícies multi-cliente, mas ainda não tem fronteiras DDD explícitas, registry de providers, runtime de efeitos, memória incremental estruturada ou workspace Node. A feature deve preservar compatibilidade de comandos, tratar secrets como dado sensível, manter o CLI como fonte determinística e usar Node+Effect.ts apenas como bridge opcional para orquestração que realmente precise do ecossistema TypeScript.
