spec-first-copilot 0.5.0-beta.14 → 0.5.0-beta.16

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spec-first-copilot",
3
- "version": "0.5.0-beta.14",
3
+ "version": "0.5.0-beta.16",
4
4
  "description": "Spec-first workflow kit for GitHub Copilot — AI-driven development with specs, not guesswork",
5
5
  "bin": {
6
6
  "spec-first-copilot": "bin/cli.js"
@@ -20,10 +20,11 @@
20
20
 
21
21
  ### 2. Validar acesso a todas skills
22
22
 
23
- Verificar que TODAS as 10 skills estão acessíveis:
23
+ Verificar que TODAS as 11 skills estão acessíveis:
24
24
 
25
25
  | Skill | Caminho |
26
26
  |-------|---------|
27
+ | `/sf-mcp` | `.github/skills/sf-mcp/SKILL.md` |
27
28
  | `/sf-load` | `.github/skills/sf-load/SKILL.md` |
28
29
  | `/sf-new-project` | `.github/skills/sf-new-project/SKILL.md` |
29
30
  | `/sf-feature` | `.github/skills/sf-feature/SKILL.md` |
@@ -96,6 +97,7 @@ Nenhum código é escrito sem especificação aprovada (SDD).
96
97
 
97
98
  | Skill | Tipo | O que faz |
98
99
  |-------|------|-----------|
100
+ | `/sf-mcp <provider>` | Setup | Configura backend externo interativamente. Cria .mcp.json + sfw.config.yml + ajusta .gitignore |
99
101
  | `/sf-load <nome>` | Utilitária | Puxa insumos do backend (Confluence/filesystem) para workspace/Input/{nome}/. Incremental |
100
102
  | `/sf-new-project <nome>` | Orquestrador | Bootstrap técnico: cria .context.md tipo TRD, chama /sf-extract, para no checkpoint |
101
103
  | `/sf-feature <nome>` | Orquestrador | Feature: cria .context.md tipo PRD, chama /sf-extract, para no checkpoint |
@@ -0,0 +1,295 @@
1
+ # /sf-mcp <provider>
2
+
3
+ Setup interativo de backend externo. Pergunta os dados necessários, descobre a estrutura do projeto e cria todos os arquivos de configuração.
4
+
5
+ ## Providers disponíveis
6
+
7
+ | Provider | O que faz |
8
+ |----------|-----------|
9
+ | `confluence` | Configura MCP Atlassian + descobre projeto + cria `sfw.config.yml` + `.mcp.json` + `.gitignore` |
10
+
11
+ ## Uso
12
+
13
+ ```
14
+ /sf-mcp confluence
15
+ /sf-mcp confluence test ← só testa conexão
16
+ ```
17
+
18
+ ---
19
+
20
+ ## Provider: Confluence
21
+
22
+ ### Passo 1 — Verificar pré-requisitos
23
+
24
+ Verificar se `uvx` está instalado:
25
+ ```bash
26
+ uvx --version
27
+ ```
28
+
29
+ Se NÃO está instalado:
30
+ ```
31
+ uvx não encontrado. Instale com:
32
+ pip install uv
33
+
34
+ Depois rode /sf-mcp confluence novamente.
35
+ ```
36
+ **Parar aqui** se uvx não estiver disponível.
37
+
38
+ ### Passo 2 — Coletar credenciais
39
+
40
+ Perguntar uma por uma:
41
+
42
+ ```
43
+ Configurando Confluence para o SFW.
44
+
45
+ 1. URL do Confluence (ex: https://sua-empresa.atlassian.net/wiki):
46
+ >
47
+
48
+ 2. Email da conta Atlassian (ex: dev@empresa.com):
49
+ >
50
+
51
+ 3. API Token (gere em https://id.atlassian.com/manage-profile/security/api-tokens):
52
+ >
53
+
54
+ 4. Space Key (as letras na URL: /wiki/spaces/XX/...):
55
+ >
56
+ ```
57
+
58
+ ### Passo 3 — Criar `.mcp.json`
59
+
60
+ Verificar se `.mcp.json` já existe:
61
+ - Se existe e já tem entrada `atlassian` → perguntar se quer atualizar
62
+ - Se existe sem `atlassian` → adicionar entrada
63
+ - Se não existe → criar
64
+
65
+ ```json
66
+ {
67
+ "mcpServers": {
68
+ "atlassian": {
69
+ "command": "uvx",
70
+ "args": ["mcp-atlassian"],
71
+ "env": {
72
+ "CONFLUENCE_URL": "{url}",
73
+ "CONFLUENCE_USERNAME": "{email}",
74
+ "CONFLUENCE_API_TOKEN": "{token}"
75
+ }
76
+ }
77
+ }
78
+ }
79
+ ```
80
+
81
+ **IMPORTANTE**: Credenciais hardcoded — `${VAR}` NÃO funciona no Claude Code.
82
+
83
+ ### Passo 4 — Testar conexão e descobrir projeto
84
+
85
+ Testar chamando:
86
+ ```
87
+ mcp__atlassian__confluence_search(query="space.key={space_key}", limit=5)
88
+ ```
89
+ ou
90
+ ```
91
+ mcp__atlassian__confluence_get_page_children(page_id=<root do space>)
92
+ ```
93
+
94
+ **Se MCP não disponível** (primeira vez — `.mcp.json` acabou de ser criado):
95
+ ```
96
+ .mcp.json criado. O Claude Code precisa ser reiniciado para carregar o MCP.
97
+
98
+ 1. Reinicie o Claude Code (feche e abra)
99
+ 2. Rode /sf-mcp confluence novamente — vou continuar de onde paramos
100
+ ```
101
+ **Parar aqui.**
102
+
103
+ **Se MCP funcionar** — pedir o projeto:
104
+
105
+ ```
106
+ Conexão OK!
107
+
108
+ 5. Qual é a page raiz do seu projeto no Confluence?
109
+ Cole o Page ID (número na URL) ou o título exato:
110
+ >
111
+ ```
112
+
113
+ ### Passo 5 — Mapear a árvore do projeto
114
+
115
+ Após receber o Page ID ou título da raiz:
116
+
117
+ 1. Chamar `mcp__atlassian__confluence_get_page` pra confirmar que existe
118
+ 2. Chamar `mcp__atlassian__confluence_get_page_children` na raiz
119
+ 3. Chamar recursivamente nos filhos pra mapear a árvore completa
120
+
121
+ Mostrar ao usuário:
122
+
123
+ ```
124
+ Projeto: "Barbearia Digital" (page_id: 65708)
125
+
126
+ Estrutura encontrada:
127
+ ├── Requisitos (page_id: 360668)
128
+ │ ├── App mobile (page_id: 294950)
129
+ │ └── Painel admin (page_id: 131084)
130
+ ├── Documentação técnica (page_id: 294931)
131
+ ├── Referências (page_id: 557057)
132
+ └── Decisões (page_id: 425998)
133
+ ```
134
+
135
+ ### Passo 6 — Identificar Input e Output
136
+
137
+ Perguntar ao usuário:
138
+
139
+ ```
140
+ Preciso saber qual pasta contém os INSUMOS (Input) e onde devo PUBLICAR os artefatos (Output).
141
+
142
+ Qual dessas é o Input (onde estão os insumos do PM/PO)?
143
+ 1. Requisitos (360668)
144
+ 2. Documentação técnica (294931)
145
+ 3. Referências (557057)
146
+ 4. Decisões (425998)
147
+ 5. Criar nova page "Input"
148
+ >
149
+ ```
150
+
151
+ Após o user escolher Input:
152
+
153
+ ```
154
+ Qual dessas é o Output (onde publico TRD, SDD, Progresso)?
155
+ 1. Documentação técnica (294931)
156
+ 2. Referências (557057)
157
+ 3. Decisões (425998)
158
+ 4. Criar nova page "Output"
159
+ >
160
+ ```
161
+
162
+ **Se o user escolher "Criar nova"** → usar `mcp__atlassian__confluence_create_page` como filha da raiz.
163
+
164
+ ### Passo 7 — Sugerir mapeamento de páginas úteis (opcional)
165
+
166
+ Se a árvore tem outras pages relevantes, sugerir:
167
+
168
+ ```
169
+ Encontrei outras páginas que podem ser úteis durante o desenvolvimento:
170
+
171
+ - "Referências" (557057) → posso consultar durante /sf-extract e /sf-design
172
+ - "Decisões" (425998) → posso consultar para ADRs no /sf-design
173
+
174
+ Quer que eu mapeie essas páginas como contexto adicional? (s/n)
175
+ ```
176
+
177
+ Se sim, registrar no `sfw.config.yml` como `context_pages`.
178
+
179
+ ### Passo 8 — Criar `sfw.config.yml`
180
+
181
+ ```yaml
182
+ project:
183
+ name: "{título da page raiz}"
184
+ root_page_id: "{page_id raiz}"
185
+
186
+ naming:
187
+ output_container: "out_{scope}"
188
+ output_artifact: "{scope} - {type}"
189
+
190
+ input:
191
+ adapter: confluence
192
+ config:
193
+ space_key: "{space_key}"
194
+ parent_page_id: "{page_id escolhido como Input}"
195
+ recursive: true
196
+ include_attachments: true
197
+ cache:
198
+ local_dir: "workspace/Input/"
199
+ log: ".ai/load-log.md"
200
+ incremental: true
201
+
202
+ output:
203
+ targets:
204
+ - name: confluence-mirror
205
+ adapter: confluence
206
+ config:
207
+ space_key: "{space_key}"
208
+ parent_page_id: "{page_id escolhido como Output}"
209
+ publishes: [PRD, TRD, SDD, Progresso]
210
+ mode: auto
211
+ conflict_detection: version
212
+ approval_mechanism: label
213
+ approval_label: "sfw-approved"
214
+
215
+ # Pages de contexto adicional (consultadas pelo /sf-extract e /sf-design)
216
+ # context_pages:
217
+ # - id: "557057"
218
+ # title: "Referências"
219
+ # use_in: [extract, design]
220
+ # - id: "425998"
221
+ # title: "Decisões"
222
+ # use_in: [design]
223
+ ```
224
+
225
+ ### Passo 9 — Ajustar `.gitignore`
226
+
227
+ Adicionar se não existem:
228
+ - `.mcp.json`
229
+ - Bloco workspace ignored:
230
+ ```
231
+ # SFW: workspace ignored (external backend detected)
232
+ workspace/Output/**
233
+ !workspace/Output/.gitkeep
234
+ ```
235
+
236
+ ### Passo 10 — Resumir
237
+
238
+ ```
239
+ Confluence configurado!
240
+
241
+ Projeto: {nome} ({page_id raiz})
242
+ Input: {título Input} ({page_id})
243
+ Output: {título Output} ({page_id})
244
+
245
+ Arquivos criados/atualizados:
246
+ .mcp.json ← credenciais (gitignored)
247
+ sfw.config.yml ← configuração do projeto
248
+ .gitignore ← atualizado
249
+
250
+ O projeto tem {N} scopes no Input:
251
+ - {lista dos filhos do Input}
252
+
253
+ Próximo passo:
254
+ /sf-new-project <nome-do-scope> ← bootstrap técnico
255
+ /sf-feature <nome-do-scope> ← nova feature
256
+ ```
257
+
258
+ ---
259
+
260
+ ## Subcomando: `/sf-mcp confluence test`
261
+
262
+ Apenas testa a conexão sem criar/modificar arquivos:
263
+
264
+ 1. Verificar que `.mcp.json` existe
265
+ 2. Verificar que `sfw.config.yml` existe e tem `adapter: confluence`
266
+ 3. Chamar `mcp__atlassian__confluence_get_page_children(page_id={input.parent_page_id})`
267
+ 4. Se OK → "Conexão OK! {N} scopes encontrados em Input: {lista}"
268
+ 5. Se falha → orientar troubleshooting (ver `.github/adapters/SETUP.md`)
269
+
270
+ ---
271
+
272
+ ## Notas
273
+
274
+ - `.mcp.json` é SEMPRE gitignored — contém credenciais
275
+ - `sfw.config.yml` é commitável — zero segredos
276
+ - Após criar `.mcp.json`, Claude Code PRECISA ser reiniciado
277
+ - O framework conhece o projeto INTEIRO (raiz + toda a árvore), não só Input/Output
278
+ - `context_pages` permite que /sf-extract e /sf-design consultem páginas extras como referência
279
+ - Token Atlassian pode expirar — se der 401, gerar novo e atualizar `.mcp.json`
280
+
281
+ ## Erros
282
+
283
+ | Erro | Ação |
284
+ |------|------|
285
+ | uvx não instalado | Parar, instruir instalação |
286
+ | MCP não disponível | Pedir reinício do Claude Code |
287
+ | Page raiz não encontrada | Pedir ID/título correto |
288
+ | Sem permissão de escrita | Informar, pedir ao admin |
289
+ | Space key errado | Listar spaces disponíveis se possível |
290
+
291
+ ## Referências
292
+
293
+ - Setup guide completo: `.github/adapters/SETUP.md`
294
+ - Confluence adapter: `.github/adapters/confluence.md`
295
+ - Interface do adapter: `.github/adapters/interface.md`
@@ -23,6 +23,8 @@
23
23
  # ----------------------------------------------------------------------------
24
24
  project:
25
25
  name: "Meu Projeto"
26
+ # Page ID raiz do projeto no Confluence (o framework conhece o projeto inteiro)
27
+ # root_page_id: "65708"
26
28
 
27
29
  # ----------------------------------------------------------------------------
28
30
  # naming — templates de nome (aplicados pela engine em .github/adapters/naming.md)
@@ -129,3 +131,17 @@ output:
129
131
  # mode: auto
130
132
  # conflict_detection: hash
131
133
  # approval_mechanism: none
134
+
135
+ # ----------------------------------------------------------------------------
136
+ # context_pages — páginas extras que o framework pode consultar (opcional)
137
+ # ----------------------------------------------------------------------------
138
+ # O /mcp descobre a árvore do projeto e sugere pages que podem ser úteis
139
+ # como contexto durante /extract e /design (referências, decisões, etc.)
140
+ #
141
+ # context_pages:
142
+ # - id: "557057"
143
+ # title: "Referências"
144
+ # use_in: [extract, design]
145
+ # - id: "425998"
146
+ # title: "Decisões"
147
+ # use_in: [design]