spec-first-copilot 0.5.0-beta.0 → 0.5.0-beta.2

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.
@@ -1,130 +1,130 @@
1
- ---
2
- name: sf-feature
3
- description: |
4
- Pipeline de feature. Cria contexto PRD, chama /sf-extract, para no checkpoint.
5
- Trigger: /sf-feature
6
- author: GustavoMaritan
7
- version: 1.0.0
8
- date: 2026-04-08
9
- ---
10
-
11
- # Skill: /sf-feature
12
-
13
- > Orquestrador de feature. Cria contexto PRD, chama `/extract` e para no checkpoint de aprovação.
14
-
15
- ## Tipo
16
- Orquestrador (primeira etapa do pipeline de feature)
17
-
18
- ## Uso
19
- ```
20
- /sf-feature <nome>
21
- ```
22
- Exemplo: `/sf-feature feat_cadastro_cliente`
23
-
24
- ### Convenção de nomes
25
- - Features: `feat_nome_descritivo`
26
- - Bugs: `bug_nome_descritivo`
27
- - Tasks técnicas: `task_nome_descritivo`
28
-
29
- ## Pré-condições
30
-
31
- | # | Validação | Se falhar |
32
- |---|-----------|-----------|
33
- | 1 | Argumento `nome` foi informado | Parar → "Informe o nome da feature. Ex: /sf-feature feat_cadastro_cliente" |
34
- | 2 | `workspace/Input/{nome}/` existe | Parar → "Crie a pasta workspace/Input/{nome}/ e adicione seus insumos" |
35
- | 3 | Pasta contém pelo menos 1 arquivo (ignorar .gitkeep) | Parar → "Adicione insumos na pasta (aceitos: .md, .txt, .sql, .xml, .html, .json, .csv, .png, .jpg, .pdf — qualquer formato)" |
36
- | 4 | `docs/` está populado (setup já executado) | Parar → "Execute /sf-setup-projeto antes de criar features" |
37
- | 5 | `.context.md` não existe ou status é `not_started` | Se existe com status avançado → "Feature já em andamento (status: {status}). Para re-extrair, use /sf-extract {nome}" |
38
-
39
- ## Passos
40
-
41
- ### 1. Carregar contexto do projeto
42
- Ler `docs/` para entender a arquitetura, stack, modelo de dados e convenções existentes. Esse contexto será passado ao `/extract`.
43
-
44
- ### 2. Criar estrutura
45
- ```
46
- workspace/Output/{nome}/
47
- ├── .context.md ← criado agora
48
- └── (PRD.md será criado pelo /extract)
49
- ```
50
-
51
- ### 3. Criar `.context.md`
52
- ```yaml
53
- ---
54
- nome: "{nome}"
55
- tipo: "feature"
56
- documento: "PRD"
57
- pm_path: "workspace/Input/{nome}/"
58
- status: "not_started"
59
- ultima_skill: "/sf-feature"
60
- atualizado_em: "{{ISO_DATETIME}}"
61
- ---
62
- ```
63
-
64
- ### 4. Sugerir /sf-discovery (RECOMENDADO)
65
-
66
- Antes de extrair, perguntar ao usuário:
67
- ```
68
- 📋 Insumos encontrados em workspace/Input/{nome}/.
69
-
70
- Recomendo rodar /sf-discovery antes da extração para:
71
- - Análise profunda dos insumos
72
- - Identificar gaps e contradições
73
- - Validar entendimento com você
74
-
75
- Quer rodar /sf-discovery workspace/Input/{nome}/ agora? (s/n)
76
- Se SIM → rodar discovery, salvar discovery.md, depois continuar com extract
77
- Se NÃO → pular direto para /sf-extract
78
- ```
79
-
80
- Se o usuário aceitar:
81
- - Rodar `/sf-discovery workspace/Input/{nome}/`
82
- - Aguardar conclusão — discovery.md salvo em `workspace/Output/{nome}/`
83
- - Continuar para o passo 5
84
-
85
- ### 5. Chamar `/sf-extract {nome}`
86
- O `/sf-extract` lê os insumos + discovery.md (se existir), gera o PRD e atualiza status para `extract_done`.
87
-
88
- ### 6. CHECKPOINT — Parar e informar o usuário
89
- Mensagem ao usuário:
90
- ```
91
- ✅ PRD gerado em workspace/Output/{nome}/PRD.md
92
-
93
- Revise o documento. Quando estiver satisfeito, execute:
94
- /sf-design {nome}
95
-
96
- Se precisar adicionar mais insumos, coloque na pasta workspace/Input/{nome}/
97
- e execute:
98
- /sf-extract {nome}
99
- ```
100
-
101
- **O orquestrador encerra aqui.** O restante do pipeline é responsabilidade do usuário chamar as skills atômicas na ordem:
102
- 1. `/sf-design {nome}` (pergunta aprovação → gera SDD)
103
- 2. `/sf-plan {nome}` (gera tasks + Progresso)
104
- 3. `/sf-dev {nome}` (executa tasks)
105
- 4. `/sf-merge-delta {nome}` (aplica Delta Specs em docs/)
106
-
107
- ## Saídas diretas desta skill
108
- - `workspace/Output/{nome}/.context.md`
109
- - `workspace/Output/{nome}/PRD.md` (via /extract)
110
- - `workspace/Output/{nome}/.extract-log.md` (via /extract)
111
-
112
- ## Saídas indiretas (skills subsequentes)
113
- - `sdd.md` (via /design)
114
- - `*_tasks.md` + `Progresso.md` (via /plan)
115
- - `docs/` atualizado (via /sf-merge-delta após /dev)
116
-
117
- ## Erros
118
-
119
- | Erro | Ação |
120
- |------|------|
121
- | Nome não informado | Parar, mostrar exemplo de uso |
122
- | workspace/Input/{nome}/ não existe | Parar, instruir criação |
123
- | workspace/Input/{nome}/ vazio | Parar, listar formatos aceitos |
124
- | docs/ não populado | Parar, sugerir /sf-setup-projeto |
125
- | Pipeline já iniciado | Mostrar status atual, sugerir /sf-extract para re-extração ou skill correspondente ao status |
126
-
127
- ## Notas
128
- - Diferente do `/sf-setup-projeto`, pode ser executado **múltiplas vezes** (uma por feature)
129
- - O contexto de `docs/` é carregado para que o `/extract` gere um PRD coerente com a arquitetura existente
130
- - Após `/dev`, o `/merge-delta` atualiza `docs/` com as mudanças da feature
1
+ ---
2
+ name: sf-feature
3
+ description: |
4
+ Pipeline de feature. Cria contexto PRD, chama /sf-extract, para no checkpoint.
5
+ Trigger: /sf-feature
6
+ author: GustavoMaritan
7
+ version: 1.0.0
8
+ date: 2026-04-08
9
+ ---
10
+
11
+ # Skill: /sf-feature
12
+
13
+ > Orquestrador de feature. Cria contexto PRD, chama `/extract` e para no checkpoint de aprovação.
14
+
15
+ ## Tipo
16
+ Orquestrador (primeira etapa do pipeline de feature)
17
+
18
+ ## Uso
19
+ ```
20
+ /sf-feature <nome>
21
+ ```
22
+ Exemplo: `/sf-feature feat_cadastro_cliente`
23
+
24
+ ### Convenção de nomes
25
+ - Features: `feat_nome_descritivo`
26
+ - Bugs: `bug_nome_descritivo`
27
+ - Tasks técnicas: `task_nome_descritivo`
28
+
29
+ ## Pré-condições
30
+
31
+ | # | Validação | Se falhar |
32
+ |---|-----------|-----------|
33
+ | 1 | Argumento `nome` foi informado | Parar → "Informe o nome da feature. Ex: /sf-feature feat_cadastro_cliente" |
34
+ | 2 | `workspace/Input/{nome}/` existe | Parar → "Crie a pasta workspace/Input/{nome}/ e adicione seus insumos" |
35
+ | 3 | Pasta contém pelo menos 1 arquivo (ignorar .gitkeep) | Parar → "Adicione insumos na pasta (aceitos: .md, .txt, .sql, .xml, .html, .json, .csv, .png, .jpg, .pdf — qualquer formato)" |
36
+ | 4 | `docs/` está populado (setup já executado) | Parar → "Execute /sf-setup-projeto antes de criar features" |
37
+ | 5 | `.context.md` não existe ou status é `not_started` | Se existe com status avançado → "Feature já em andamento (status: {status}). Para re-extrair, use /sf-extract {nome}" |
38
+
39
+ ## Passos
40
+
41
+ ### 1. Carregar contexto do projeto
42
+ Ler `docs/` para entender a arquitetura, stack, modelo de dados e convenções existentes. Esse contexto será passado ao `/extract`.
43
+
44
+ ### 2. Criar estrutura
45
+ ```
46
+ workspace/Output/{nome}/
47
+ ├── .context.md ← criado agora
48
+ └── (PRD.md será criado pelo /extract)
49
+ ```
50
+
51
+ ### 3. Criar `.context.md`
52
+ ```yaml
53
+ ---
54
+ nome: "{nome}"
55
+ tipo: "feature"
56
+ documento: "PRD"
57
+ pm_path: "workspace/Input/{nome}/"
58
+ status: "not_started"
59
+ ultima_skill: "/sf-feature"
60
+ atualizado_em: "{{ISO_DATETIME}}"
61
+ ---
62
+ ```
63
+
64
+ ### 4. Sugerir /sf-discovery (RECOMENDADO)
65
+
66
+ Antes de extrair, perguntar ao usuário:
67
+ ```
68
+ 📋 Insumos encontrados em workspace/Input/{nome}/.
69
+
70
+ Recomendo rodar /sf-discovery antes da extração para:
71
+ - Análise profunda dos insumos
72
+ - Identificar gaps e contradições
73
+ - Validar entendimento com você
74
+
75
+ Quer rodar /sf-discovery workspace/Input/{nome}/ agora? (s/n)
76
+ Se SIM → rodar discovery, salvar discovery.md, depois continuar com extract
77
+ Se NÃO → pular direto para /sf-extract
78
+ ```
79
+
80
+ Se o usuário aceitar:
81
+ - Rodar `/sf-discovery workspace/Input/{nome}/`
82
+ - Aguardar conclusão — discovery.md salvo em `workspace/Output/{nome}/`
83
+ - Continuar para o passo 5
84
+
85
+ ### 5. Chamar `/sf-extract {nome}`
86
+ O `/sf-extract` lê os insumos + discovery.md (se existir), gera o PRD e atualiza status para `extract_done`.
87
+
88
+ ### 6. CHECKPOINT — Parar e informar o usuário
89
+ Mensagem ao usuário:
90
+ ```
91
+ ✅ PRD gerado em workspace/Output/{nome}/PRD.md
92
+
93
+ Revise o documento. Quando estiver satisfeito, execute:
94
+ /sf-design {nome}
95
+
96
+ Se precisar adicionar mais insumos, coloque na pasta workspace/Input/{nome}/
97
+ e execute:
98
+ /sf-extract {nome}
99
+ ```
100
+
101
+ **O orquestrador encerra aqui.** O restante do pipeline é responsabilidade do usuário chamar as skills atômicas na ordem:
102
+ 1. `/sf-design {nome}` (pergunta aprovação → gera SDD)
103
+ 2. `/sf-plan {nome}` (gera tasks + Progresso)
104
+ 3. `/sf-dev {nome}` (executa tasks)
105
+ 4. `/sf-merge-delta {nome}` (aplica Delta Specs em docs/)
106
+
107
+ ## Saídas diretas desta skill
108
+ - `workspace/Output/{nome}/.context.md`
109
+ - `workspace/Output/{nome}/PRD.md` (via /extract)
110
+ - `workspace/Output/{nome}/.extract-log.md` (via /extract)
111
+
112
+ ## Saídas indiretas (skills subsequentes)
113
+ - `sdd.md` (via /design)
114
+ - `specs/{nome}/tasks.md` + `Progresso.md` (via /plan)
115
+ - `docs/` atualizado (via /sf-merge-delta após /dev)
116
+
117
+ ## Erros
118
+
119
+ | Erro | Ação |
120
+ |------|------|
121
+ | Nome não informado | Parar, mostrar exemplo de uso |
122
+ | workspace/Input/{nome}/ não existe | Parar, instruir criação |
123
+ | workspace/Input/{nome}/ vazio | Parar, listar formatos aceitos |
124
+ | docs/ não populado | Parar, sugerir /sf-setup-projeto |
125
+ | Pipeline já iniciado | Mostrar status atual, sugerir /sf-extract para re-extração ou skill correspondente ao status |
126
+
127
+ ## Notas
128
+ - Diferente do `/sf-setup-projeto`, pode ser executado **múltiplas vezes** (uma por feature)
129
+ - O contexto de `docs/` é carregado para que o `/extract` gere um PRD coerente com a arquitetura existente
130
+ - Após `/dev`, o `/merge-delta` atualiza `docs/` com as mudanças da feature
@@ -1,178 +1,180 @@
1
- ---
2
- name: sf-plan
3
- description: |
4
- Planejamento. Gera tasks por fase de entrega e área.
5
- Trigger: /sf-plan
6
- author: GustavoMaritan
7
- version: 1.0.0
8
- date: 2026-04-08
9
- ---
10
-
11
- # Skill: /sf-plan
12
-
13
- > Skill atômica de planejamento. Lê SDD e gera tasks por área + Progresso.
14
-
15
- ## Tipo
16
- Atômica — Single-agent
17
-
18
- ## Uso
19
- ```
20
- /sf-plan <nome>
21
- ```
22
- Exemplo: `/sf-plan feat_cadastro_cliente`
23
-
24
- ---
25
-
26
- ## Agente
27
-
28
- | Campo | Valor |
29
- |-------|-------|
30
- | **Papel** | Planejador técnico — decompõe especificação em tasks atômicas, ordenadas e com dependências explícitas |
31
- | **Modelo** | Opus |
32
- | **Comportamento** | Metódico e exaustivo. Cada task deve ser auto-contida (coder lê SDD §N + task, nada mais). Prioriza ordem de execução correta sobre paralelismo. Nunca cria task sem referência ao SDD. |
33
-
34
- ---
35
-
36
- ## Pré-condições
37
-
38
- | # | Validação | Se falhar |
39
- |---|-----------|-----------|
40
- | 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-plan feat_cadastro_cliente" |
41
- | 2 | `workspace/Output/{nome}/.context.md` existe com status `design_done` | Se anterior → "Execute /sf-design {nome} primeiro". Se posterior → "Tasks já foram geradas (status: {status})" |
42
- | 3 | `sdd.md` existe na pasta | Parar → "SDD não encontrado. Execute /sf-design {nome}" |
43
-
44
- ## Passos
45
-
46
- ### 1. Ler contexto
47
- - Ler `.context.md` → validar status
48
- - Ler `sdd.md` completo
49
- - Ler `projetos.yaml` (manifesto de repos mapeamento área → repo)
50
- - Ler `docs/` (Stack, Arquiteturapara convenções por área)
51
- - Ler `.github/rules.md` (padrões de código, commit, branch)
52
- - Carregar template `.github/templates/feature/tasks.template.md`
53
-
54
- ### 2. Identificar fases de entrega
55
- Ler PRD §11 (Fases de Entrega) — cada fase vira um agrupamento de tasks:
56
- - Fases são sequenciais: Fase 2 depende de Fase 1 concluída
57
- - Cada fase tem entregável e critério de done
58
- - O `/dev` pode rodar por fase: `/sf-dev feat_nome --fase 1`
59
-
60
- ### 3. Identificar áreas afetadas (por fase)
61
- Para cada fase de entrega, mapear seções do SDD para áreas de tasks:
62
-
63
- | Seção do SDD | Área | Condição |
64
- |-------------|------|----------|
65
- | §3 Modelo de dados | BANCO | Se há entidades/migrations |
66
- | §5 Endpoints API | BACK | Se há endpoints definidos |
67
- | §6 Componentes e telas | FRONT | Se há UI especificada |
68
- | §8 Integrações externas | INFRA | Se há infra/serviços externos |
69
- | Outras | MOBILE, DEVOPS, etc. | Conforme necessidade do SDD |
70
-
71
- > **Nota**: Área DOC NÃO existe mais no setup. docs/ é gerado pelo /sf-design (passo 3).
72
- > DOC aparece em features se houver necessidade explícita de documentação adicional.
73
-
74
- Áreas são **dinâmicas** — só cria o que o SDD exige. Não criar área vazia.
75
-
76
- **Área INFRA obrigatória no setup:**
77
- Sempre gerar estas tasks no setup (antes de qualquer código):
78
- ```
79
- - [ ] INFRA-001: Validar e configurar ambiente local [M]
80
- (detectar OS, instalar Docker/.NET/Node, verificar portas)
81
- - [ ] INFRA-002: Criar docker-compose.yml + Dockerfiles [M]
82
- - [ ] INFRA-003: Hello world subir stack completa e validar [M]
83
- (docker compose up, migrations, health check, frontend carrega)
84
- ```
85
- INFRA-001 é a PRIMEIRA task executada no /sf-dev do setup (antes de BANCO, BACK, FRONT).
86
- INFRA-003 é a ÚLTIMA task (após tudo, como validação final).
87
- Setup é `done` quando INFRA-003 passa.
88
-
89
- ### 4. Gerar tasks por fase × área
90
- Para cada área identificada, gerar `{area}_tasks.md`.
91
- Tasks são agrupadas por **fase de entrega** (do PRD §11), não só por fase técnica.
92
-
93
- **Estrutura de cada task:**
94
- ```markdown
95
- - [ ] **AREA-NNN**: Título descritivo [Tamanho]
96
- - Fase: {{N}} — {{Nome da fase de entrega}}
97
- - Repo: `{{nome_repo}}` (de projetos.yaml)
98
- - Arquivos: `caminho/do/arquivo.ext` (relativo à raiz do repo)
99
- - SDD: §N.N — Referência específica
100
- - Depende: AREA-NNN (ouse não depende)
101
- ```
102
-
103
- **Regras de decomposição:**
104
- 1. Cada task é **atômica** — implementável sem consultar nada além de SDD §N + task
105
- 2. **Repo obrigatório** — consultar `projetos.yaml` para mapear área → repo. Caminhos de arquivo são relativos à raiz do repo
106
- 3. Tamanhos realistas: **S** (<30min), **M** (30min-2h), **L** (2h+)
107
- 4. Se uma task é L, avaliar se pode ser quebrada em M+S
108
- 5. IDs sequenciais por área: BANCO-001, BANCO-002, BACK-001, BACK-002
109
- 6. IDs nunca reutilizados se uma task for removida, o ID é aposentado
110
- 7. Dependências explícitas inclusive cross-area (FRONT-004 depende BACK-003)
111
- 8. Prioridades por fase: **P1** (bloqueia outros), **P2** (importante), **P3** (nice-to-have)
112
-
113
- **Organização em fases (sequenciais dentro da área):**
114
-
115
- | Área | Fases típicas (adaptar ao SDD) |
116
- |------|-------------------------------|
117
- | BANCO | Schema/Migrations → Índices/Constraints → Seeds |
118
- | BACK | Setup/ConfigDTOs/ValidaçõesRepository/Service → Controller → Testes |
119
- | FRONT | Setup/Rotas Componentes base Telas Integração API → Polish/UX |
120
- | INFRA | Provisioning → Config → Deploy → Monitoramento |
121
- | DOC | Gerar docs/ a partir do TRD |
122
-
123
- ### 5. Gerar `Progresso.md`
124
- Usando template `.github/templates/feature/Progresso.template.md`:
125
-
126
- - Resumo por Área × Fase com contagem de tasks
127
- - Status por fase: ⬜ pendente | 🔄 em andamento | ✅ concluída
128
- - **Ordem de execução** com paralelismos:
129
- ```
130
- 1. BANCO Fase 1 (Schema) — primeiro sempre
131
- 2. BANCO Fase 2 + BACK Fase 1 — podem paralelizar
132
- 3. BACK Fase 2-3 — sequencial
133
- 4. FRONT Fase 1-2 — pode iniciar após BACK Fase 3
134
- ...
135
- ```
136
- - Totais por área e geral
137
- - Checklist pós-conclusão (merge delta, atualizar progresso global, napkin)
138
-
139
- ### 6. Atualizar progresso global
140
- Adicionar entrada em `workspace/Output/progresso.md`:
141
-
142
- ```markdown
143
- | {nome} | plan_done | BANCO: 0/N | BACK: 0/N | FRONT: 0/N |
144
- ```
145
-
146
- ### 7. Atualizar `.context.md`
147
- ```yaml
148
- status: "plan_done"
149
- ultima_skill: "/sf-plan"
150
- atualizado_em: "{{ISO_DATETIME}}"
151
- ```
152
-
153
- ---
154
-
155
- ## Saídas
156
-
157
- | Arquivo | Descrição |
158
- |---------|-----------|
159
- | `{area}_tasks.md` | 1 arquivo por área (dinâmico: banco_tasks.md, back_tasks.md, etc.) |
160
- | `Progresso.md` | Dashboard da feature com ordem de execução |
161
- | `progresso.md` (global) | Atualizado com nova feature |
162
- | `.context.md` | Atualizado com status `plan_done` |
163
-
164
- ## Pós-condições
165
- - Cada task é auto-contida com referência ao SDD
166
- - Dependências resolvíveis (não ciclos)
167
- - Ordem de execução definida no Progresso.md
168
- - Feature pronta para `/dev`
169
-
170
- ## Erros
171
-
172
- | Erro | Ação |
173
- |------|------|
174
- | Nome não informado | Parar, mostrar exemplo |
175
- | Status não é design_done | Parar, sugerir skill correspondente |
176
- | SDD não encontrado | Parar, sugerir /sf-design |
177
- | SDD com seções vazias obrigatórias | Parar, listar o que falta — sugerir voltar ao /sf-design |
178
- | Dependência circular detectada | Parar, reportar o ciclo e sugerir reorganização |
1
+ ---
2
+ name: sf-plan
3
+ description: |
4
+ Planejamento. Gera tasks por fase de entrega e área.
5
+ Trigger: /sf-plan
6
+ author: GustavoMaritan
7
+ version: 1.0.0
8
+ date: 2026-04-08
9
+ ---
10
+
11
+ # Skill: /sf-plan
12
+
13
+ > Skill atômica de planejamento. Lê SDD e gera `specs/{nome}/tasks.md` (arquivo único) + `workspace/Output/{nome}/Progresso.md`.
14
+
15
+ ## Tipo
16
+ Atômica — Single-agent
17
+
18
+ ## Uso
19
+ ```
20
+ /sf-plan <nome>
21
+ ```
22
+ Exemplo: `/sf-plan feat_cadastro_cliente`
23
+
24
+ ---
25
+
26
+ ## Agente
27
+
28
+ | Campo | Valor |
29
+ |-------|-------|
30
+ | **Papel** | Planejador técnico — decompõe especificação em tasks atômicas, ordenadas e com dependências explícitas |
31
+ | **Modelo** | Opus |
32
+ | **Comportamento** | Metódico e exaustivo. Cada task deve ser auto-contida (coder lê SDD §N + task, nada mais). Prioriza ordem de execução correta sobre paralelismo. Nunca cria task sem referência ao SDD. |
33
+
34
+ ---
35
+
36
+ ## Pré-condições
37
+
38
+ | # | Validação | Se falhar |
39
+ |---|-----------|-----------|
40
+ | 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-plan feat_cadastro_cliente" |
41
+ | 2 | `workspace/Output/{nome}/.context.md` existe com status `design_done` | Se anterior → "Execute /sf-design {nome} primeiro". Se posterior → "Tasks já foram geradas (status: {status})" |
42
+ | 3 | `sdd.md` existe na pasta | Parar → "SDD não encontrado. Execute /sf-design {nome}" |
43
+
44
+ ## Passos
45
+
46
+ ### 1. Ler contexto
47
+ - Ler `.context.md` → validar status
48
+ - Ler `workspace/Output/{nome}/sdd.md` completo
49
+ - Ler `specs/{nome}/contracts.md` e `scenarios.md` (projeções geradas pelo /sf-design)
50
+ - Ler `projetos.yaml` (manifesto de repos mapeamento área repo)
51
+ - Ler `docs/` (architecture, domain, conventions — para convenções por área)
52
+ - Ler `.github/rules.md` (padrões de código, commit, branch)
53
+ - Carregar template `.github/templates/specs/tasks.template.md`
54
+
55
+ ### 2. Identificar fases de entrega
56
+ Ler PRD §11 (Fases de Entrega) cada fase vira um agrupamento de tasks:
57
+ - Fases são sequenciais: Fase 2 depende de Fase 1 concluída
58
+ - Cada fase tem entregável e critério de done
59
+ - O `/dev` pode rodar por fase: `/sf-dev feat_nome --fase 1`
60
+
61
+ ### 3. Identificar áreas afetadas (por fase)
62
+ Para cada fase de entrega, mapear seções do SDD para áreas de tasks:
63
+
64
+ | Seção do SDD | Área | Condição |
65
+ |-------------|------|----------|
66
+ | §3 Modelo de dados | BANCO | Se há entidades/migrations |
67
+ | §5 Endpoints API | BACK | Se há endpoints definidos |
68
+ | §6 Componentes e telas | FRONT | Se há UI especificada |
69
+ | §8 Integrações externas | INFRA | Se infra/serviços externos |
70
+ | Outras | MOBILE, DEVOPS, etc. | Conforme necessidade do SDD |
71
+
72
+ > **Nota**: Área DOC NÃO existe mais no setup. docs/ é gerado pelo /sf-design (passo 3).
73
+ > DOC só aparece em features se houver necessidade explícita de documentação adicional.
74
+
75
+ Áreas são **dinâmicas** — só cria o que o SDD exige. Não criar área vazia.
76
+
77
+ **Área INFRA obrigatória no setup:**
78
+ Sempre gerar estas tasks no setup (antes de qualquer código):
79
+ ```
80
+ - [ ] INFRA-001: Validar e configurar ambiente local [M]
81
+ (detectar OS, instalar Docker/.NET/Node, verificar portas)
82
+ - [ ] INFRA-002: Criar docker-compose.yml + Dockerfiles [M]
83
+ - [ ] INFRA-003: Hello world subir stack completa e validar [M]
84
+ (docker compose up, migrations, health check, frontend carrega)
85
+ ```
86
+ INFRA-001 é a PRIMEIRA task executada no /sf-dev do setup (antes de BANCO, BACK, FRONT).
87
+ INFRA-003 é a ÚLTIMA task (após tudo, como validação final).
88
+ Setup só é `done` quando INFRA-003 passa.
89
+
90
+ ### 4. Gerar `specs/{nome}/tasks.md` (arquivo único)
91
+
92
+ Gerar UM arquivo só em `specs/{nome}/tasks.md` contendo **todas as tasks**
93
+ em uma tabela única com coluna `Área`. Agrupadas por fase de entrega (PRD §11).
94
+
95
+ **Tabela única:**
96
+
97
+ ```markdown
98
+ | ID | Área | Fase | Tam | Título | Repo | Arquivos | Depende de | Ref spec | Ref CA |
99
+ |----|------|------|-----|--------|------|----------|-----------|----------|--------|
100
+ | BANCO-001 | BANCO | 1 | S | Migration clientes | api | src/Migrations/001_clientes.cs | | SDD §3.1 | — |
101
+ | BACK-001 | BACK | 1 | M | Endpoint POST /clientes | api | src/Api/Controllers/... | BANCO-001 | SDD §5.1 | CA-001 |
102
+ | FRONT-001 | FRONT | 2 | M | Tela cadastro | web | src/pages/clientes/new.tsx | BACK-001 | SDD §6.1 | CA-002 |
103
+ ```
104
+
105
+ **Regras de decomposição:**
106
+ 1. Cada task é **atômica** implementável sem consultar nada além de `specs/{nome}/` + `rules.md`
107
+ 2. **Repo obrigatório** consultar `projetos.yaml` para mapear área repo. Caminhos de arquivo são relativos à raiz do repo
108
+ 3. **Área** é uma coluna, não mais um arquivo. Valores: BANCO, BACK, FRONT, INFRA, DOC, MOBILE, etc.
109
+ 4. Tamanhos realistas: **S** (<30min), **M** (30min-2h), **L** (2h+)
110
+ 5. Se uma task é L, avaliar se pode ser quebrada em M+S
111
+ 6. IDs sequenciais **por área**: BANCO-001, BANCO-002, BACK-001, BACK-002
112
+ 7. IDs nunca reutilizados — se uma task for removida, o ID é aposentado
113
+ 8. Dependências explícitas — inclusive cross-area (FRONT-001 depende BACK-001)
114
+ 9. `Ref spec`: referência a seção do SDD (fonte humana) — ex: `SDD §3.1`
115
+ 10. `Ref CA`: ID do critério de aceite em `specs/{nome}/scenarios.md` (CA-001, CA-002...) — pode ser `—`
116
+
117
+ **Organização lógica dentro da tabela:**
118
+ - Ordenar por FaseÁreaID
119
+ - Dependências garantem ordem de execução; a ordenação na tabela é visual
120
+
121
+ ### 5. Gerar `workspace/Output/{nome}/Progresso.md` (tracking)
122
+
123
+ `Progresso.md` fica em **workspace/Output** (é user tracking, não spec).
124
+ Usando template `.github/templates/feature/Progresso.template.md`:
125
+
126
+ - Resumo por Área × Fase com contagem de tasks (derivado de `specs/{nome}/tasks.md`)
127
+ - Status por fase: ⬜ pendente | 🔄 em andamento | ✅ concluída
128
+ - **Ordem de execução** com paralelismos:
129
+ ```
130
+ 1. BANCO Fase 1 — primeiro sempre
131
+ 2. BANCO Fase 2 + BACK Fase 1 — podem paralelizar
132
+ 3. FRONT após BACK Fase 2
133
+ ...
134
+ ```
135
+ - Totais por área e geral
136
+ - Checklist pós-conclusão (merge delta, atualizar progresso global, napkin)
137
+
138
+ **Regra**: status vive SÓ em Progresso.md. `specs/{nome}/tasks.md` é o plano imutável (até re-planejar).
139
+
140
+ ### 6. Atualizar progresso global
141
+ Adicionar entrada em `workspace/Output/progresso.md`:
142
+
143
+ ```markdown
144
+ | {nome} | plan_done | BANCO: 0/N | BACK: 0/N | FRONT: 0/N |
145
+ ```
146
+
147
+ ### 7. Atualizar `.context.md`
148
+ ```yaml
149
+ status: "plan_done"
150
+ ultima_skill: "/sf-plan"
151
+ atualizado_em: "{{ISO_DATETIME}}"
152
+ ```
153
+
154
+ ---
155
+
156
+ ## Saídas
157
+
158
+ | Arquivo | Descrição |
159
+ |---------|-----------|
160
+ | `specs/{nome}/tasks.md` | Tabela única de tasks com coluna Área |
161
+ | `workspace/Output/{nome}/Progresso.md` | Dashboard da feature com ordem de execução (tracking) |
162
+ | `workspace/Output/progresso.md` (global) | Atualizado com nova feature |
163
+ | `.context.md` | Atualizado com status `plan_done` |
164
+
165
+ ## Pós-condições
166
+ - `specs/{nome}/tasks.md` é único arquivo de plano — coder lê daqui
167
+ - Cada task é auto-contida com referência a `specs/{nome}/` (não ao SDD direto)
168
+ - Dependências resolvíveis (não há ciclos)
169
+ - Ordem de execução definida em `Progresso.md`
170
+ - Feature pronta para `/sf-dev`
171
+
172
+ ## Erros
173
+
174
+ | Erro | Ação |
175
+ |------|------|
176
+ | Nome não informado | Parar, mostrar exemplo |
177
+ | Status não é design_done | Parar, sugerir skill correspondente |
178
+ | SDD não encontrado | Parar, sugerir /sf-design |
179
+ | SDD com seções vazias obrigatórias | Parar, listar o que falta — sugerir voltar ao /sf-design |
180
+ | Dependência circular detectada | Parar, reportar o ciclo e sugerir reorganização |