spec-first-copilot 0.3.0 → 0.5.0-beta.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/README.md +38 -30
- package/lib/init.js +2 -2
- package/package.json +31 -23
- package/templates/.ai/memory/napkin.md +1 -1
- package/templates/.github/agents/db-coder.md +1 -1
- package/templates/.github/agents/doc-writer.md +12 -15
- package/templates/.github/agents/security-reviewer.md +1 -1
- package/templates/.github/copilot-instructions.md +61 -43
- package/templates/.github/instructions/docs.instructions.md +12 -12
- package/templates/.github/instructions/sensitive-files.instructions.md +10 -10
- package/templates/{docs/Desenvolvimento → .github}/rules.md +2 -2
- package/templates/.github/skills/sf-design/SKILL.md +26 -27
- package/templates/.github/skills/sf-dev/SKILL.md +30 -7
- package/templates/.github/skills/sf-discovery/SKILL.md +405 -405
- package/templates/.github/skills/sf-extract/SKILL.md +9 -9
- package/templates/.github/skills/sf-feature/SKILL.md +21 -21
- package/templates/.github/skills/sf-merge-delta/SKILL.md +21 -18
- package/templates/.github/skills/sf-plan/SKILL.md +8 -8
- package/templates/.github/skills/{sf-pausar → sf-session-finish}/SKILL.md +10 -10
- package/templates/.github/skills/sf-setup-projeto/SKILL.md +20 -20
- package/templates/{docs/_templates/estrutura/API.template.md → .github/templates/estrutura/apiContracts.template.md} +24 -17
- package/templates/.github/templates/estrutura/architecture.template.md +158 -0
- package/templates/{docs/_templates/estrutura/Seguranca.template.md → .github/templates/estrutura/conventions.template.md} +74 -10
- package/templates/{docs/_templates/estrutura/ADRs.template.md → .github/templates/estrutura/decisions.template.md} +21 -13
- package/templates/.github/templates/estrutura/domain.template.md +148 -0
- package/templates/{docs/_templates → .github/templates}/feature/PRD.template.md +256 -256
- package/templates/{docs/_templates → .github/templates}/feature/Progresso.template.md +2 -2
- package/templates/{docs/_templates → .github/templates}/feature/TRD.template.md +204 -200
- package/templates/{docs/_templates → .github/templates}/feature/context.template.md +1 -1
- package/templates/{docs/_templates → .github/templates}/feature/projetos.template.yaml +1 -1
- package/templates/{docs/_templates → .github/templates}/feature/sdd.template.md +372 -372
- package/templates/{docs/_templates → .github/templates}/feature/tasks.template.md +115 -115
- package/templates/docs/_templates/estrutura/Arquitetura.template.md +0 -82
- package/templates/docs/_templates/estrutura/Infraestrutura.template.md +0 -104
- package/templates/docs/_templates/estrutura/Modelo_Dados.template.md +0 -99
- package/templates/docs/_templates/estrutura/Stack.template.md +0 -78
- package/templates/docs/_templates/estrutura/Visao.template.md +0 -82
- /package/templates/{docs/_templates → .github/templates}/feature/backlog-extraido.template.md +0 -0
- /package/templates/{docs/_templates → .github/templates}/feature/extract-log.template.md +0 -0
- /package/templates/{docs/_templates → .github/templates}/global/progresso_global.template.md +0 -0
- /package/templates/docs/{Desenvolvimento/.gitkeep → .gitkeep} +0 -0
- /package/templates/{docs/Estrutura → workspace/Input}/.gitkeep +0 -0
- /package/templates/{docs/PM → workspace/Input/setup_projeto}/.gitkeep +0 -0
- /package/templates/{docs/PM/setup_projeto → workspace/Output}/.gitkeep +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sf-extract
|
|
3
3
|
description: |
|
|
4
|
-
Extração de insumos. Lê
|
|
4
|
+
Extração de insumos. Lê workspace/Input/ e gera PRD ou TRD estruturado.
|
|
5
5
|
Trigger: /sf-extract
|
|
6
6
|
author: GustavoMaritan
|
|
7
7
|
version: 1.0.0
|
|
@@ -35,7 +35,7 @@ Exemplo: `/sf-extract feat_cadastro_cliente`
|
|
|
35
35
|
```
|
|
36
36
|
1. Ler .context.md e .extract-log.md (se existir)
|
|
37
37
|
2. Ler discovery.md (se existir) — análise profunda prévia dos insumos
|
|
38
|
-
3. Inventariar arquivos em
|
|
38
|
+
3. Inventariar arquivos em workspace/Input/{nome}/ → filtrar NOVOS e MODIFICADOS
|
|
39
39
|
4. Spawn 1 Reader por arquivo NOVO/MODIFICADO (paralelo)
|
|
40
40
|
5. Aguardar todos os Readers
|
|
41
41
|
6. Spawn Analyzer com:
|
|
@@ -43,7 +43,7 @@ Exemplo: `/sf-extract feat_cadastro_cliente`
|
|
|
43
43
|
- discovery.md (se existir) — mapa do sistema pré-validado
|
|
44
44
|
- PRD/TRD existente (se re-extração)
|
|
45
45
|
- Template (PRD.template.md ou TRD.template.md)
|
|
46
|
-
- docs/
|
|
46
|
+
- docs/ (contexto do projeto)
|
|
47
47
|
7. Analyzer gera documento final + extract-log
|
|
48
48
|
8. Atualizar .context.md → status: extract_done
|
|
49
49
|
```
|
|
@@ -151,19 +151,19 @@ Se um tema **não foi mencionado em nenhum insumo**, gera **ambiguidade obrigat
|
|
|
151
151
|
| # | Validação | Se falhar |
|
|
152
152
|
|---|-----------|-----------|
|
|
153
153
|
| 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-extract feat_cadastro_cliente" |
|
|
154
|
-
| 2 | `
|
|
155
|
-
| 3 | `
|
|
154
|
+
| 2 | `workspace/Input/{nome}/` existe e contém pelo menos 1 arquivo (ignorar .gitkeep) | Parar → "Pasta de insumos vazia ou inexistente" |
|
|
155
|
+
| 3 | `workspace/Output/{nome}/.context.md` existe | Parar → "Execute /sf-feature {nome} ou /sf-setup-projeto primeiro" |
|
|
156
156
|
| 4 | Status em `.context.md` é `not_started` ou `extract_done` | Se `approved` ou posterior → "Extração já aprovada. Para re-extrair, o status será revertido para extract_done" |
|
|
157
157
|
|
|
158
158
|
## Passos detalhados
|
|
159
159
|
|
|
160
160
|
### 1. Ler contexto
|
|
161
161
|
- Ler `.context.md` → identificar `tipo` (feature ou setup) e `documento` (PRD ou TRD)
|
|
162
|
-
- Ler `docs
|
|
162
|
+
- Ler `docs/` se existir (contexto para extração coerente)
|
|
163
163
|
- Selecionar template: `tipo=feature` → `PRD.template.md` | `tipo=setup` → `TRD.template.md`
|
|
164
164
|
|
|
165
165
|
### 2. Inventariar e classificar insumos
|
|
166
|
-
Ler todos os arquivos em `
|
|
166
|
+
Ler todos os arquivos em `workspace/Input/{nome}/`. Para cada arquivo, calcular hash (SHA-256 truncado 8 chars).
|
|
167
167
|
|
|
168
168
|
Se `.extract-log.md` existir, classificar:
|
|
169
169
|
|
|
@@ -187,7 +187,7 @@ Após todos Readers concluírem, disparar Analyzer (Opus) com:
|
|
|
187
187
|
- Todos os outputs dos Readers
|
|
188
188
|
- PRD/TRD existente (se re-extração — para merge aditivo)
|
|
189
189
|
- Template correspondente
|
|
190
|
-
- `docs
|
|
190
|
+
- `docs/` como contexto
|
|
191
191
|
|
|
192
192
|
### 5. Gerar/atualizar documento
|
|
193
193
|
|
|
@@ -277,7 +277,7 @@ atualizado_em: "{{ISO_DATETIME}}"
|
|
|
277
277
|
| Contradição entre arquivos | Analyzer gera ambiguidade citando os dois arquivos e a contradição |
|
|
278
278
|
|
|
279
279
|
## Notas
|
|
280
|
-
- O `/extract` é a ÚNICA skill que lê `
|
|
280
|
+
- O `/extract` é a ÚNICA skill que lê `workspace/Input/` — nenhuma outra skill acessa insumos brutos
|
|
281
281
|
- Na re-extração, o merge é ADITIVO — nunca remove informação de arquivos inalterados
|
|
282
282
|
- Para recomeçar do zero: apagar PRD/TRD e .extract-log.md manualmente
|
|
283
283
|
- Readers são stateless — não conhecem outros arquivos, apenas o seu
|
|
@@ -31,19 +31,19 @@ Exemplo: `/sf-feature feat_cadastro_cliente`
|
|
|
31
31
|
| # | Validação | Se falhar |
|
|
32
32
|
|---|-----------|-----------|
|
|
33
33
|
| 1 | Argumento `nome` foi informado | Parar → "Informe o nome da feature. Ex: /sf-feature feat_cadastro_cliente" |
|
|
34
|
-
| 2 | `
|
|
34
|
+
| 2 | `workspace/Input/{nome}/` existe | Parar → "Crie a pasta workspace/Input/{nome}/ e adicione seus insumos" |
|
|
35
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
|
|
36
|
+
| 4 | `docs/` está populado (setup já executado) | Parar → "Execute /sf-setup-projeto antes de criar features" |
|
|
37
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
38
|
|
|
39
39
|
## Passos
|
|
40
40
|
|
|
41
41
|
### 1. Carregar contexto do projeto
|
|
42
|
-
Ler `docs
|
|
42
|
+
Ler `docs/` para entender a arquitetura, stack, modelo de dados e convenções existentes. Esse contexto será passado ao `/extract`.
|
|
43
43
|
|
|
44
44
|
### 2. Criar estrutura
|
|
45
45
|
```
|
|
46
|
-
|
|
46
|
+
workspace/Output/{nome}/
|
|
47
47
|
├── .context.md ← criado agora
|
|
48
48
|
└── (PRD.md será criado pelo /extract)
|
|
49
49
|
```
|
|
@@ -54,7 +54,7 @@ docs/Desenvolvimento/{nome}/
|
|
|
54
54
|
nome: "{nome}"
|
|
55
55
|
tipo: "feature"
|
|
56
56
|
documento: "PRD"
|
|
57
|
-
pm_path: "
|
|
57
|
+
pm_path: "workspace/Input/{nome}/"
|
|
58
58
|
status: "not_started"
|
|
59
59
|
ultima_skill: "/sf-feature"
|
|
60
60
|
atualizado_em: "{{ISO_DATETIME}}"
|
|
@@ -65,21 +65,21 @@ atualizado_em: "{{ISO_DATETIME}}"
|
|
|
65
65
|
|
|
66
66
|
Antes de extrair, perguntar ao usuário:
|
|
67
67
|
```
|
|
68
|
-
📋 Insumos encontrados em
|
|
68
|
+
📋 Insumos encontrados em workspace/Input/{nome}/.
|
|
69
69
|
|
|
70
70
|
Recomendo rodar /sf-discovery antes da extração para:
|
|
71
71
|
- Análise profunda dos insumos
|
|
72
72
|
- Identificar gaps e contradições
|
|
73
73
|
- Validar entendimento com você
|
|
74
74
|
|
|
75
|
-
Quer rodar /sf-discovery
|
|
75
|
+
Quer rodar /sf-discovery workspace/Input/{nome}/ agora? (s/n)
|
|
76
76
|
Se SIM → rodar discovery, salvar discovery.md, depois continuar com extract
|
|
77
77
|
Se NÃO → pular direto para /sf-extract
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
Se o usuário aceitar:
|
|
81
|
-
- Rodar `/sf-discovery
|
|
82
|
-
- Aguardar conclusão — discovery.md salvo em `
|
|
81
|
+
- Rodar `/sf-discovery workspace/Input/{nome}/`
|
|
82
|
+
- Aguardar conclusão — discovery.md salvo em `workspace/Output/{nome}/`
|
|
83
83
|
- Continuar para o passo 5
|
|
84
84
|
|
|
85
85
|
### 5. Chamar `/sf-extract {nome}`
|
|
@@ -88,12 +88,12 @@ O `/sf-extract` lê os insumos + discovery.md (se existir), gera o PRD e atualiz
|
|
|
88
88
|
### 6. CHECKPOINT — Parar e informar o usuário
|
|
89
89
|
Mensagem ao usuário:
|
|
90
90
|
```
|
|
91
|
-
✅ PRD gerado em
|
|
91
|
+
✅ PRD gerado em workspace/Output/{nome}/PRD.md
|
|
92
92
|
|
|
93
93
|
Revise o documento. Quando estiver satisfeito, execute:
|
|
94
94
|
/sf-design {nome}
|
|
95
95
|
|
|
96
|
-
Se precisar adicionar mais insumos, coloque na pasta
|
|
96
|
+
Se precisar adicionar mais insumos, coloque na pasta workspace/Input/{nome}/
|
|
97
97
|
e execute:
|
|
98
98
|
/sf-extract {nome}
|
|
99
99
|
```
|
|
@@ -102,29 +102,29 @@ e execute:
|
|
|
102
102
|
1. `/sf-design {nome}` (pergunta aprovação → gera SDD)
|
|
103
103
|
2. `/sf-plan {nome}` (gera tasks + Progresso)
|
|
104
104
|
3. `/sf-dev {nome}` (executa tasks)
|
|
105
|
-
4. `/sf-merge-delta {nome}` (aplica Delta Specs em docs/
|
|
105
|
+
4. `/sf-merge-delta {nome}` (aplica Delta Specs em docs/)
|
|
106
106
|
|
|
107
107
|
## Saídas diretas desta skill
|
|
108
|
-
- `
|
|
109
|
-
- `
|
|
110
|
-
- `
|
|
108
|
+
- `workspace/Output/{nome}/.context.md`
|
|
109
|
+
- `workspace/Output/{nome}/PRD.md` (via /extract)
|
|
110
|
+
- `workspace/Output/{nome}/.extract-log.md` (via /extract)
|
|
111
111
|
|
|
112
112
|
## Saídas indiretas (skills subsequentes)
|
|
113
113
|
- `sdd.md` (via /design)
|
|
114
114
|
- `*_tasks.md` + `Progresso.md` (via /plan)
|
|
115
|
-
- `docs
|
|
115
|
+
- `docs/` atualizado (via /sf-merge-delta após /dev)
|
|
116
116
|
|
|
117
117
|
## Erros
|
|
118
118
|
|
|
119
119
|
| Erro | Ação |
|
|
120
120
|
|------|------|
|
|
121
121
|
| Nome não informado | Parar, mostrar exemplo de uso |
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
|
|
|
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
125
|
| Pipeline já iniciado | Mostrar status atual, sugerir /sf-extract para re-extração ou skill correspondente ao status |
|
|
126
126
|
|
|
127
127
|
## Notas
|
|
128
128
|
- Diferente do `/sf-setup-projeto`, pode ser executado **múltiplas vezes** (uma por feature)
|
|
129
|
-
- O contexto de `docs
|
|
130
|
-
- Após `/dev`, o `/merge-delta` atualiza `docs
|
|
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,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sf-merge-delta
|
|
3
3
|
description: |
|
|
4
|
-
Delta Specs. Aplica mudanças do SDD em docs
|
|
4
|
+
Delta Specs. Aplica mudanças do SDD em docs/.
|
|
5
5
|
Trigger: /sf-merge-delta
|
|
6
6
|
author: GustavoMaritan
|
|
7
7
|
version: 1.0.0
|
|
@@ -10,7 +10,7 @@ date: 2026-04-08
|
|
|
10
10
|
|
|
11
11
|
# Skill: /sf-merge-delta
|
|
12
12
|
|
|
13
|
-
> Skill atômica pós-dev. Aplica Delta Specs do SDD em docs
|
|
13
|
+
> Skill atômica pós-dev. Aplica Delta Specs do SDD em docs/.
|
|
14
14
|
> Última etapa do pipeline de feature — não se aplica a setup.
|
|
15
15
|
|
|
16
16
|
## Tipo
|
|
@@ -40,9 +40,9 @@ Exemplo: `/sf-merge-delta feat_cadastro_cliente`
|
|
|
40
40
|
|---|-----------|-----------|
|
|
41
41
|
| 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-merge-delta feat_cadastro_cliente" |
|
|
42
42
|
| 2 | `.context.md` existe com status `dev_done` | Se anterior → "Execute /sf-dev {nome} primeiro" |
|
|
43
|
-
| 3 | `.context.md` tipo é `feature` (não `setup`) | Parar → "Setup não usa merge-delta — docs/
|
|
43
|
+
| 3 | `.context.md` tipo é `feature` (não `setup`) | Parar → "Setup não usa merge-delta — docs/ foi criado diretamente pelo /sf-dev" |
|
|
44
44
|
| 4 | `sdd.md` existe com §11 Delta Specs preenchida | Parar → "Delta Specs não encontrada no SDD" |
|
|
45
|
-
| 5 | `docs
|
|
45
|
+
| 5 | `docs/` está populado | Parar → "docs/ vazio — execute /sf-setup-projeto primeiro" |
|
|
46
46
|
|
|
47
47
|
## Passos
|
|
48
48
|
|
|
@@ -56,17 +56,20 @@ Ler `sdd.md` §11 e classificar cada delta:
|
|
|
56
56
|
| **REMOVED** | Elemento removido do sistema | Endpoint DELETE /api/v1/legacy removido |
|
|
57
57
|
|
|
58
58
|
### 2. Mapear deltas para docs alvo
|
|
59
|
-
Cada delta afeta um ou mais docs em `docs
|
|
59
|
+
Cada delta afeta um ou mais docs em `docs/`:
|
|
60
60
|
|
|
61
61
|
| Elemento | Doc alvo |
|
|
62
62
|
|----------|----------|
|
|
63
|
-
| Tabelas, colunas, índices | `
|
|
64
|
-
|
|
|
65
|
-
|
|
|
66
|
-
|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
63
|
+
| Tabelas, colunas, índices, entidades | `domain.md` |
|
|
64
|
+
| Visão/escopo, atores, integrações externas, glossário | `domain.md` |
|
|
65
|
+
| Endpoints, rotas, contratos, paginação, filtros | `apiContracts.md` |
|
|
66
|
+
| Containers, componentes, ambientes, deploy, stack | `architecture.md` |
|
|
67
|
+
| Decisões arquiteturais | `decisions.md` (+ padrão aplicado em `architecture.md` se couber) |
|
|
68
|
+
| Autenticação, autorização, roles, permissões | `conventions.md` |
|
|
69
|
+
| CORS, rate limiting, LGPD, auditoria | `conventions.md` |
|
|
70
|
+
| Variáveis de ambiente, domínios, monitoramento | `conventions.md` |
|
|
71
|
+
| Códigos de erro do domínio | `conventions.md` |
|
|
72
|
+
| Alternativas tecnológicas descartadas | `conventions.md` |
|
|
70
73
|
|
|
71
74
|
### 3. Aplicar cada delta
|
|
72
75
|
Para cada delta, no doc alvo:
|
|
@@ -103,14 +106,14 @@ Após todas alterações:
|
|
|
103
106
|
|
|
104
107
|
### 5. Atualizar status
|
|
105
108
|
- `.context.md` → status: `done`
|
|
106
|
-
- `
|
|
109
|
+
- `workspace/Output/progresso.md` → feature marcada como concluída
|
|
107
110
|
- Informar ao usuário:
|
|
108
111
|
```
|
|
109
|
-
✅ Delta Specs aplicadas em docs/
|
|
112
|
+
✅ Delta Specs aplicadas em docs/
|
|
110
113
|
|
|
111
114
|
Docs atualizados:
|
|
112
|
-
-
|
|
113
|
-
-
|
|
115
|
+
- domain.md — ADDED: tabelas clientes, clientes_enderecos
|
|
116
|
+
- apiContracts.md — ADDED: endpoints POST/GET /api/v1/clientes
|
|
114
117
|
|
|
115
118
|
Feature {nome} concluída.
|
|
116
119
|
```
|
|
@@ -121,12 +124,12 @@ Após todas alterações:
|
|
|
121
124
|
|
|
122
125
|
| Arquivo | Descrição |
|
|
123
126
|
|---------|-----------|
|
|
124
|
-
| `docs
|
|
127
|
+
| `docs/*.md` | Docs globais atualizados com deltas da feature |
|
|
125
128
|
| `progresso.md` (global) | Feature marcada como concluída |
|
|
126
129
|
| `.context.md` | Status: `done` |
|
|
127
130
|
|
|
128
131
|
## Pós-condições
|
|
129
|
-
- `docs
|
|
132
|
+
- `docs/` reflete o estado real do sistema
|
|
130
133
|
- Cada mudança rastreável: changelog → feature → SDD → PRD → insumo
|
|
131
134
|
- Feature completamente concluída
|
|
132
135
|
|
|
@@ -38,7 +38,7 @@ Exemplo: `/sf-plan feat_cadastro_cliente`
|
|
|
38
38
|
| # | Validação | Se falhar |
|
|
39
39
|
|---|-----------|-----------|
|
|
40
40
|
| 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-plan feat_cadastro_cliente" |
|
|
41
|
-
| 2 | `
|
|
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
42
|
| 3 | `sdd.md` existe na pasta | Parar → "SDD não encontrado. Execute /sf-design {nome}" |
|
|
43
43
|
|
|
44
44
|
## Passos
|
|
@@ -47,9 +47,9 @@ Exemplo: `/sf-plan feat_cadastro_cliente`
|
|
|
47
47
|
- Ler `.context.md` → validar status
|
|
48
48
|
- Ler `sdd.md` completo
|
|
49
49
|
- Ler `projetos.yaml` (manifesto de repos — mapeamento área → repo)
|
|
50
|
-
- Ler `docs
|
|
51
|
-
- Ler
|
|
52
|
-
- Carregar template
|
|
50
|
+
- Ler `docs/` (Stack, Arquitetura — para 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
53
|
|
|
54
54
|
### 2. Identificar fases de entrega
|
|
55
55
|
Ler PRD §11 (Fases de Entrega) — cada fase vira um agrupamento de tasks:
|
|
@@ -68,7 +68,7 @@ Para cada fase de entrega, mapear seções do SDD para áreas de tasks:
|
|
|
68
68
|
| §8 Integrações externas | INFRA | Se há infra/serviços externos |
|
|
69
69
|
| Outras | MOBILE, DEVOPS, etc. | Conforme necessidade do SDD |
|
|
70
70
|
|
|
71
|
-
> **Nota**: Área DOC NÃO existe mais no setup. docs/
|
|
71
|
+
> **Nota**: Área DOC NÃO existe mais no setup. docs/ é gerado pelo /sf-design (passo 3).
|
|
72
72
|
> DOC só aparece em features se houver necessidade explícita de documentação adicional.
|
|
73
73
|
|
|
74
74
|
Áreas são **dinâmicas** — só cria o que o SDD exige. Não criar área vazia.
|
|
@@ -118,10 +118,10 @@ Tasks são agrupadas por **fase de entrega** (do PRD §11), não só por fase t
|
|
|
118
118
|
| BACK | Setup/Config → DTOs/Validações → Repository/Service → Controller → Testes |
|
|
119
119
|
| FRONT | Setup/Rotas → Componentes base → Telas → Integração API → Polish/UX |
|
|
120
120
|
| INFRA | Provisioning → Config → Deploy → Monitoramento |
|
|
121
|
-
| DOC | Gerar docs/
|
|
121
|
+
| DOC | Gerar docs/ a partir do TRD |
|
|
122
122
|
|
|
123
123
|
### 5. Gerar `Progresso.md`
|
|
124
|
-
Usando template
|
|
124
|
+
Usando template `.github/templates/feature/Progresso.template.md`:
|
|
125
125
|
|
|
126
126
|
- Resumo por Área × Fase com contagem de tasks
|
|
127
127
|
- Status por fase: ⬜ pendente | 🔄 em andamento | ✅ concluída
|
|
@@ -137,7 +137,7 @@ Usando template `docs/_templates/feature/Progresso.template.md`:
|
|
|
137
137
|
- Checklist pós-conclusão (merge delta, atualizar progresso global, napkin)
|
|
138
138
|
|
|
139
139
|
### 6. Atualizar progresso global
|
|
140
|
-
Adicionar entrada em `
|
|
140
|
+
Adicionar entrada em `workspace/Output/progresso.md`:
|
|
141
141
|
|
|
142
142
|
```markdown
|
|
143
143
|
| {nome} | plan_done | BANCO: 0/N | BACK: 0/N | FRONT: 0/N |
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: sf-
|
|
2
|
+
name: sf-session-finish
|
|
3
3
|
description: |
|
|
4
4
|
Encerrar sessão. Salva estado, atualiza napkin, gera retomada.md.
|
|
5
|
-
Trigger: /sf-
|
|
5
|
+
Trigger: /sf-session-finish
|
|
6
6
|
author: GustavoMaritan
|
|
7
7
|
version: 1.0.0
|
|
8
8
|
date: 2026-04-08
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
# Skill: /sf-
|
|
11
|
+
# Skill: /sf-session-finish
|
|
12
12
|
|
|
13
13
|
> Encerra a sessão de trabalho de forma organizada.
|
|
14
14
|
> Consolida estado, atualiza memória, gera ponto de retomada para a próxima sessão.
|
|
@@ -18,7 +18,7 @@ Utilitária — roda a qualquer momento
|
|
|
18
18
|
|
|
19
19
|
## Uso
|
|
20
20
|
```
|
|
21
|
-
/sf-
|
|
21
|
+
/sf-session-finish
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
---
|
|
@@ -27,7 +27,7 @@ Utilitária — roda a qualquer momento
|
|
|
27
27
|
|
|
28
28
|
### 1. Levantar estado atual de cada feature/setup
|
|
29
29
|
|
|
30
|
-
Para cada `.context.md` em `
|
|
30
|
+
Para cada `.context.md` em `workspace/Output/*/`:
|
|
31
31
|
- Ler status atual
|
|
32
32
|
- Ler Progresso.md (se existir) → % concluído, fase atual
|
|
33
33
|
- Identificar tasks em andamento (`- [ ]` com dependências resolvidas)
|
|
@@ -55,12 +55,12 @@ Adicionar/atualizar seção `## Sessão Atual` com:
|
|
|
55
55
|
|
|
56
56
|
### 4. Gerar resumo de retomada
|
|
57
57
|
|
|
58
|
-
Criar/atualizar `
|
|
58
|
+
Criar/atualizar `workspace/Output/retomada.md`:
|
|
59
59
|
|
|
60
60
|
```markdown
|
|
61
61
|
# Ponto de Retomada — {{DATA}}
|
|
62
62
|
|
|
63
|
-
> Gerado pelo /sf-
|
|
63
|
+
> Gerado pelo /sf-session-finish. Leia este arquivo ao iniciar a próxima sessão.
|
|
64
64
|
|
|
65
65
|
## Estado geral
|
|
66
66
|
|
|
@@ -96,7 +96,7 @@ Criar/atualizar `docs/Desenvolvimento/retomada.md`:
|
|
|
96
96
|
```
|
|
97
97
|
✅ Sessão encerrada. Estado salvo em:
|
|
98
98
|
- `.ai/memory/napkin.md` — memória atualizada
|
|
99
|
-
- `
|
|
99
|
+
- `workspace/Output/retomada.md` — ponto de retomada
|
|
100
100
|
|
|
101
101
|
Para retomar na próxima sessão:
|
|
102
102
|
1. Ler retomada.md
|
|
@@ -110,11 +110,11 @@ Para retomar na próxima sessão:
|
|
|
110
110
|
| Arquivo | Descrição |
|
|
111
111
|
|---------|-----------|
|
|
112
112
|
| `.ai/memory/napkin.md` | Sessão atual atualizada |
|
|
113
|
-
| `
|
|
113
|
+
| `workspace/Output/retomada.md` | Ponto de retomada com estado completo |
|
|
114
114
|
|
|
115
115
|
## Notas
|
|
116
116
|
|
|
117
117
|
- Não modifica .context.md (o status da pipeline não muda ao pausar)
|
|
118
118
|
- Não faz commit automático — se tem working tree sujo, avisa mas não força
|
|
119
119
|
- Pode ser chamada a qualquer momento, não só no final do dia
|
|
120
|
-
- O arquivo `retomada.md` é sobrescrito a cada /sf-
|
|
120
|
+
- O arquivo `retomada.md` é sobrescrito a cada /sf-session-finish (é ponto atual, não histórico)
|
|
@@ -25,16 +25,16 @@ Orquestrador (primeira etapa do pipeline)
|
|
|
25
25
|
|
|
26
26
|
| # | Validação | Se falhar |
|
|
27
27
|
|---|-----------|-----------|
|
|
28
|
-
| 1 | `
|
|
28
|
+
| 1 | `workspace/Input/setup_projeto/` existe | Parar → "Crie a pasta workspace/Input/setup_projeto/ e adicione seus insumos" |
|
|
29
29
|
| 2 | 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)" |
|
|
30
|
-
| 3 | `docs
|
|
31
|
-
| 4 | `
|
|
30
|
+
| 3 | `docs/` está vazio ou contém apenas templates vazios | Parar → "Setup já foi executado. Use /sf-feature para novas funcionalidades" |
|
|
31
|
+
| 4 | `workspace/Output/setup_projeto/.context.md` não existe ou status é `not_started` | Parar → "Setup já está em andamento. Verifique o status em .context.md" |
|
|
32
32
|
|
|
33
33
|
## Passos
|
|
34
34
|
|
|
35
35
|
### 1. Criar estrutura
|
|
36
36
|
```
|
|
37
|
-
|
|
37
|
+
workspace/Output/setup_projeto/
|
|
38
38
|
├── .context.md ← criado agora
|
|
39
39
|
└── (TRD.md será criado pelo /extract)
|
|
40
40
|
```
|
|
@@ -45,7 +45,7 @@ docs/Desenvolvimento/setup_projeto/
|
|
|
45
45
|
nome: "setup_projeto"
|
|
46
46
|
tipo: "setup"
|
|
47
47
|
documento: "TRD"
|
|
48
|
-
pm_path: "
|
|
48
|
+
pm_path: "workspace/Input/setup_projeto/"
|
|
49
49
|
status: "not_started"
|
|
50
50
|
ultima_skill: "/sf-setup-projeto"
|
|
51
51
|
atualizado_em: "{{ISO_DATETIME}}"
|
|
@@ -56,21 +56,21 @@ atualizado_em: "{{ISO_DATETIME}}"
|
|
|
56
56
|
|
|
57
57
|
Antes de extrair, perguntar ao usuário:
|
|
58
58
|
```
|
|
59
|
-
📋 Insumos encontrados em
|
|
59
|
+
📋 Insumos encontrados em workspace/Input/setup_projeto/.
|
|
60
60
|
|
|
61
61
|
Recomendo rodar /sf-discovery antes da extração para:
|
|
62
62
|
- Análise profunda dos insumos (parseia drawio, XML, SQL completo)
|
|
63
63
|
- Identificar gaps e contradições antes de estruturar
|
|
64
64
|
- Validar entendimento com você (mapa do sistema)
|
|
65
65
|
|
|
66
|
-
Quer rodar /sf-discovery
|
|
66
|
+
Quer rodar /sf-discovery workspace/Input/setup_projeto/ agora? (s/n)
|
|
67
67
|
Se SIM → rodar discovery, salvar discovery.md, depois continuar com extract
|
|
68
68
|
Se NÃO → pular direto para /sf-extract (ok para insumos simples)
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
Se o usuário aceitar:
|
|
72
|
-
- Rodar `/sf-discovery
|
|
73
|
-
- Aguardar conclusão — discovery.md salvo em `
|
|
72
|
+
- Rodar `/sf-discovery workspace/Input/setup_projeto/`
|
|
73
|
+
- Aguardar conclusão — discovery.md salvo em `workspace/Output/setup_projeto/`
|
|
74
74
|
- Continuar para o passo 4
|
|
75
75
|
|
|
76
76
|
### 4. Chamar `/sf-extract setup_projeto`
|
|
@@ -79,30 +79,30 @@ O `/sf-extract` lê os insumos + discovery.md (se existir), gera o TRD e atualiz
|
|
|
79
79
|
### 5. CHECKPOINT — Parar e informar o usuário
|
|
80
80
|
Mensagem ao usuário:
|
|
81
81
|
```
|
|
82
|
-
✅ TRD gerado em
|
|
82
|
+
✅ TRD gerado em workspace/Output/setup_projeto/TRD.md
|
|
83
83
|
|
|
84
84
|
Revise o documento. Quando estiver satisfeito, execute:
|
|
85
85
|
/sf-design setup_projeto
|
|
86
86
|
|
|
87
|
-
Se precisar adicionar mais insumos, coloque na pasta
|
|
87
|
+
Se precisar adicionar mais insumos, coloque na pasta workspace/Input/setup_projeto/
|
|
88
88
|
e execute:
|
|
89
89
|
/sf-extract setup_projeto
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
**O orquestrador encerra aqui.** O restante do pipeline é responsabilidade do usuário chamar as skills atômicas na ordem:
|
|
93
|
-
1. `/sf-design setup_projeto` (pergunta aprovação → gera SDD + docs/
|
|
93
|
+
1. `/sf-design setup_projeto` (pergunta aprovação → gera SDD + docs/ + projetos.yaml)
|
|
94
94
|
2. `/sf-plan setup_projeto` (gera tasks com campo Repo por task)
|
|
95
95
|
3. `/sf-dev setup_projeto` (INFRA-001 cria/clona repos em projetos/, executa tasks nos repos corretos)
|
|
96
96
|
|
|
97
97
|
## Saídas diretas desta skill
|
|
98
|
-
- `
|
|
99
|
-
- `
|
|
100
|
-
- `
|
|
98
|
+
- `workspace/Output/setup_projeto/.context.md`
|
|
99
|
+
- `workspace/Output/setup_projeto/TRD.md` (via /extract)
|
|
100
|
+
- `workspace/Output/setup_projeto/.extract-log.md` (via /extract)
|
|
101
101
|
|
|
102
102
|
## Saídas indiretas (skills subsequentes)
|
|
103
103
|
- `sdd.md` (via /design)
|
|
104
104
|
- `projetos.yaml` (via /sf-design — manifesto de repos)
|
|
105
|
-
- `docs
|
|
105
|
+
- `docs/` populado (via /design)
|
|
106
106
|
- `*_tasks.md` + `Progresso.md` (via /plan)
|
|
107
107
|
- `projetos/` com repos criados/clonados (via /sf-dev INFRA-001)
|
|
108
108
|
|
|
@@ -110,14 +110,14 @@ e execute:
|
|
|
110
110
|
|
|
111
111
|
| Erro | Ação |
|
|
112
112
|
|------|------|
|
|
113
|
-
|
|
|
114
|
-
|
|
|
115
|
-
|
|
|
113
|
+
| workspace/Input/setup_projeto/ não existe | Parar, instruir criação |
|
|
114
|
+
| workspace/Input/setup_projeto/ vazio | Parar, listar formatos aceitos |
|
|
115
|
+
| docs/ já populado | Parar, sugerir /sf-feature |
|
|
116
116
|
| Pipeline já iniciado | Parar, mostrar status atual do .context.md |
|
|
117
117
|
|
|
118
118
|
## Notas
|
|
119
119
|
- Esta skill roda **uma única vez** por projeto
|
|
120
|
-
- docs/
|
|
120
|
+
- docs/ é gerado pelo /sf-design (passo 3), não por tasks DOC
|
|
121
121
|
- `projetos.yaml` é gerado pelo /sf-design (passo 3b) — mapeia serviços para repos
|
|
122
122
|
- Repos são criados/clonados pelo /sf-dev (INFRA-001) dentro de `projetos/`
|
|
123
123
|
- O `/merge-delta` NÃO se aplica ao setup (é criação, não atualização)
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Contratos de API
|
|
2
2
|
|
|
3
|
-
> Padrões
|
|
3
|
+
> Padrões de endpoint, convenções de rotas, paginação, filtros, respostas de erro
|
|
4
|
+
> e catálogo global. Contratos HTTP do sistema.
|
|
5
|
+
> Autenticação detalhada e códigos de erro do domínio vivem em conventions.md.
|
|
4
6
|
|
|
5
7
|
---
|
|
6
8
|
|
|
@@ -9,20 +11,27 @@
|
|
|
9
11
|
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
10
12
|
=============================================================================
|
|
11
13
|
|
|
12
|
-
ORIGEM: Gerado pelo /setup-projeto a partir do TRD §5.
|
|
13
|
-
ATUALIZAÇÃO: /merge-delta quando features adicionam endpoints
|
|
14
|
+
ORIGEM: Gerado pelo /setup-projeto a partir do TRD §5 (API).
|
|
15
|
+
ATUALIZAÇÃO: /merge-delta quando features adicionam endpoints
|
|
16
|
+
(Delta Specs do SDD §5 e §11).
|
|
14
17
|
|
|
15
18
|
COMO GERAR:
|
|
16
|
-
1. Ler TRD §5 (Convenções de API) — padrão geral, versionamento
|
|
19
|
+
1. Ler TRD §5 (Convenções de API) — padrão geral, versionamento
|
|
17
20
|
2. Padrão geral e convenções são FIXOS após setup — definidos uma vez
|
|
18
|
-
3. Catálogo de endpoints é DINÂMICO — cresce a cada feature
|
|
19
|
-
4. Formatos de paginação, filtro e erro são FIXOS
|
|
21
|
+
3. Catálogo de endpoints é DINÂMICO — cresce a cada feature via merge-delta
|
|
22
|
+
4. Formatos de paginação, filtro e resposta de erro são FIXOS
|
|
23
|
+
|
|
24
|
+
O QUE NÃO VAI AQUI:
|
|
25
|
+
- Autenticação detalhada (hash, refresh, fluxo) → conventions.md
|
|
26
|
+
- Autorização, roles, matriz de permissões → conventions.md
|
|
27
|
+
- Códigos de erro do domínio → conventions.md
|
|
28
|
+
- Rate limiting → conventions.md
|
|
29
|
+
- CORS → conventions.md
|
|
20
30
|
|
|
21
31
|
REGRAS:
|
|
22
|
-
- Convenções são LEI — todo SDD §5 (endpoints) deve seguir
|
|
23
|
-
- Catálogo
|
|
24
|
-
- Mudanças em convenções (raro) devem gerar
|
|
25
|
-
- Rate limiting definido por categoria de endpoint, não individual
|
|
32
|
+
- Convenções são LEI — todo SDD §5 (endpoints) deve seguir
|
|
33
|
+
- Catálogo atualizado a cada merge-delta
|
|
34
|
+
- Mudanças em convenções (raro) devem gerar registro em decisions.md
|
|
26
35
|
|
|
27
36
|
=============================================================================
|
|
28
37
|
-->
|
|
@@ -34,10 +43,11 @@ REGRAS:
|
|
|
34
43
|
| Estilo | <!-- REST / GraphQL / gRPC --> |
|
|
35
44
|
| Formato | <!-- JSON / Protobuf --> |
|
|
36
45
|
| Versionamento | <!-- /api/v1/ no path? Header? --> |
|
|
37
|
-
| Autenticação | <!-- Bearer JWT? API Key? --> |
|
|
38
46
|
| Content-Type | <!-- application/json --> |
|
|
39
47
|
| Encoding | <!-- UTF-8 --> |
|
|
40
48
|
|
|
49
|
+
> **Autenticação**: definida em [conventions.md → Autenticação](./conventions.md#autenticação).
|
|
50
|
+
|
|
41
51
|
## Convenções de Rotas
|
|
42
52
|
|
|
43
53
|
| Operação | Método | Rota | Exemplo |
|
|
@@ -50,6 +60,7 @@ REGRAS:
|
|
|
50
60
|
| Remover/Inativar | DELETE | `/api/v1/{recurso}/:id` | |
|
|
51
61
|
|
|
52
62
|
### Convenções de nomenclatura
|
|
63
|
+
|
|
53
64
|
| Regra | Exemplo |
|
|
54
65
|
|-------|---------|
|
|
55
66
|
| Recursos no plural, kebab-case | `/api/v1/order-items` |
|
|
@@ -121,11 +132,7 @@ Query params: `?busca=termo&campo=valor`
|
|
|
121
132
|
| 429 | Rate limit excedido | Muitas requisições |
|
|
122
133
|
| 500 | Erro interno | Bug não tratado |
|
|
123
134
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
| Código | Descrição | HTTP |
|
|
127
|
-
|--------|-----------|------|
|
|
128
|
-
| <!-- Ex: DUPLICATE_EMAIL --> | <!-- Email já cadastrado --> | <!-- 409 --> |
|
|
135
|
+
> **Códigos de erro do domínio**: definidos em [conventions.md → Códigos de Erro do Domínio](./conventions.md#códigos-de-erro-do-domínio).
|
|
129
136
|
|
|
130
137
|
## Catálogo de Endpoints
|
|
131
138
|
|