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,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 | `docs/PM/{nome}/` existe | Parar → "Crie a pasta docs/PM/{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/Estrutura/` 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/Estrutura/` 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
|
+
docs/Desenvolvimento/{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: "docs/PM/{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 docs/PM/{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 docs/PM/{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 docs/PM/{nome}/`
|
|
82
|
+
- Aguardar conclusão — discovery.md salvo em `docs/Desenvolvimento/{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 docs/Desenvolvimento/{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 docs/PM/{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/Estrutura/)
|
|
106
|
+
|
|
107
|
+
## Saídas diretas desta skill
|
|
108
|
+
- `docs/Desenvolvimento/{nome}/.context.md`
|
|
109
|
+
- `docs/Desenvolvimento/{nome}/PRD.md` (via /extract)
|
|
110
|
+
- `docs/Desenvolvimento/{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/Estrutura/` 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
|
+
| PM/{nome}/ não existe | Parar, instruir criação |
|
|
123
|
+
| PM/{nome}/ vazio | Parar, listar formatos aceitos |
|
|
124
|
+
| Estrutura/ 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/Estrutura/` é carregado para que o `/extract` gere um PRD coerente com a arquitetura existente
|
|
130
|
+
- Após `/dev`, o `/merge-delta` atualiza `docs/Estrutura/` com as mudanças da feature
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sf-merge-delta
|
|
3
|
+
description: |
|
|
4
|
+
Delta Specs. Aplica mudanças do SDD em docs/Estrutura/.
|
|
5
|
+
Trigger: /sf-merge-delta
|
|
6
|
+
author: GustavoMaritan
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
date: 2026-04-08
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill: /sf-merge-delta
|
|
12
|
+
|
|
13
|
+
> Skill atômica pós-dev. Aplica Delta Specs do SDD em docs/Estrutura/.
|
|
14
|
+
> Última etapa do pipeline de feature — não se aplica a setup.
|
|
15
|
+
|
|
16
|
+
## Tipo
|
|
17
|
+
Atômica — Single-agent
|
|
18
|
+
|
|
19
|
+
## Uso
|
|
20
|
+
```
|
|
21
|
+
/sf-merge-delta <nome>
|
|
22
|
+
```
|
|
23
|
+
Exemplo: `/sf-merge-delta feat_cadastro_cliente`
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Agente
|
|
28
|
+
|
|
29
|
+
| Campo | Valor |
|
|
30
|
+
|-------|-------|
|
|
31
|
+
| **Papel** | Integrador de documentação — aplica mudanças incrementais mantendo consistência global |
|
|
32
|
+
| **Modelo** | Sonnet |
|
|
33
|
+
| **Comportamento** | Meticuloso com consistência. Aplica apenas o que o Delta Specs diz — não infere mudanças adicionais. Cada alteração gera entrada no changelog. Se há conflito com conteúdo existente, para e pede resolução. |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Pré-condições
|
|
38
|
+
|
|
39
|
+
| # | Validação | Se falhar |
|
|
40
|
+
|---|-----------|-----------|
|
|
41
|
+
| 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-merge-delta feat_cadastro_cliente" |
|
|
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/Estrutura/ foi criado diretamente pelo /sf-dev" |
|
|
44
|
+
| 4 | `sdd.md` existe com §11 Delta Specs preenchida | Parar → "Delta Specs não encontrada no SDD" |
|
|
45
|
+
| 5 | `docs/Estrutura/` está populado | Parar → "docs/Estrutura/ vazio — execute /sf-setup-projeto primeiro" |
|
|
46
|
+
|
|
47
|
+
## Passos
|
|
48
|
+
|
|
49
|
+
### 1. Ler Delta Specs
|
|
50
|
+
Ler `sdd.md` §11 e classificar cada delta:
|
|
51
|
+
|
|
52
|
+
| Tipo | Significado | Exemplo |
|
|
53
|
+
|------|------------|---------|
|
|
54
|
+
| **ADDED** | Elemento novo no sistema | Nova tabela `clientes`, novo endpoint POST /api/v1/clientes |
|
|
55
|
+
| **MODIFIED** | Elemento existente alterado | Tabela `usuarios` recebe coluna `telefone` |
|
|
56
|
+
| **REMOVED** | Elemento removido do sistema | Endpoint DELETE /api/v1/legacy removido |
|
|
57
|
+
|
|
58
|
+
### 2. Mapear deltas para docs alvo
|
|
59
|
+
Cada delta afeta um ou mais docs em `docs/Estrutura/`:
|
|
60
|
+
|
|
61
|
+
| Elemento | Doc alvo |
|
|
62
|
+
|----------|----------|
|
|
63
|
+
| Tabelas, colunas, índices | `Modelo_Dados.md` |
|
|
64
|
+
| Endpoints, contratos | `API.md` |
|
|
65
|
+
| Decisões de arquitetura | `Arquitetura.md` + `ADRs.md` |
|
|
66
|
+
| Mudanças de infra | `Infraestrutura.md` |
|
|
67
|
+
| Mudanças de segurança | `Seguranca.md` |
|
|
68
|
+
| Mudanças de stack | `Stack.md` |
|
|
69
|
+
| Mudanças de visão/escopo | `Visao.md` |
|
|
70
|
+
|
|
71
|
+
### 3. Aplicar cada delta
|
|
72
|
+
Para cada delta, no doc alvo:
|
|
73
|
+
|
|
74
|
+
**ADDED:**
|
|
75
|
+
- Adicionar novo conteúdo na seção apropriada do doc
|
|
76
|
+
- Registrar no changelog
|
|
77
|
+
|
|
78
|
+
**MODIFIED:**
|
|
79
|
+
- Localizar elemento existente no doc
|
|
80
|
+
- Aplicar a modificação
|
|
81
|
+
- Registrar no changelog
|
|
82
|
+
|
|
83
|
+
**REMOVED:**
|
|
84
|
+
- Localizar elemento existente no doc
|
|
85
|
+
- Remover ou marcar como deprecated (conforme contexto)
|
|
86
|
+
- Registrar no changelog
|
|
87
|
+
|
|
88
|
+
**Formato do changelog** (no final de cada doc afetado):
|
|
89
|
+
```markdown
|
|
90
|
+
## Changelog
|
|
91
|
+
|
|
92
|
+
| Data | Feature | Tipo | Descrição |
|
|
93
|
+
|------|---------|------|-----------|
|
|
94
|
+
| 2026-04-08 | feat_cadastro_cliente | ADDED | Tabela `clientes`, tabela `clientes_enderecos` |
|
|
95
|
+
| 2026-04-08 | feat_cadastro_cliente | ADDED | POST/GET /api/v1/clientes |
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 4. Validar consistência
|
|
99
|
+
Após todas alterações:
|
|
100
|
+
- Verificar que docs não ficaram com referências quebradas
|
|
101
|
+
- Verificar que REMOVED não deixou referências órfãs em outros docs
|
|
102
|
+
- Se inconsistência detectada → reportar ao usuário, não corrigir automaticamente
|
|
103
|
+
|
|
104
|
+
### 5. Atualizar status
|
|
105
|
+
- `.context.md` → status: `done`
|
|
106
|
+
- `docs/Desenvolvimento/progresso.md` → feature marcada como concluída
|
|
107
|
+
- Informar ao usuário:
|
|
108
|
+
```
|
|
109
|
+
✅ Delta Specs aplicadas em docs/Estrutura/
|
|
110
|
+
|
|
111
|
+
Docs atualizados:
|
|
112
|
+
- Modelo_Dados.md — ADDED: tabelas clientes, clientes_enderecos
|
|
113
|
+
- API.md — ADDED: endpoints POST/GET /api/v1/clientes
|
|
114
|
+
|
|
115
|
+
Feature {nome} concluída.
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Saídas
|
|
121
|
+
|
|
122
|
+
| Arquivo | Descrição |
|
|
123
|
+
|---------|-----------|
|
|
124
|
+
| `docs/Estrutura/*.md` | Docs globais atualizados com deltas da feature |
|
|
125
|
+
| `progresso.md` (global) | Feature marcada como concluída |
|
|
126
|
+
| `.context.md` | Status: `done` |
|
|
127
|
+
|
|
128
|
+
## Pós-condições
|
|
129
|
+
- `docs/Estrutura/` reflete o estado real do sistema
|
|
130
|
+
- Cada mudança rastreável: changelog → feature → SDD → PRD → insumo
|
|
131
|
+
- Feature completamente concluída
|
|
132
|
+
|
|
133
|
+
## Erros
|
|
134
|
+
|
|
135
|
+
| Erro | Ação |
|
|
136
|
+
|------|------|
|
|
137
|
+
| Nome não informado | Parar, mostrar exemplo |
|
|
138
|
+
| Status não é dev_done | Parar, sugerir /sf-dev |
|
|
139
|
+
| Tipo é setup | Parar, informar que setup não usa merge-delta |
|
|
140
|
+
| Delta Specs vazia | Informar (legítimo em refactors internos), marcar como done |
|
|
141
|
+
| Elemento MODIFIED/REMOVED não encontrado no doc alvo | Parar, reportar conflito — pedir resolução manual |
|
|
142
|
+
| Inconsistência entre docs após merge | Parar, listar inconsistências |
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sf-pausar
|
|
3
|
+
description: |
|
|
4
|
+
Encerrar sessão. Salva estado, atualiza napkin, gera retomada.md.
|
|
5
|
+
Trigger: /sf-pausar
|
|
6
|
+
author: GustavoMaritan
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
date: 2026-04-08
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill: /sf-pausar
|
|
12
|
+
|
|
13
|
+
> Encerra a sessão de trabalho de forma organizada.
|
|
14
|
+
> Consolida estado, atualiza memória, gera ponto de retomada para a próxima sessão.
|
|
15
|
+
|
|
16
|
+
## Tipo
|
|
17
|
+
Utilitária — roda a qualquer momento
|
|
18
|
+
|
|
19
|
+
## Uso
|
|
20
|
+
```
|
|
21
|
+
/sf-pausar
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Passos
|
|
27
|
+
|
|
28
|
+
### 1. Levantar estado atual de cada feature/setup
|
|
29
|
+
|
|
30
|
+
Para cada `.context.md` em `docs/Desenvolvimento/*/`:
|
|
31
|
+
- Ler status atual
|
|
32
|
+
- Ler Progresso.md (se existir) → % concluído, fase atual
|
|
33
|
+
- Identificar tasks em andamento (`- [ ]` com dependências resolvidas)
|
|
34
|
+
|
|
35
|
+
### 2. Verificar working tree dos repos
|
|
36
|
+
|
|
37
|
+
Para cada repo em `projetos/`:
|
|
38
|
+
```bash
|
|
39
|
+
cd projetos/{repo}
|
|
40
|
+
git status --short
|
|
41
|
+
git log --oneline -3
|
|
42
|
+
```
|
|
43
|
+
- Listar mudanças não commitadas
|
|
44
|
+
- Listar branches ativas
|
|
45
|
+
- Se há working tree sujo → avisar (sugerir commit antes de pausar)
|
|
46
|
+
|
|
47
|
+
### 3. Atualizar `.ai/memory/napkin.md`
|
|
48
|
+
|
|
49
|
+
Adicionar/atualizar seção `## Sessão Atual` com:
|
|
50
|
+
- Data da sessão
|
|
51
|
+
- O que foi feito (tasks concluídas, fases entregues)
|
|
52
|
+
- O que estava em andamento (task atual, bloqueios)
|
|
53
|
+
- Decisões tomadas durante a sessão
|
|
54
|
+
- Armadilhas encontradas (se houver novos aprendizados)
|
|
55
|
+
|
|
56
|
+
### 4. Gerar resumo de retomada
|
|
57
|
+
|
|
58
|
+
Criar/atualizar `docs/Desenvolvimento/retomada.md`:
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
# Ponto de Retomada — {{DATA}}
|
|
62
|
+
|
|
63
|
+
> Gerado pelo /sf-pausar. Leia este arquivo ao iniciar a próxima sessão.
|
|
64
|
+
|
|
65
|
+
## Estado geral
|
|
66
|
+
|
|
67
|
+
| Feature/Setup | Status | Fase atual | % | Próxima ação |
|
|
68
|
+
|---------------|--------|------------|---|-------------|
|
|
69
|
+
| {{nome}} | {{status}} | Fase {{N}} | {{%}} | {{ação}} |
|
|
70
|
+
|
|
71
|
+
## Repos — estado do git
|
|
72
|
+
|
|
73
|
+
| Repo | Branch ativa | Working tree | Último commit |
|
|
74
|
+
|------|-------------|-------------|---------------|
|
|
75
|
+
| {{repo}} | {{branch}} | limpo/sujo | {{commit msg}} |
|
|
76
|
+
|
|
77
|
+
## O que estava em andamento
|
|
78
|
+
|
|
79
|
+
- Task: {{AREA-NNN}} — {{descrição}}
|
|
80
|
+
- Bloqueios: {{se houver}}
|
|
81
|
+
- Decisões pendentes: {{se houver}}
|
|
82
|
+
|
|
83
|
+
## Para retomar
|
|
84
|
+
|
|
85
|
+
1. {{Passo 1 — ex: "Subir infra: docker compose up -d"}}
|
|
86
|
+
2. {{Passo 2 — ex: "Continuar /sf-dev feat_mvp --fase 2"}}
|
|
87
|
+
3. {{Passo 3 — ex: "Resolver ambiguidade X do PRD"}}
|
|
88
|
+
|
|
89
|
+
## Aprendizados desta sessão
|
|
90
|
+
|
|
91
|
+
- {{Decisão ou armadilha que vale registrar}}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 5. Informar ao usuário
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
✅ Sessão encerrada. Estado salvo em:
|
|
98
|
+
- `.ai/memory/napkin.md` — memória atualizada
|
|
99
|
+
- `docs/Desenvolvimento/retomada.md` — ponto de retomada
|
|
100
|
+
|
|
101
|
+
Para retomar na próxima sessão:
|
|
102
|
+
1. Ler retomada.md
|
|
103
|
+
2. Seguir os passos listados em "Para retomar"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Saídas
|
|
109
|
+
|
|
110
|
+
| Arquivo | Descrição |
|
|
111
|
+
|---------|-----------|
|
|
112
|
+
| `.ai/memory/napkin.md` | Sessão atual atualizada |
|
|
113
|
+
| `docs/Desenvolvimento/retomada.md` | Ponto de retomada com estado completo |
|
|
114
|
+
|
|
115
|
+
## Notas
|
|
116
|
+
|
|
117
|
+
- Não modifica .context.md (o status da pipeline não muda ao pausar)
|
|
118
|
+
- Não faz commit automático — se tem working tree sujo, avisa mas não força
|
|
119
|
+
- Pode ser chamada a qualquer momento, não só no final do dia
|
|
120
|
+
- O arquivo `retomada.md` é sobrescrito a cada /sf-pausar (é ponto atual, não histórico)
|
|
@@ -0,0 +1,178 @@
|
|
|
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 | `docs/Desenvolvimento/{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/Estrutura/` (Stack, Arquitetura — para convenções por área)
|
|
51
|
+
- Ler `docs/Desenvolvimento/rules.md` (padrões de código, commit, branch)
|
|
52
|
+
- Carregar template `docs/_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/Estrutura/ é gerado pelo /sf-design (passo 3).
|
|
72
|
+
> DOC só 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 só é `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 (ou — se 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/Config → DTOs/Validações → Repository/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/Estrutura/ a partir do TRD |
|
|
122
|
+
|
|
123
|
+
### 5. Gerar `Progresso.md`
|
|
124
|
+
Usando template `docs/_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 `docs/Desenvolvimento/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 há 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 |
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sf-setup-projeto
|
|
3
|
+
description: |
|
|
4
|
+
Bootstrap do projeto. Cria contexto TRD, chama /sf-extract, para no checkpoint.
|
|
5
|
+
Trigger: /sf-setup-projeto
|
|
6
|
+
author: GustavoMaritan
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
date: 2026-04-08
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill: /sf-setup-projeto
|
|
12
|
+
|
|
13
|
+
> Orquestrador de bootstrap do projeto. Executa uma única vez.
|
|
14
|
+
> Cria contexto TRD, chama `/extract` e para no checkpoint de aprovação.
|
|
15
|
+
|
|
16
|
+
## Tipo
|
|
17
|
+
Orquestrador (primeira etapa do pipeline)
|
|
18
|
+
|
|
19
|
+
## Uso
|
|
20
|
+
```
|
|
21
|
+
/sf-setup-projeto
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Pré-condições
|
|
25
|
+
|
|
26
|
+
| # | Validação | Se falhar |
|
|
27
|
+
|---|-----------|-----------|
|
|
28
|
+
| 1 | `docs/PM/setup_projeto/` existe | Parar → "Crie a pasta docs/PM/setup_projeto/ e adicione seus insumos" |
|
|
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/Estrutura/` está vazio ou contém apenas templates vazios | Parar → "Setup já foi executado. Use /sf-feature para novas funcionalidades" |
|
|
31
|
+
| 4 | `docs/Desenvolvimento/setup_projeto/.context.md` não existe ou status é `not_started` | Parar → "Setup já está em andamento. Verifique o status em .context.md" |
|
|
32
|
+
|
|
33
|
+
## Passos
|
|
34
|
+
|
|
35
|
+
### 1. Criar estrutura
|
|
36
|
+
```
|
|
37
|
+
docs/Desenvolvimento/setup_projeto/
|
|
38
|
+
├── .context.md ← criado agora
|
|
39
|
+
└── (TRD.md será criado pelo /extract)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 2. Criar `.context.md`
|
|
43
|
+
```yaml
|
|
44
|
+
---
|
|
45
|
+
nome: "setup_projeto"
|
|
46
|
+
tipo: "setup"
|
|
47
|
+
documento: "TRD"
|
|
48
|
+
pm_path: "docs/PM/setup_projeto/"
|
|
49
|
+
status: "not_started"
|
|
50
|
+
ultima_skill: "/sf-setup-projeto"
|
|
51
|
+
atualizado_em: "{{ISO_DATETIME}}"
|
|
52
|
+
---
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 3. Sugerir /sf-discovery (RECOMENDADO)
|
|
56
|
+
|
|
57
|
+
Antes de extrair, perguntar ao usuário:
|
|
58
|
+
```
|
|
59
|
+
📋 Insumos encontrados em docs/PM/setup_projeto/.
|
|
60
|
+
|
|
61
|
+
Recomendo rodar /sf-discovery antes da extração para:
|
|
62
|
+
- Análise profunda dos insumos (parseia drawio, XML, SQL completo)
|
|
63
|
+
- Identificar gaps e contradições antes de estruturar
|
|
64
|
+
- Validar entendimento com você (mapa do sistema)
|
|
65
|
+
|
|
66
|
+
Quer rodar /sf-discovery docs/PM/setup_projeto/ agora? (s/n)
|
|
67
|
+
Se SIM → rodar discovery, salvar discovery.md, depois continuar com extract
|
|
68
|
+
Se NÃO → pular direto para /sf-extract (ok para insumos simples)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Se o usuário aceitar:
|
|
72
|
+
- Rodar `/sf-discovery docs/PM/setup_projeto/`
|
|
73
|
+
- Aguardar conclusão — discovery.md salvo em `docs/Desenvolvimento/setup_projeto/`
|
|
74
|
+
- Continuar para o passo 4
|
|
75
|
+
|
|
76
|
+
### 4. Chamar `/sf-extract setup_projeto`
|
|
77
|
+
O `/sf-extract` lê os insumos + discovery.md (se existir), gera o TRD e atualiza status para `extract_done`.
|
|
78
|
+
|
|
79
|
+
### 5. CHECKPOINT — Parar e informar o usuário
|
|
80
|
+
Mensagem ao usuário:
|
|
81
|
+
```
|
|
82
|
+
✅ TRD gerado em docs/Desenvolvimento/setup_projeto/TRD.md
|
|
83
|
+
|
|
84
|
+
Revise o documento. Quando estiver satisfeito, execute:
|
|
85
|
+
/sf-design setup_projeto
|
|
86
|
+
|
|
87
|
+
Se precisar adicionar mais insumos, coloque na pasta docs/PM/setup_projeto/
|
|
88
|
+
e execute:
|
|
89
|
+
/sf-extract setup_projeto
|
|
90
|
+
```
|
|
91
|
+
|
|
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/Estrutura/ + projetos.yaml)
|
|
94
|
+
2. `/sf-plan setup_projeto` (gera tasks com campo Repo por task)
|
|
95
|
+
3. `/sf-dev setup_projeto` (INFRA-001 cria/clona repos em projetos/, executa tasks nos repos corretos)
|
|
96
|
+
|
|
97
|
+
## Saídas diretas desta skill
|
|
98
|
+
- `docs/Desenvolvimento/setup_projeto/.context.md`
|
|
99
|
+
- `docs/Desenvolvimento/setup_projeto/TRD.md` (via /extract)
|
|
100
|
+
- `docs/Desenvolvimento/setup_projeto/.extract-log.md` (via /extract)
|
|
101
|
+
|
|
102
|
+
## Saídas indiretas (skills subsequentes)
|
|
103
|
+
- `sdd.md` (via /design)
|
|
104
|
+
- `projetos.yaml` (via /sf-design — manifesto de repos)
|
|
105
|
+
- `docs/Estrutura/` populado (via /design)
|
|
106
|
+
- `*_tasks.md` + `Progresso.md` (via /plan)
|
|
107
|
+
- `projetos/` com repos criados/clonados (via /sf-dev INFRA-001)
|
|
108
|
+
|
|
109
|
+
## Erros
|
|
110
|
+
|
|
111
|
+
| Erro | Ação |
|
|
112
|
+
|------|------|
|
|
113
|
+
| PM/setup_projeto/ não existe | Parar, instruir criação |
|
|
114
|
+
| PM/setup_projeto/ vazio | Parar, listar formatos aceitos |
|
|
115
|
+
| Estrutura/ já populado | Parar, sugerir /sf-feature |
|
|
116
|
+
| Pipeline já iniciado | Parar, mostrar status atual do .context.md |
|
|
117
|
+
|
|
118
|
+
## Notas
|
|
119
|
+
- Esta skill roda **uma única vez** por projeto
|
|
120
|
+
- docs/Estrutura/ é gerado pelo /sf-design (passo 3), não por tasks DOC
|
|
121
|
+
- `projetos.yaml` é gerado pelo /sf-design (passo 3b) — mapeia serviços para repos
|
|
122
|
+
- Repos são criados/clonados pelo /sf-dev (INFRA-001) dentro de `projetos/`
|
|
123
|
+
- O `/merge-delta` NÃO se aplica ao setup (é criação, não atualização)
|
|
File without changes
|