spec-first-copilot 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +52 -0
- package/package.json +25 -0
- package/templates/.ai/memory/napkin.md +68 -0
- package/templates/.github/agents/backend-coder.md +215 -0
- package/templates/.github/agents/db-coder.md +165 -0
- package/templates/.github/agents/doc-writer.md +51 -0
- package/templates/.github/agents/frontend-coder.md +222 -0
- package/templates/.github/agents/infra-coder.md +341 -0
- package/templates/.github/agents/reviewer.md +99 -0
- package/templates/.github/agents/security-reviewer.md +153 -0
- package/templates/.github/copilot-instructions.md +176 -0
- package/templates/.github/instructions/docs.instructions.md +123 -0
- package/templates/.github/instructions/sensitive-files.instructions.md +32 -0
- package/templates/.github/skills/sf-design/SKILL.md +181 -0
- package/templates/.github/skills/sf-dev/SKILL.md +326 -0
- package/templates/.github/skills/sf-discovery/SKILL.md +405 -0
- package/templates/.github/skills/sf-extract/SKILL.md +284 -0
- package/templates/.github/skills/sf-feature/SKILL.md +130 -0
- package/templates/.github/skills/sf-merge-delta/SKILL.md +142 -0
- package/templates/.github/skills/sf-pausar/SKILL.md +120 -0
- package/templates/.github/skills/sf-plan/SKILL.md +178 -0
- package/templates/.github/skills/sf-setup-projeto/SKILL.md +123 -0
- package/templates/docs/Desenvolvimento/.gitkeep +0 -0
- package/templates/docs/Desenvolvimento/rules.md +229 -0
- package/templates/docs/Estrutura/.gitkeep +0 -0
- package/templates/docs/PM/.gitkeep +0 -0
- package/templates/docs/PM/setup_projeto/.gitkeep +0 -0
- package/templates/docs/_templates/estrutura/ADRs.template.md +91 -0
- package/templates/docs/_templates/estrutura/API.template.md +144 -0
- package/templates/docs/_templates/estrutura/Arquitetura.template.md +82 -0
- package/templates/docs/_templates/estrutura/Infraestrutura.template.md +104 -0
- package/templates/docs/_templates/estrutura/Modelo_Dados.template.md +99 -0
- package/templates/docs/_templates/estrutura/Seguranca.template.md +138 -0
- package/templates/docs/_templates/estrutura/Stack.template.md +78 -0
- package/templates/docs/_templates/estrutura/Visao.template.md +82 -0
- package/templates/docs/_templates/feature/PRD.template.md +256 -0
- package/templates/docs/_templates/feature/Progresso.template.md +136 -0
- package/templates/docs/_templates/feature/TRD.template.md +200 -0
- package/templates/docs/_templates/feature/backlog-extraido.template.md +154 -0
- package/templates/docs/_templates/feature/context.template.md +42 -0
- package/templates/docs/_templates/feature/extract-log.template.md +38 -0
- package/templates/docs/_templates/feature/projetos.template.yaml +73 -0
- package/templates/docs/_templates/feature/sdd.template.md +372 -0
- package/templates/docs/_templates/feature/tasks.template.md +115 -0
- package/templates/docs/_templates/global/progresso_global.template.md +57 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sf-dev
|
|
3
|
+
description: |
|
|
4
|
+
Desenvolvimento. Implementa tasks com loop implement/test/review.
|
|
5
|
+
Trigger: /sf-dev
|
|
6
|
+
author: GustavoMaritan
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
date: 2026-04-08
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill: /sf-dev
|
|
12
|
+
|
|
13
|
+
> Skill atômica de execução. Implementa tasks em loop (implement → test → fix → review)
|
|
14
|
+
> até quality gate aprovado, depois valida integração e E2E por feature.
|
|
15
|
+
|
|
16
|
+
## Tipo
|
|
17
|
+
Atômica — Multi-agent (agentes especializados por área)
|
|
18
|
+
|
|
19
|
+
## Uso
|
|
20
|
+
```
|
|
21
|
+
/sf-dev <nome>
|
|
22
|
+
/sf-dev <nome> --area banco
|
|
23
|
+
/sf-dev <nome> --task BACK-003
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Agentes
|
|
29
|
+
|
|
30
|
+
Cada área tem seu agente especializado. Perfis completos em `.github/agents/`.
|
|
31
|
+
|
|
32
|
+
| Área | Agente | Perfil | Modelo |
|
|
33
|
+
|------|--------|--------|--------|
|
|
34
|
+
| BANCO | DB Coder | `agents/db-coder.md` | Sonnet (S/M) / Opus (L) |
|
|
35
|
+
| BACK | Backend Coder | `agents/backend-coder.md` | Sonnet (S/M) / Opus (L) |
|
|
36
|
+
| FRONT | Frontend Coder | `agents/frontend-coder.md` | Sonnet (S/M) / Opus (L) |
|
|
37
|
+
| INFRA | Infra Coder | `agents/infra-coder.md` | Sonnet (S/M) / Opus (L) |
|
|
38
|
+
| DOC | Doc Writer | `agents/doc-writer.md` | Sonnet |
|
|
39
|
+
| — | Reviewer | `agents/reviewer.md` | Sonnet |
|
|
40
|
+
| — | Security Reviewer | `agents/security-reviewer.md` | Opus |
|
|
41
|
+
|
|
42
|
+
O agente é selecionado pelo prefixo da task: `BANCO-*` → DB Coder, `BACK-*` → Backend Coder, etc.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Pré-condições
|
|
47
|
+
|
|
48
|
+
| # | Validação | Se falhar |
|
|
49
|
+
|---|-----------|-----------|
|
|
50
|
+
| 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-dev feat_cadastro_cliente" |
|
|
51
|
+
| 2 | `.context.md` existe com status `plan_done` ou `dev_in_progress` | Se anterior → "Execute /sf-plan {nome} primeiro" |
|
|
52
|
+
| 3 | `*_tasks.md` e `Progresso.md` existem | Parar → "Tasks não encontradas. Execute /sf-plan {nome}" |
|
|
53
|
+
| 4 | `sdd.md` existe | Parar → "SDD não encontrado" |
|
|
54
|
+
| 5 | `docs/Desenvolvimento/rules.md` existe | Parar → "rules.md não encontrado" |
|
|
55
|
+
| 6 | `projetos.yaml` existe na raiz | Parar → "Execute /sf-design primeiro (gera projetos.yaml)" |
|
|
56
|
+
| 7 | Infra local rodando (`docker compose ps` → containers healthy) | Parar → "Suba a infra primeiro: `docker compose up -d` e aguarde healthy" |
|
|
57
|
+
|
|
58
|
+
> **Nota**: A validação #7 verifica se os containers de infra (banco, redis, etc.) estão rodando.
|
|
59
|
+
> Não valida apps (api, web) — essas são iniciadas durante o /dev.
|
|
60
|
+
|
|
61
|
+
## Modalidades
|
|
62
|
+
|
|
63
|
+
| Modo | Comando | Comportamento |
|
|
64
|
+
|------|---------|---------------|
|
|
65
|
+
| **Por fase** | `/sf-dev feat_nome --fase 1` | Todas tasks da fase de entrega (RECOMENDADO) |
|
|
66
|
+
| **Completo** | `/sf-dev feat_nome` | Executa todas tasks pendentes, respeitando ordem de fases |
|
|
67
|
+
| **Por área** | `/sf-dev feat_nome --area banco` | Só tasks da área especificada |
|
|
68
|
+
| **Task individual** | `/sf-dev feat_nome --task BACK-003` | Só a task especificada (valida dependências) |
|
|
69
|
+
|
|
70
|
+
> **Recomendado**: Usar `--fase N` para desenvolvimento incremental. Cada fase gera 1 PR.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Fluxo de Execução
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
/sf-dev feat_nome
|
|
78
|
+
│
|
|
79
|
+
│ ╔═══════════════════════════════════════════════╗
|
|
80
|
+
│ ║ LOOP POR TASK ║
|
|
81
|
+
│ ║ ║
|
|
82
|
+
│ ║ 1. Selecionar agente pela área (BACK-* etc) ║
|
|
83
|
+
│ ║ 2. Agente implementa código + testes unit ║
|
|
84
|
+
│ ║ 3. Rodar testes unit ║
|
|
85
|
+
│ ║ → Falhou? Agente corrige → volta pro 3 ║
|
|
86
|
+
│ ║ 4. Rodar lint ║
|
|
87
|
+
│ ║ → Falhou? Agente corrige → volta pro 4 ║
|
|
88
|
+
│ ║ 5. Commit: tipo(TASK-ID): descrição ║
|
|
89
|
+
│ ║ 6. Reviewer valida quality gate ║
|
|
90
|
+
│ ║ → Reprovado? Agente corrige → volta pro 3 ║
|
|
91
|
+
│ ║ → 3 reprovações? Escalar pro usuário ║
|
|
92
|
+
│ ║ 7. Marcar task concluída ✅ ║
|
|
93
|
+
│ ║ 8. Atualizar Progresso.md ║
|
|
94
|
+
│ ╚═══════════════════════════════════════════════╝
|
|
95
|
+
│ ↓ (todas tasks da fase concluídas)
|
|
96
|
+
│ ╔═══════════════════════════════════════════════╗
|
|
97
|
+
│ ║ VALIDAÇÃO POR FASE ║
|
|
98
|
+
│ ║ ║
|
|
99
|
+
│ ║ 1. Rodar testes integration da área/fase ║
|
|
100
|
+
│ ║ → Falhou? Criar fix inline → loop ║
|
|
101
|
+
│ ║ 2. Fase aprovada → próxima fase ║
|
|
102
|
+
│ ╚═══════════════════════════════════════════════╝
|
|
103
|
+
│ ↓ (todas fases/áreas concluídas)
|
|
104
|
+
│ ╔═══════════════════════════════════════════════╗
|
|
105
|
+
│ ║ SECURITY REVIEW (cross-area) ║
|
|
106
|
+
│ ║ ║
|
|
107
|
+
│ ║ 1. Security Reviewer audita todo código ║
|
|
108
|
+
│ ║ → CRÍTICO/ALTO? Coder corrige → re-audit ║
|
|
109
|
+
│ ║ → 2 falhas? Escalar pro usuário ║
|
|
110
|
+
│ ║ 2. Aprovado → prosseguir para E2E ║
|
|
111
|
+
│ ╚═══════════════════════════════════════════════╝
|
|
112
|
+
│ ↓ (security aprovado)
|
|
113
|
+
│ ╔═══════════════════════════════════════════════╗
|
|
114
|
+
│ ║ VALIDAÇÃO POR FEATURE ║
|
|
115
|
+
│ ║ ║
|
|
116
|
+
│ ║ 1. Rodar testes E2E (SDD §9.3 CAs) ║
|
|
117
|
+
│ ║ → Falhou? Identificar task → fix → loop ║
|
|
118
|
+
│ ║ 2. Todos CAs passam? → dev_done ✅ ║
|
|
119
|
+
│ ╚═══════════════════════════════════════════════╝
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Passos detalhados
|
|
125
|
+
|
|
126
|
+
### 1. Carregar contexto
|
|
127
|
+
- Ler `.context.md` → validar status
|
|
128
|
+
- Ler `projetos.yaml` → mapeamento área → repo → path local
|
|
129
|
+
- Ler `Progresso.md` → ordem de execução e estado atual
|
|
130
|
+
- Ler `rules.md` → convenções
|
|
131
|
+
- Ler `sdd.md` → fonte de verdade (§9 para estratégia de testes)
|
|
132
|
+
- Carregar perfil do agente correspondente à área
|
|
133
|
+
- Validar que repos em `projetos/` existem (se não, INFRA-001 ainda não rodou)
|
|
134
|
+
|
|
135
|
+
### 2. Preparar repos (multi-repo)
|
|
136
|
+
|
|
137
|
+
#### 2a. Verificar working tree (OBRIGATÓRIO)
|
|
138
|
+
Em cada repo que será afetado:
|
|
139
|
+
- `git status` — verificar se há mudanças pendentes
|
|
140
|
+
- Se working tree sujo → sugerir commit ou stash antes de prosseguir
|
|
141
|
+
- NUNCA começar a codar com working tree sujo
|
|
142
|
+
|
|
143
|
+
#### 2b. INFRA-001 (setup — primeira execução)
|
|
144
|
+
No setup, INFRA-001 é responsável por criar/clonar os repos:
|
|
145
|
+
- Ler `projetos.yaml` → para cada repo:
|
|
146
|
+
- Se `existing: true` → `git clone {repo} projetos/{name}`
|
|
147
|
+
- Se `existing: false` → criar repo no GitHub (`gh repo create {repo} --private`) + clone local
|
|
148
|
+
- Criar estrutura base em cada repo (conforme stack: .NET → `dotnet new`, React → `create-react-app`, etc.)
|
|
149
|
+
- Criar `projetos/.gitkeep` na raiz (pasta existe mas conteúdo é ignorado)
|
|
150
|
+
|
|
151
|
+
#### 2c. Branch por fase (NUNCA na main)
|
|
152
|
+
Para cada repo que será afetado por esta fase:
|
|
153
|
+
- `cd projetos/{repo_path}`
|
|
154
|
+
- `git checkout main && git pull origin main` (garantir main atualizada)
|
|
155
|
+
- `git checkout -b feature/{nome}_fase{N}` (se branch não existe)
|
|
156
|
+
- Se branch já existe → `git checkout feature/{nome}_fase{N}`
|
|
157
|
+
- NUNCA desenvolver direto na main
|
|
158
|
+
|
|
159
|
+
#### 2c. Resolver próxima task
|
|
160
|
+
- Filtrar tasks pendentes (`- [ ]`) conforme modalidade
|
|
161
|
+
- Ler campo `Repo:` da task → identificar em qual repo trabalhar
|
|
162
|
+
- Validar dependências: todas tasks em `Depende:` devem estar `- [x]`
|
|
163
|
+
- Se dependência pendente → listar o que falta
|
|
164
|
+
|
|
165
|
+
### 3. Loop por task
|
|
166
|
+
|
|
167
|
+
#### 3a. Implementar
|
|
168
|
+
- Ler campo `Repo:` da task → navegar para `projetos/{repo_path}/`
|
|
169
|
+
- Selecionar agente pela área da task (BACK-* → Backend Coder)
|
|
170
|
+
- Selecionar modelo pelo tamanho (S/M → Sonnet, L → Opus)
|
|
171
|
+
- Input para o agente:
|
|
172
|
+
- Task completa (ID, título, arquivos, SDD ref, dependências)
|
|
173
|
+
- Seções do SDD referenciadas (apenas as seções necessárias)
|
|
174
|
+
- Perfil do agente (`.github/agents/*.md`)
|
|
175
|
+
- `rules.md`
|
|
176
|
+
- **Working directory**: `projetos/{repo_path}/` (caminhos de arquivo são relativos ao repo)
|
|
177
|
+
- Agente implementa código **E testes unit** na mesma task
|
|
178
|
+
|
|
179
|
+
#### 3b. Test loop
|
|
180
|
+
```
|
|
181
|
+
Rodar testes unit → passou? → continuar
|
|
182
|
+
→ falhou? → agente analisa erro → corrige → rodar de novo
|
|
183
|
+
→ 5 falhas seguidas? → parar, reportar ao usuário
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
#### 3c. Lint
|
|
187
|
+
```
|
|
188
|
+
Rodar lint → passou? → continuar
|
|
189
|
+
→ falhou? → agente corrige → rodar de novo
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
#### 3d. Commit (no repo do serviço)
|
|
193
|
+
- Working directory: `projetos/{repo_path}/`
|
|
194
|
+
- `git add` + `git commit -m "tipo(TASK-ID): descrição curta"`
|
|
195
|
+
- Commit acontece no repo do serviço, NÃO no projeto-base
|
|
196
|
+
- Corpo opcional se Senior Coder tomou decisão (mini-ADR)
|
|
197
|
+
|
|
198
|
+
#### 3e. Review
|
|
199
|
+
- Spawn Reviewer (Sonnet) com: código + testes + quality gate checklist
|
|
200
|
+
- Se APROVADO → marcar task `- [x]`, atualizar Progresso.md
|
|
201
|
+
- Se REPROVADO → agente recebe problemas, corrige, volta pro 3b
|
|
202
|
+
- Limite: **3 reprovações** → escalar pro usuário
|
|
203
|
+
|
|
204
|
+
### 4. Validação por fase
|
|
205
|
+
Ao concluir todas tasks de uma fase:
|
|
206
|
+
- Rodar testes integration da área (SDD §9.1)
|
|
207
|
+
- Se falhou → identificar causa, corrigir no código da task afetada, recommit
|
|
208
|
+
- Se passou → avançar pra próxima fase
|
|
209
|
+
|
|
210
|
+
### 5. Security Review (cross-area)
|
|
211
|
+
Ao concluir todas tasks de todas áreas, ANTES dos testes E2E:
|
|
212
|
+
- Spawn Security Reviewer (Opus) com: todo código produzido + SDD §5 + Seguranca.md
|
|
213
|
+
- Audita 6 categorias: Auth, AuthZ, Injeção, Dados Sensíveis, Headers, Banco
|
|
214
|
+
- Se findings CRÍTICO ou ALTO:
|
|
215
|
+
- Identificar área responsável (BACK, FRONT, BANCO, INFRA)
|
|
216
|
+
- Coder da área corrige → recommit
|
|
217
|
+
- Security Reviewer reavalia apenas os findings
|
|
218
|
+
- Se aprovado → prosseguir para E2E
|
|
219
|
+
- Limite: **2 tentativas** → escalar pro usuário
|
|
220
|
+
|
|
221
|
+
### 6. Validação por feature
|
|
222
|
+
Ao concluir security review com aprovação:
|
|
223
|
+
- Rodar testes E2E (SDD §9.3 — cada CA deve ter teste correspondente)
|
|
224
|
+
- Se falhou:
|
|
225
|
+
- Identificar qual CA falhou
|
|
226
|
+
- Mapear pra task/área responsável
|
|
227
|
+
- Criar fix inline (não cria nova task)
|
|
228
|
+
- Rodar E2E de novo
|
|
229
|
+
- Se passou → dev_done
|
|
230
|
+
|
|
231
|
+
### 7. Finalizar fase — PR + ambiente ON
|
|
232
|
+
Ao concluir todos testes da fase:
|
|
233
|
+
|
|
234
|
+
1. **Atualizar Progresso.md** com status da fase
|
|
235
|
+
2. **Push da branch** em cada repo afetado:
|
|
236
|
+
```bash
|
|
237
|
+
cd projetos/{repo_path}
|
|
238
|
+
git push origin feature/{nome}_fase{N}
|
|
239
|
+
```
|
|
240
|
+
3. **Abrir PR** em cada repo com template detalhado (ver `rules.md` → Template de PR):
|
|
241
|
+
- Tasks concluídas, testes passando, como testar manualmente
|
|
242
|
+
- Usar `gh pr create`
|
|
243
|
+
4. **Deixar ambiente local rodando**:
|
|
244
|
+
- `docker compose up -d` (infra)
|
|
245
|
+
- `dotnet run` / `npm run dev` (apps)
|
|
246
|
+
- Informar URLs ao usuário
|
|
247
|
+
5. **PARAR e aguardar** — o usuário testa manualmente e aprova o PR
|
|
248
|
+
- O agente NUNCA faz merge — merge é manual pelo usuário
|
|
249
|
+
- Se o usuário pedir ajustes → corrigir na mesma branch, push, atualizar PR
|
|
250
|
+
|
|
251
|
+
### 8. Após merge (quando usuário confirmar)
|
|
252
|
+
```bash
|
|
253
|
+
# Em cada repo afetado:
|
|
254
|
+
cd projetos/{repo_path}
|
|
255
|
+
git checkout main
|
|
256
|
+
git pull origin main
|
|
257
|
+
git branch -d feature/{nome}_fase{N}
|
|
258
|
+
git remote prune origin
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### 9. Atualizar `.context.md`
|
|
262
|
+
```yaml
|
|
263
|
+
status: "dev_in_progress" # durante execução
|
|
264
|
+
# ou
|
|
265
|
+
status: "dev_done" # todas fases + integration + security + E2E passaram
|
|
266
|
+
ultima_skill: "/sf-dev"
|
|
267
|
+
atualizado_em: "{{ISO_DATETIME}}"
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## Limites de retry
|
|
273
|
+
|
|
274
|
+
| Nível | Limite | Ação ao exceder |
|
|
275
|
+
|-------|--------|-----------------|
|
|
276
|
+
| Test loop (unit) | 5 tentativas por task | Parar, reportar erro persistente |
|
|
277
|
+
| Review loop | 3 reprovações por task | Parar, escalar pro usuário |
|
|
278
|
+
| Integration fix | 3 tentativas por fase | Parar, reportar ao usuário |
|
|
279
|
+
| Security fix | 2 tentativas por feature | Parar, escalar findings não resolvidos |
|
|
280
|
+
| E2E fix | 3 tentativas por feature | Parar, reportar ao usuário |
|
|
281
|
+
|
|
282
|
+
Mensagem de escalação:
|
|
283
|
+
```
|
|
284
|
+
⚠️ Task {ID} não passou após {N} tentativas.
|
|
285
|
+
Problemas persistentes:
|
|
286
|
+
1. ...
|
|
287
|
+
2. ...
|
|
288
|
+
Ação necessária: revisar SDD ou intervir manualmente.
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Saídas
|
|
294
|
+
|
|
295
|
+
| Saída | Descrição |
|
|
296
|
+
|-------|-----------|
|
|
297
|
+
| Código implementado | Em `projetos/{repo}/` — arquivos criados/modificados conforme tasks |
|
|
298
|
+
| Testes | Unit + integration + E2E nos repos correspondentes |
|
|
299
|
+
| Commits | 1 commit por task no repo do serviço: `tipo(TASK-ID): descrição` |
|
|
300
|
+
| Branches | `feature/{nome}` criado em cada repo afetado |
|
|
301
|
+
| `*_tasks.md` | Tasks marcadas como concluídas (no projeto-base) |
|
|
302
|
+
| `Progresso.md` | Atualizado com status real (no projeto-base) |
|
|
303
|
+
| `progresso.md` (global) | Atualizado (no projeto-base) |
|
|
304
|
+
| `.context.md` | Status atualizado (no projeto-base) |
|
|
305
|
+
|
|
306
|
+
## Pós-condições
|
|
307
|
+
- Todas tasks concluídas = status `dev_done`
|
|
308
|
+
- Quality gate aprovado em cada task
|
|
309
|
+
- Integration tests passam por fase
|
|
310
|
+
- Security Review aprovado (zero findings CRÍTICO/ALTO)
|
|
311
|
+
- E2E tests passam por feature (todos CAs do SDD §9.3)
|
|
312
|
+
- Pronto para `/merge-delta` (se feature) ou conclusão (se setup)
|
|
313
|
+
|
|
314
|
+
## Erros
|
|
315
|
+
|
|
316
|
+
| Erro | Ação |
|
|
317
|
+
|------|------|
|
|
318
|
+
| Nome não informado | Parar, mostrar exemplo |
|
|
319
|
+
| Status anterior a plan_done | Parar, sugerir skill correspondente |
|
|
320
|
+
| Dependência não concluída | Parar, listar dependências pendentes |
|
|
321
|
+
| Test loop excedeu limite | Parar, reportar erro + stack trace |
|
|
322
|
+
| Review excedeu 3 tentativas | Parar, escalar com lista de problemas |
|
|
323
|
+
| Integration/E2E persistente | Parar, reportar CAs que falharam |
|
|
324
|
+
| SDD ambíguo | Parar, reportar ambiguidade |
|
|
325
|
+
| --task com ID inexistente | Parar, listar tasks disponíveis |
|
|
326
|
+
| --area com área inexistente | Parar, listar áreas disponíveis |
|