# 04-tasks.md — SDDL-3: Fix correção run SDD validation

**Artefato**: Tasks (Etapa 4)
**Card**: SDDL-3
**Data**: 2026-06-24
**Origem**: `docs/sddl-3/03-techspec.md`
**Rastreabilidade**: `docs/sddl-3/04-tasks.md`

---

## 1. Rastreabilidade

| Campo | Valor |
|---|---|
| Card | SDDL-3 |
| PRD | `docs/sddl-3/02-prd.md` |
| Tech Spec | `docs/sddl-3/03-techspec.md` |
| Próximo artefato | Execução → `docs/sddl-3/06-execution.md` |
| Arquivos a criar | `scripts/bump-version.sh`, `scripts/bump-version.ps1`, `scripts/README.md` |
| Arquivos a modificar | nenhum |

---

## 2. Backlog

| ID | Título | Est. | Deps |
|---|---|---|---|
| T-01 | Criar diretório `scripts/` e esqueleto do `.sh` | 0.5h | — |
| T-02 | Parsing e validação de argumento no `.sh` | 1h | T-01 |
| T-03 | Resolução de versão alvo (semver + incrementos) no `.sh` | 1h | T-02 |
| T-04 | Backup e edição cirúrgica de `Cargo.toml` via `awk` no `.sh` | 2h | T-03 |
| T-05 | `cargo update` e escrita de `VERSION` com rollback no `.sh` | 2h | T-04 |
| T-06 | Saída resumo e `chmod +x` no `.sh` | 0.5h | T-05 |
| T-07 | Criar `scripts/bump-version.ps1` com paridade total ao `.sh` | 3h | T-06 |
| T-08 | Criar `scripts/README.md` | 0.5h | T-07 |
| T-09 | Validação end-to-end: bump `patch` e verificação `sdd ci` | 2h | T-08 |

**Total estimado**: 12.5h

---

## 3. Critérios de aceite por task

### T-01

```gherkin
Cenário: diretório scripts criado
  Dado que scripts/ não existe
  Quando T-01 é executada
  Então scripts/ deve existir
  E scripts/bump-version.sh deve ter shebang "#!/usr/bin/env bash" na linha 1
  E linha 2 deve ser "set -euo pipefail"
```

### T-02

```gherkin
Cenário: argumento inválido
  Quando o script é chamado com argumento "foo-bar"
  Então exit code deve ser 2
  E nenhum arquivo do projeto deve ser modificado

Cenário: argumento semver válido aceito
  Quando chamado com "1.2.3"
  Então não deve emitir exit 2 na seção de validação
```

### T-03

```gherkin
Cenário: incremento patch com VERSION 0.15.2
  Quando chamado com "patch"
  Então TARGET deve ser "0.15.3"

Cenário: incremento minor
  Quando chamado com "minor"
  Então TARGET deve ser "0.16.0"

Cenário: incremento major
  Quando chamado com "major"
  Então TARGET deve ser "1.0.0"
```

### T-04

```gherkin
Cenário: edição cirúrgica com awk
  Dado que Cargo.toml tem versão "0.15.2" sob [package]
  E dependências também têm campos version
  Quando o bloco awk substitui para TARGET "0.16.0"
  Então apenas a versão sob [package] deve ser "0.16.0"
  E as versões das dependências devem permanecer inalteradas
```

### T-05

```gherkin
Cenário: rollback em falha de cargo update
  Dado que cargo update retorna exit não-zero
  Então Cargo.toml deve ser restaurado ao .bak
  E Cargo.lock deve ser restaurado ao .bak
  E VERSION não deve ser modificado
  E exit code deve ser 1
```

### T-06

```gherkin
Cenário: formato de saída correto
  Dado CURRENT "0.15.2" e TARGET "0.16.0"
  Então stdout deve conter "bump-version: 0.15.2 -> 0.16.0"
  E stdout deve conter "VERSION      0.16.0"
  E stdout deve conter "Cargo.lock   0.16.0  (sdd-layer)"
  E última linha deve ser "OK"
```

### T-07

```gherkin
Cenário: paridade com .sh
  Dado que .sh e .ps1 recebem o mesmo argumento
  Quando executados sequencialmente com reset entre eles
  Então o estado final dos três arquivos deve ser idêntico
```

### T-08

```gherkin
Cenário: README contém exit codes e nota RN-03
  Quando scripts/README.md é lido
  Então deve conter exit 0, 1 e 2 com significados
  E deve conter aviso de que bumps manuais não são suportados
```

### T-09

```gherkin
Cenário: bump patch bem-sucedido
  Quando scripts/bump-version.sh patch é executado
  Então exit code deve ser 0
  E sdd ci deve retornar version_alignment_issues igual a 0

Cenário: idempotência
  Dado que bump foi aplicado para X.Y.Z
  Quando scripts/bump-version.sh X.Y.Z é executado novamente
  Então exit code deve ser 0
  E três arquivos devem estar inalterados
```

---

## 4. Definition of Done (global)

- Scripts `.sh` e `.ps1` completos, funcionais e sintaticamente válidos
- `.sh` com bit de execução (`chmod +x`)
- Nenhum arquivo fora de `scripts/` modificado permanentemente (exceto bump real em T-09)
- Nenhum `.bak` remanescente após execução bem-sucedida
- `sdd ci` confirma zero `version_alignment_issues` (T-09)

---

## 5. Riscos cobertos

| Risco | Tasks |
|---|---|
| RT-01: `-p sdd` errado no PRD | T-05, T-07 (usar `-p sdd-layer`) |
| RT-02: replace cego corrompe deps | T-04, T-07 (máquina de estado por seção) |
| RT-03: upgrades transitivos no lock | T-05, T-07 (`--precise`) |
| RT-04: `sed -i` incompatível | T-04 (`awk`), T-07 (line-by-line PS) |
| RT-05: dessincronia em falha parcial | T-05, T-07 (rollback por backup) |
