spec-first-copilot 0.6.0-beta.5 → 0.6.0-beta.6
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 +1 -1
- package/templates/.github/CHANGELOG.md +54 -0
- package/templates/.github/templates/feature/PRD.template.md +11 -5
- package/templates/.github/templates/feature/Progresso.template.md +7 -2
- package/templates/.github/templates/feature/context.template.md +6 -6
- package/templates/.github/templates/feature/projetos.template.yaml +25 -19
- package/templates/.github/templates/feature/sdd.template.md +14 -7
package/package.json
CHANGED
|
@@ -8,6 +8,60 @@
|
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
## 0.6.0-beta.6 (2026-04-13)
|
|
12
|
+
|
|
13
|
+
### Fixes detectados no smoke test de `beta.5`
|
|
14
|
+
|
|
15
|
+
Rodamos o pipeline completo (`/sf-start → /sf-extract → /sf-design → /sf-plan`) em
|
|
16
|
+
projeto novo com feature simples (todo app backend) e detectamos 6 inconsistências
|
|
17
|
+
entre skills e templates. Todas corrigidas:
|
|
18
|
+
|
|
19
|
+
**1. PRD §14 — coluna "Resolvido em docs/" adicionada**
|
|
20
|
+
|
|
21
|
+
Skill `/sf-extract` (beta.5) descreveu mecanismo do Analyzer marcar ambiguidades
|
|
22
|
+
como "resolvido em docs/X §Y", mas o template do PRD não tinha coluna para isso.
|
|
23
|
+
Agora a tabela de §14 tem 6 colunas: `ID | Pergunta | Contexto | Fonte | Resposta | Resolvido em docs/`.
|
|
24
|
+
|
|
25
|
+
**2. PRD §14 — renomeada "Resposta do usuário" → "Resposta"**
|
|
26
|
+
|
|
27
|
+
Skill `/sf-extract` fala em preencher "coluna `Resposta`" mas o template tinha
|
|
28
|
+
"Resposta do usuário". Alinhado com o skill. Também adicionado ID padronizado
|
|
29
|
+
`AMB-NNN` na primeira coluna (antes era só `#`).
|
|
30
|
+
|
|
31
|
+
**3. PRD §14 e SDD §12 padronizados**
|
|
32
|
+
|
|
33
|
+
SDD §12 Ambiguidades também passou a usar ID `AMB-NNN` continuando a sequência
|
|
34
|
+
do PRD §14. Texto do bloqueio do SDD corrigido: não é o `/sf-design` que bloqueia
|
|
35
|
+
no §12 (ele já gerou), é o `/sf-plan` (que lê o SDD como input).
|
|
36
|
+
|
|
37
|
+
**4. Status do Progresso.md clarificado**
|
|
38
|
+
|
|
39
|
+
`Status Geral` do Progresso.md era confundido com o status da pipeline em
|
|
40
|
+
`.context.md`. Renomeado para `Status das Fases` + bloco explicativo deixando
|
|
41
|
+
claro que **este arquivo rastreia fases de entrega do PRD §11, não o pipeline**.
|
|
42
|
+
|
|
43
|
+
**5. Bool tipado corretamente no `.context.md`**
|
|
44
|
+
|
|
45
|
+
Antes: `first_run: "{{true|false}}"` (string com aspas). Depois: `first_run: {{true|false}}`
|
|
46
|
+
(bool YAML real). Instruções do template reforçam: "SEM aspas".
|
|
47
|
+
|
|
48
|
+
**6. `projetos.yaml` sem stack hardcoded**
|
|
49
|
+
|
|
50
|
+
Template tinha `stack: ".NET 8"` literal no exemplo `api`. Podia induzir projetos
|
|
51
|
+
Node/Python a errar. Agora usa `{{STACK_BACKEND}}` como placeholder + bloco
|
|
52
|
+
explicativo listando exemplos por stack (Backend/Frontend/Mobile) como referência.
|
|
53
|
+
Instruções reforçam: "stack DEVE vir do SDD §3.1".
|
|
54
|
+
|
|
55
|
+
### Extras
|
|
56
|
+
|
|
57
|
+
**SDD template com guidance sobre escopo pequeno**
|
|
58
|
+
|
|
59
|
+
Adicionado bloco no topo do template explicando que 3-4 seções preenchidas + o
|
|
60
|
+
resto como "N/A" é comportamento esperado para apps simples — não inflar conteúdo
|
|
61
|
+
pra "preencher" seções vazias. Áreas não tocadas (§4-§7) usam `GATE: NÃO`.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
11
65
|
## 0.6.0-beta.5 (2026-04-13)
|
|
12
66
|
|
|
13
67
|
### Refino dos templates de specs/
|
|
@@ -259,11 +259,17 @@ RE-EXTRAÇÃO:
|
|
|
259
259
|
|
|
260
260
|
## 14. Ambiguidades e Perguntas
|
|
261
261
|
|
|
262
|
-
> ⚠️ **BLOQUEANTE** — o
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
262
|
+
> ⚠️ **BLOQUEANTE** — o `/design` NÃO avança enquanto houver linha com `Resposta` vazia E `Resolvido em docs/` vazio.
|
|
263
|
+
>
|
|
264
|
+
> **Como responder** (ver `.claude/commands/extract.md` → "Como responder ambiguidades"):
|
|
265
|
+
> preencher a coluna `Resposta` direto nesta tabela e rodar `/design` de novo.
|
|
266
|
+
>
|
|
267
|
+
> **Coluna `Resolvido em docs/`**: preenchida pelo Analyzer quando a resposta já
|
|
268
|
+
> existe em `docs/` — formato `docs/{arquivo}.md §{seção}`. NÃO preencher manualmente.
|
|
269
|
+
|
|
270
|
+
| ID | Pergunta | Contexto | Fonte | Resposta | Resolvido em docs/ |
|
|
271
|
+
|----|----------|----------|-------|----------|--------------------|
|
|
272
|
+
| AMB-001 | ⚠️ | | | (aguardando) | — |
|
|
267
273
|
|
|
268
274
|
---
|
|
269
275
|
|
|
@@ -3,12 +3,17 @@
|
|
|
3
3
|
> Visão consolidada do andamento da feature.
|
|
4
4
|
> Organizado por **fases de entrega** — cada fase é um entregável independente.
|
|
5
5
|
> Atualizado automaticamente pelo /dev a cada task concluída.
|
|
6
|
+
>
|
|
7
|
+
> **Este arquivo rastreia FASES DE ENTREGA, não o pipeline do SFW.**
|
|
8
|
+
> O estado do pipeline (extract_done, design_done, plan_done, dev_in_progress, dev_done, done)
|
|
9
|
+
> vive em `.context.md`. Aqui rastreamos: "as fases de entrega do PRD §11 já foram implementadas?"
|
|
6
10
|
|
|
7
11
|
---
|
|
8
12
|
|
|
9
|
-
## Status
|
|
13
|
+
## Status das Fases: `não iniciado`
|
|
10
14
|
|
|
11
|
-
<!-- não iniciado → em desenvolvimento → em revisão → concluído → arquivado
|
|
15
|
+
<!-- não iniciado → em desenvolvimento → em revisão → concluído → arquivado
|
|
16
|
+
(vocabulário PRÓPRIO deste arquivo — não confundir com status da pipeline em .context.md) -->
|
|
12
17
|
|
|
13
18
|
---
|
|
14
19
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
nome: "{{NOME}}"
|
|
3
|
-
first_run:
|
|
4
|
-
prd_empty:
|
|
3
|
+
first_run: {{true|false}}
|
|
4
|
+
prd_empty: {{true|false}}
|
|
5
5
|
areas_tocadas: []
|
|
6
6
|
input_path: "workspace/Input/{{NOME}}/"
|
|
7
7
|
status: "not_started"
|
|
@@ -16,10 +16,10 @@ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
|
16
16
|
|
|
17
17
|
CAMPOS:
|
|
18
18
|
- nome: identificador livre do scope (ex: app_barbearia, feat_login, infra_k8s)
|
|
19
|
-
- first_run:
|
|
20
|
-
|
|
21
|
-
- prd_empty:
|
|
22
|
-
|
|
19
|
+
- first_run: bool (true/false, SEM aspas) — true se docs/ não existia quando /sfw-start foi chamado
|
|
20
|
+
IMUTÁVEL após criação
|
|
21
|
+
- prd_empty: bool (true/false, SEM aspas) — true se /extract marcou PRD como empty (scope puro-técnico)
|
|
22
|
+
Pode mudar em re-extração (empty → non-empty se novo insumo trouxer produto)
|
|
23
23
|
- areas_tocadas: lista de áreas que o scope toca (ex: [BACK, DB]). Preenchido pelo /design.
|
|
24
24
|
Possíveis: BACK, FRONT, DB, INFRA. Usado pelos GATEs do SDD §Área-X.
|
|
25
25
|
- input_path: caminho relativo da pasta de insumos
|
|
@@ -10,16 +10,22 @@
|
|
|
10
10
|
# COMO GERAR:
|
|
11
11
|
# 1. Ler SDD §3.2 Arquitetura → identificar quais serviços existem (api, worker, web, etc.)
|
|
12
12
|
# 2. Para cada serviço, definir: nome do repo, path local, áreas de task, stack
|
|
13
|
-
# 3.
|
|
14
|
-
# 4. Se
|
|
13
|
+
# 3. A stack DEVE vir do SDD §3.1 (Stack) — não inventar, não copiar exemplo
|
|
14
|
+
# 4. Se o repo já existe no GitHub, marcar existing: true
|
|
15
|
+
# 5. Se é novo, marcar existing: false (será criado pelo /dev INFRA-001)
|
|
15
16
|
#
|
|
16
17
|
# REGRAS:
|
|
17
18
|
# - Todo serviço identificado no SDD §3.2 DEVE ter uma entrada
|
|
18
19
|
# - O campo `areas` define quais prefixos de task escrevem nesse repo
|
|
19
20
|
# - Uma área NÃO pode pertencer a dois repos (mapeamento 1:1)
|
|
20
|
-
# - DB pode ir junto com api (se usa
|
|
21
|
-
# - O campo `stack`
|
|
21
|
+
# - DB pode ir junto com api (se usa ORM com migrations no mesmo repo) ou separado
|
|
22
|
+
# - O campo `stack` DEVE ser consistente com SDD §3.1 + docs/architecture.md
|
|
22
23
|
# - O `org` é a organização/user do GitHub
|
|
24
|
+
#
|
|
25
|
+
# EXEMPLOS DE STACK (apenas referência — usar a REAL do SDD):
|
|
26
|
+
# - Backend: ".NET 8", "Node.js 20 + Express", "Python 3.12 + FastAPI", "Go 1.22"
|
|
27
|
+
# - Frontend: "React 18 + Vite", "Next.js 15", "Vue 3 + Nuxt", "Angular 17"
|
|
28
|
+
# - Mobile: "React Native", "Flutter", "Swift / Kotlin nativo"
|
|
23
29
|
# =============================================================================
|
|
24
30
|
|
|
25
31
|
# Organização/usuário no GitHub
|
|
@@ -28,42 +34,42 @@ org: "{{GITHUB_ORG}}"
|
|
|
28
34
|
# Nome base do projeto (usado como prefixo dos repos)
|
|
29
35
|
project: "{{PROJECT_NAME}}"
|
|
30
36
|
|
|
31
|
-
# Repositórios
|
|
37
|
+
# Repositórios — preencher conforme serviços do SDD §3.2
|
|
32
38
|
repos:
|
|
33
|
-
#
|
|
39
|
+
# API backend (exemplo — adaptar stack ao SDD real do projeto)
|
|
34
40
|
api:
|
|
35
|
-
repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-api"
|
|
36
|
-
path: "projetos/api"
|
|
37
|
-
existing: false
|
|
38
|
-
areas: [BACK, DB]
|
|
39
|
-
stack: ".
|
|
40
|
-
branch_prefix: "feature/"
|
|
41
|
+
repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-api"
|
|
42
|
+
path: "projetos/api"
|
|
43
|
+
existing: false # true = clonar existente; false = criar novo
|
|
44
|
+
areas: [BACK, DB] # áreas de task que escrevem aqui (1:1 por área)
|
|
45
|
+
stack: "{{STACK_BACKEND}}" # do SDD §3.1 (ex: "Node.js 20 + Express")
|
|
46
|
+
branch_prefix: "feature/"
|
|
41
47
|
|
|
42
|
-
#
|
|
48
|
+
# Worker / jobs assíncronos (descomentar se SDD §3.2 define)
|
|
43
49
|
# worker:
|
|
44
50
|
# repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-worker"
|
|
45
51
|
# path: "projetos/worker"
|
|
46
52
|
# existing: false
|
|
47
|
-
# areas: [BACK]
|
|
48
|
-
# stack: "
|
|
53
|
+
# areas: [BACK] # ou criar área WORKER dedicada se preferir
|
|
54
|
+
# stack: "{{STACK_WORKER}}"
|
|
49
55
|
# branch_prefix: "feature/"
|
|
50
56
|
|
|
51
|
-
#
|
|
57
|
+
# Frontend web (descomentar se SDD §3.2 define)
|
|
52
58
|
# web:
|
|
53
59
|
# repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-web"
|
|
54
60
|
# path: "projetos/web"
|
|
55
61
|
# existing: false
|
|
56
62
|
# areas: [FRONT]
|
|
57
|
-
# stack: "
|
|
63
|
+
# stack: "{{STACK_FRONTEND}}"
|
|
58
64
|
# branch_prefix: "feature/"
|
|
59
65
|
|
|
60
|
-
#
|
|
66
|
+
# App mobile (descomentar se SDD §3.2 define)
|
|
61
67
|
# mobile:
|
|
62
68
|
# repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-mobile"
|
|
63
69
|
# path: "projetos/mobile"
|
|
64
70
|
# existing: false
|
|
65
71
|
# areas: [MOBILE]
|
|
66
|
-
# stack: "
|
|
72
|
+
# stack: "{{STACK_MOBILE}}"
|
|
67
73
|
# branch_prefix: "feature/"
|
|
68
74
|
|
|
69
75
|
# Notas:
|
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
> Gerado pelo `/design` a partir do PRD (se existir) + chunks tech do `/extract`.
|
|
5
5
|
> O Coder lê APENAS este documento + `specs/{{NOME}}/` e seu task específica.
|
|
6
6
|
> Se não está aqui, não será implementado.
|
|
7
|
+
>
|
|
8
|
+
> **Sobre o tamanho do template**: o SDD tem 12 seções para cobrir o range completo
|
|
9
|
+
> (app simples → sistema distribuído com 5 serviços). Escopo pequeno preenche 3-4
|
|
10
|
+
> seções e marca as outras como "N/A" ou "não se aplica" — isso é **esperado**.
|
|
11
|
+
> Áreas não tocadas (§4-§7) usam `GATE: NÃO` e ficam vazias. Não inflar conteúdo
|
|
12
|
+
> pra preencher seção vazia — "N/A" é resposta válida.
|
|
7
13
|
|
|
8
14
|
---
|
|
9
15
|
|
|
@@ -12,8 +18,8 @@
|
|
|
12
18
|
| Campo | Valor |
|
|
13
19
|
|-------|-------|
|
|
14
20
|
| Scope | `{{NOME}}` |
|
|
15
|
-
| PRD | `workspace/Output/{{NOME}}/PRD.md` — `empty: {{true
|
|
16
|
-
| First-run | `{{true
|
|
21
|
+
| PRD | `workspace/Output/{{NOME}}/PRD.md` — `empty: {{true\|false}}` (sem aspas, bool) |
|
|
22
|
+
| First-run | `{{true\|false}}` — true quando `docs/` não existia antes desta execução |
|
|
17
23
|
| Áreas tocadas | `[BACK?, FRONT?, DB?, INFRA?]` |
|
|
18
24
|
| Status | `rascunho` → `em revisão` → `aprovado` → `em dev` → `concluído` |
|
|
19
25
|
| Autor | `/design` |
|
|
@@ -507,12 +513,13 @@ Then {{resultado esperado}}
|
|
|
507
513
|
|
|
508
514
|
## 12. Ambiguidades Pendentes
|
|
509
515
|
|
|
510
|
-
> ⚠️ **BLOQUEANTE** — `/
|
|
511
|
-
>
|
|
516
|
+
> ⚠️ **BLOQUEANTE** — `/plan` não conclui com ambiguidades abertas.
|
|
517
|
+
> Architect consultou `docs/` antes de listar — itens aqui são genuínos.
|
|
518
|
+
> IDs começam em `AMB-NNN`, continuando a sequência iniciada no PRD §14 (se houver).
|
|
512
519
|
|
|
513
|
-
|
|
|
514
|
-
|
|
515
|
-
|
|
|
520
|
+
| ID | Pergunta | Contexto | Consultei `docs/`? | Resposta |
|
|
521
|
+
|----|----------|----------|--------------------|-----------|
|
|
522
|
+
| AMB-001 | | | sim / não / docs ausente | (aguardando) |
|
|
516
523
|
|
|
517
524
|
---
|
|
518
525
|
|