# Memory - DDD Effect Rust Providers CLI

## Estado final
- Orquestração concluída em 2026-06-06.
- Backlog executado: SDD-DDD-001 a SDD-DDD-010.
- Estado do MVP: CLI Rust segue como harness determinístico; DDD incremental iniciado; provider registry offline disponível; redaction aplicada antes de providers remotos; memory index derivado disponível; Node+Effect.ts documentado como bridge desligada por padrão.
- Review final: aprovada em `07-review.md`.

## Rastreabilidade
- Orquestração: DDD Effect Rust Providers CLI.
- Slug: ddd-effect-rust-providers-cli.
- Artefatos: `00-project-discovery.md`, `00-risk-classification.md`, `01-idea.md`, `02-prd.md`, `03-techspec.md`, `04-tasks.md`, `05-refinement.md`, `06-execution.md`, `06-adr.md`, `07-review.md`, `08-memory.md`.
- Código principal: `src/main.rs`, `src/domain/risk.rs`, `src/domain/providers.rs`, `src/runtime/errors.rs`, `src/runtime/redaction.rs`.
- Config/schema/docs: `schemas/provider-config.schema.json`, `.sdd/schemas/provider-config.schema.json`, `sdd.config.yaml`, `sdd.config.example.yaml`, `presets/*.yaml`, `README.md`, `docs/USAGE.md`, `docs/CLIENTS.md`, `docs/PROJECT-ONBOARDING.md`.
- Testes: `tests/cli.rs` e testes unitários em `src/main.rs`, `src/runtime/errors.rs`, `src/runtime/redaction.rs`.

## Decisões
- DDD começou por módulos internos na mesma crate, não por workspace multi-crate.
- `src/domain/risk.rs` concentra classificação de risco e `src/domain/providers.rs` concentra contratos de providers/config.
- `src/runtime/*` introduz `SddError`, `SddResult`, `Secret<T>`, `RedactedDisplay` e scrubber central.
- Provider selection é offline por padrão, com precedência flags, env, config e defaults.
- `sdd providers doctor` mostra presença de env var, nunca o valor.
- `.sdd/memory/learnings.jsonl` é cache derivado e reconstruível a partir de `docs/<slug>/`.
- Node+Effect.ts fica atrás de `runtime.node_effect_bridge.enabled`; com `false`, o CLI não exige Node, pnpm ou Effect.ts.

## Padrões úteis
- Para novos comandos que possam manipular secrets, passar mensagens e eventos por `runtime::redaction::redact_text`.
- Para novos providers, adicionar config em `providers.registry.<id>` com `kind`, `auth_env`, `model`, `capabilities`, `timeouts`, `retries`, `token_budget` e `enabled`.
- Para flags de stages, preservar resolução determinística e redigida: flags > env > config > defaults.
- Para memória, gerar índice com `sdd memory learn --name "<ciclo>"` depois de artefatos registrados/aprovados.
- Para update, preservar `sdd.config.yaml` por padrão; usar `--update-config` somente quando o usuário aceitar regenerar config.

## Testes e comandos
- `cargo fmt --check`: passou.
- `cargo test runtime`: passou.
- `cargo test redacts`: passou.
- `cargo test compact_tool_input_redacts_secret_values`: passou.
- `cargo test providers_memory`: passou.
- `cargo test update_refreshes`: passou.
- `cargo test`: passou, 12 testes unitários e 7 testes de integração.
- `cargo clippy -- -D warnings`: passou.
- `OPENAI_API_KEY=[REDACTED] cargo run --quiet -- providers doctor --json`: não imprimiu o valor original.
- `cargo run --quiet -- orchestration --provider claude --model test-model --dry-run "x"`: resolveu provider/model por flags e manteve offline.
- `cargo run --quiet -- doctor`: passou.
- `cargo run --quiet -- memory status --json`: passou.

## Pendências
- Implementar chamadas remotas reais a providers somente em ciclo futuro, com timeouts, retry, budget, telemetry e testes negativos de redaction.
- Migrar gradualmente comandos existentes de `anyhow` para `SddError` onde isso trouxer contrato melhor.
- Avaliar substituição futura de `serde_yaml`, já que a crate está deprecated upstream.
- Ativar Node+Effect.ts apenas mediante ADR nova e teste que preserve o caminho Rust offline.
- Remover wrappers temporários em `main.rs` quando application services forem extraídos.

## Contexto para o próximo agente
- Comece lendo `06-execution.md`, `06-adr.md` e `07-review.md`.
- O próximo ciclo natural é provider remoto real ou extração de application/infrastructure; antes disso, mantenha `providers doctor` e redaction como gate.
- Não registre API keys/tokens em stdout, stderr, artifacts, traceability, review, memory ou `.sdd/events.jsonl`.
- Use `cargo test providers_memory` como smoke rápido para provider selection, redaction, memory e update.
