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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spec-first-copilot",
3
- "version": "0.6.0-beta.5",
3
+ "version": "0.6.0-beta.6",
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"
@@ -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 fluxo NÃO avança até o usuário responder TODAS.
263
-
264
- | # | Pergunta | Contexto | Fonte | Resposta do usuário |
265
- |---|----------|----------|-------|---------------------|
266
- | 1 | ⚠️ | | | (aguardando) |
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 Geral: `não iniciado`
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: "{{true|false}}"
4
- prd_empty: "{{true|false}}"
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: "true" se docs/ não existia quando /sfw-start foi chamado (bootstrap)
20
- "false" se é feature/incremento em projeto existente
21
- - prd_empty: "true" se o /extract marcou PRD como empty (scope puro-técnico)
22
- "false" se PRD tem conteúdo de produto
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. Se o repo existe no GitHub, marcar existing: true
14
- # 4. Se é novo, marcar existing: false (será criado pelo /dev INFRA-001)
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 EF migrations) ou separado (se repo de migrations)
21
- # - O campo `stack` deve ser consistente com docs/architecture.md (seção Stack Principal)
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
- # Exemplo: API backend
39
+ # API backend (exemplo — adaptar stack ao SDD real do projeto)
34
40
  api:
35
- repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-api" # nome completo do repo
36
- path: "projetos/api" # path local (relativo à raiz)
37
- existing: false # true = clonar, false = criar
38
- areas: [BACK, DB] # áreas de task que escrevem aqui
39
- stack: ".NET 8" # stack principal
40
- branch_prefix: "feature/" # prefixo de branches de 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
- # Exemplo: Worker/background jobs
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] # worker tem tasks BACK separadas
48
- # stack: ".NET 8"
53
+ # areas: [BACK] # ou criar área WORKER dedicada se preferir
54
+ # stack: "{{STACK_WORKER}}"
49
55
  # branch_prefix: "feature/"
50
56
 
51
- # Exemplo: Frontend web
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: "React"
63
+ # stack: "{{STACK_FRONTEND}}"
58
64
  # branch_prefix: "feature/"
59
65
 
60
- # Exemplo: App mobile
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: "React Native"
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|false}}` |
16
- | First-run | `{{true|false}}` — true quando `docs/` não existia antes desta execução |
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** — `/design` não conclui com ambiguidades abertas.
511
- > Analyzer consultou `docs/` antes de listar — itens aqui são genuínos.
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
- | # | Pergunta | Contexto | Consultei `docs/`? | Resposta |
514
- |---|----------|----------|--------------------|-----------|
515
- | 1 | | | sim / não / docs ausente | (aguardando) |
520
+ | ID | Pergunta | Contexto | Consultei `docs/`? | Resposta |
521
+ |----|----------|----------|--------------------|-----------|
522
+ | AMB-001 | | | sim / não / docs ausente | (aguardando) |
516
523
 
517
524
  ---
518
525