# 00-project-discovery.md — SDDL-3: fix correção run SDD validation

**Data**: 2026-06-24
**Escopo**: CI/CD, version alignment, `sdd doctor` / `sdd ci`
**Repo**: `C:\alisson\sdd-layer`

---

## 1. Stack e comandos relevantes

| Componente | Valor verificado |
|---|---|
| Linguagem | Rust, edition 2021 |
| Binário gerado | `sdd` (path: `src/main.rs`, `[[bin]] name = "sdd"`) |
| Versão em `Cargo.toml` | `0.15.2` |
| Versão em `Cargo.lock` | `0.15.2` (entrada `sdd-layer`) |
| Versão em `VERSION` | `0.15.2` (drift resolvido) |
| CI runner | `ubuntu-latest` (GitHub Actions) |

Comandos verificados:
- `cargo fmt --check` / `cargo clippy -- -D warnings` / `cargo test` / `cargo build --release`
- `target/release/sdd ci` (entrypoint CI — chama `doctor()` internamente)
- `cargo run --quiet -- ci` (workflow secundário `sdd.yml`)

---

## 2. CI/CD pipeline atual

### `sdd-layer.yml` (pipeline principal)
```
push → main / pull_request
  1. checkout → rust-toolchain@stable
  2. cargo fmt --check
  3. cargo clippy -- -D warnings
  4. cargo test
  5. cargo build --release
  6. target/release/sdd ci   ← entrypoint crítico
```

### `sdd.yml` (smoke)
```
push → main / pull_request
  1. checkout → rust-toolchain@stable
  2. cargo run --quiet -- ci
```

### O que `sdd ci` / `doctor()` faz com version drift

- `version_alignment_issues()` lê `VERSION`, `Cargo.toml [package].version` e `Cargo.lock entry sdd-layer`
- Se `is_layer_source_repo(root)` → `strict_contract = true` → divergência vira FAILURE (não warning)
- `is_layer_source_repo` detecta presença simultânea de `src/main.rs` + `plugins/orchestration/`

---

## 3. Gestão atual do VERSION

Totalmente manual: editar `Cargo.toml`, rodar `cargo build` (atualiza `Cargo.lock`), editar `VERSION`. Não há script de bump, Makefile target, nem CI gate de pré-commit.

**Causa raiz do card**: bump de `Cargo.toml` sem atualizar `VERSION`.

---

## 4. Riscos e recomendações

| # | Risco | Severidade |
|---|---|---|
| R1 | Drift futuro garantido por processo manual | Alto |
| R2 | `sdd not found in PATH` no CI (warning esperado, binário invocado via path relativo) | Médio |
| R3 | `sdd.yml` usa `cargo run -- ci` sem build release separado | Baixo |

**Recomendação principal**: adicionar step de verificação de alinhamento de versão no CI ou script `scripts/check-version.sh`.

---

## Arquivos-chave

- `VERSION`
- `Cargo.toml`
- `src/main.rs` (funções: `version_alignment_issues`, `doctor`, `run_ci`, `is_layer_source_repo`)
- `.github/workflows/sdd-layer.yml`
- `.github/workflows/sdd.yml`
