spec-first-copilot 0.7.0 → 0.8.0-beta.2

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 CHANGED
@@ -20,6 +20,7 @@ agents especializados por área, security review e rastreabilidade ponta a ponta
20
20
  - [Instalação](#instalação)
21
21
  - [Estrutura gerada](#estrutura-gerada)
22
22
  - [Pipeline passo a passo](#pipeline-passo-a-passo)
23
+ - [Brownfield: assumir aplicação existente](#brownfield-assumir-aplicação-existente)
23
24
  - [Skills disponíveis](#skills-disponíveis)
24
25
  - [Agents especializados](#agents-especializados)
25
26
  - [Backends plugáveis (adapters)](#backends-plugáveis-adapters)
@@ -39,6 +40,7 @@ de código.
39
40
  **Use-cases cobertos**:
40
41
  - Bootstrap de projeto novo (define stack + arquitetura + primeiras features)
41
42
  - Features novas em projeto existente (merge aditivo em docs cross-feature)
43
+ - **Brownfield**: assumir aplicação existente — `/sf-onboard` lê o código e gera a base documental (ver [seção dedicada](#brownfield-assumir-aplicação-existente))
42
44
  - Bugs e tasks técnicas (mesmo pipeline, escopo menor)
43
45
  - Times multi-dev (contratos firmes via `specs/` + `projetos.yaml`)
44
46
 
@@ -176,6 +178,48 @@ ausência/presença de `docs/`.
176
178
  [`apresentacao.html`](https://github.com/gustavomaritan-labs/spec-first-workflow/blob/main/packages/apresentacao.html)
177
179
  pra ver o fluxo completo com personas, artefatos e adapters.
178
180
 
181
+ ## Brownfield: assumir aplicação existente
182
+
183
+ Para projetos que **já existem** e não nasceram com SFW. O `/sf-onboard` lê o
184
+ código, identifica stack/padrões/decisões observadas, e popula a base documental
185
+ (TRD + `docs/` + `projetos.yaml`) sem PRD.
186
+
187
+ **Filosofia**: cartógrafo, não arquiteto. Descreve o que existe sem julgar.
188
+ Coders de features futuras **seguem** os padrões observados — mudanças entram
189
+ como features propostas pelo dev.
190
+
191
+ ```bash
192
+ # 1. Criar shell SFW vazio (mesma instalação)
193
+ spec-first-copilot init --name=MeuProjeto
194
+ cd MeuProjeto
195
+
196
+ # 2. Onboardar repo existente (pré-req: SSH/PAT já configurado)
197
+ /sf-onboard https://github.com/empresa/app-legado.git
198
+
199
+ # 3. (Multi-repo) Re-rodar pra cada repo do mesmo projeto
200
+ /sf-onboard https://github.com/empresa/app-legado-web.git
201
+ /sf-onboard https://github.com/empresa/app-legado-worker.git
202
+
203
+ # 4. Começar features novas com o pipeline normal
204
+ /sf-start feat_nova_funcionalidade
205
+ ```
206
+
207
+ **O que é gerado**:
208
+ - `projetos/<repo>/` — clone(s) com `.git` próprio
209
+ - `workspace/Output/onboard_<repo>/TRD.md` — completo, com §1.6 Padrões Observados (snippets reais)
210
+ - `workspace/Input/onboard_<repo>/code-snapshot.md` — índice + hashes (re-onboard incremental)
211
+ - `docs/` — 5 arquivos cross-feature populados
212
+ - `projetos.yaml` — entries dos repos clonados
213
+ - `docs/decisions.md` — ADRs **inferidas** com flag `Inferido: true` (dev revisa e remove flag ao confirmar)
214
+
215
+ **Re-onboard** quando o código legado evolui: rodar de novo, hash detecta arquivos
216
+ modificados, merge aditivo no TRD.
217
+
218
+ **Diferença vs `/sf-start`**: brownfield NÃO gera PRD nem ambiguidades (código é
219
+ a verdade), não tem checkpoint humano, e auto-aprova TRD. Após onboard, features
220
+ novas entram pelo `/sf-start` normal — `first_run` da feature já será `false`
221
+ porque `docs/` existe.
222
+
179
223
  ## Skills disponíveis
180
224
 
181
225
  | Skill | Tipo | Função |
@@ -184,6 +228,7 @@ pra ver o fluxo completo com personas, artefatos e adapters.
184
228
  | `/sf-load <scope>` | Utilitária | Puxa Input do backend (incremental via hash) |
185
229
  | `/sf-publish <scope> <tipo>` | Utilitária | Publica PRD/TRD/Progresso nos targets. Auto-chamada por extract/plan |
186
230
  | `/sf-start <scope>` | Orquestrador | Entrada única. Cria `.context.md`, chama `/sf-load` + `/sf-discovery` + `/sf-extract` |
231
+ | `/sf-onboard <git-url>` | Atômica | **Brownfield**. Clona repo existente, gera TRD + docs/ + projetos.yaml (sem PRD) |
187
232
  | `/sf-discovery <path>` | Atômica | Análise profunda prévia dos insumos (obrigatório em v4) |
188
233
  | `/sf-extract <scope>` | Atômica | Gera PRD e/ou TRD conforme conteúdo dos insumos |
189
234
  | `/sf-design <scope>` | Atômica | PRD+TRD aprovados → `specs/`. First-run também cria `docs/` + `projetos.yaml` |
package/bin/cli.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  const path = require('path');
4
4
  const { init } = require('../lib/init');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spec-first-copilot",
3
- "version": "0.7.0",
3
+ "version": "0.8.0-beta.2",
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,67 @@
8
8
 
9
9
  ---
10
10
 
11
+ ## 0.8.0-beta.2 (2026-05-11) — Auth check pré-clone
12
+
13
+ `/sf-onboard` agora verifica autenticação git **antes** de tentar clonar,
14
+ detectando SSH vs HTTPS e testando ssh-agent / credential helper / GH CLI.
15
+ Falha cedo com mensagem específica em vez de erro genérico do `git clone`.
16
+
17
+ ### Adicionado
18
+
19
+ - Passo 0 do `/sf-onboard`: verificação proativa de auth
20
+ - SSH: `ssh-add -l` (agent vazio?) + `ssh -T git@<host>` (chave autorizada?)
21
+ - HTTPS: `git config credential.helper` + `gh auth status` + `git ls-remote`
22
+ - 6 mensagens de erro específicas (ssh-agent off, agent vazio, chave não
23
+ autorizada, sem helper nem GH CLI, GH CLI deslogado, falha desconhecida)
24
+ - Nota Windows/PowerShell sobre ssh-agent + alternativas (GH CLI, PAT)
25
+
26
+ ---
27
+
28
+ ## 0.8.0-beta.1 (2026-05-11) — Brownfield onboarding
29
+
30
+ Skill nova `/sf-onboard` pra assumir aplicações **já existentes**. Lê o
31
+ código, gera TRD + `docs/` + `projetos.yaml` sem PRD. Cartógrafo descritivo —
32
+ mapeia stack, padrões e decisões observadas sem julgar.
33
+
34
+ ### Adicionado
35
+
36
+ - **`/sf-onboard <git-url> [--branch=X] [--tag=Y] [--name=Z]`** — skill atômica:
37
+ - Clone em `projetos/<repo>/` (auth via SSH/PAT do user)
38
+ - Snapshot rastreável em `workspace/Input/onboard_<repo>/code-snapshot.md` (hashes SHA-256)
39
+ - 7 readers paralelos: DB, Backend, Frontend, Infra, Dependency, Security, Patterns
40
+ - Analyzer (Opus) consolida → TRD + `docs/` 5-arquivos + `projetos.yaml`
41
+ - Multi-repo via re-execução com mesmo `--name`
42
+ - Re-onboard incremental (NOVO/MODIFICADO/INALTERADO via hash)
43
+ - Sem ambiguidades — código resolve tudo
44
+ - `trd_aprovado=true` automático
45
+ - **TRD §1.6 Padrões Observados** — nova seção obrigatória em onboard:
46
+ estrutura de pastas, naming, error handling, validação, testes, logging,
47
+ divergências internas. Com snippets reais do código (arquivo:linha).
48
+ Coders de features futuras leem antes de implementar.
49
+ - **ADRs inferidas** em `docs/decisions.md` — flag `Inferido: true` distingue
50
+ decisão observada (cartógrafo) de decisão tomada em discussão. Dev remove
51
+ flag ao confirmar.
52
+ - **`.context.md` campo `tipo`** — `scope` (pipeline normal) vs `onboard`
53
+ (brownfield). Campos novos: `repo_url`, `repo_branch`, `repo_path`.
54
+ - **Fluxo de status alternativo** para onboarding:
55
+ `not_started → cloned → analyzing → done`.
56
+
57
+ ### Filosofia
58
+
59
+ - **Cartógrafo, não arquiteto**: descreve o que existe sem julgar.
60
+ - **Coders SEGUEM padrões observados** — propostas de mudança entram como
61
+ features explícitas do dev.
62
+ - **Não há checkpoint humano** em onboard — código é a verdade.
63
+
64
+ ### Migração
65
+
66
+ Não-breaking. Projetos existentes em `0.7.0` continuam funcionando sem mudança.
67
+ Skill nova adicionada ao roster. Templates de `TRD.md`, `decisions.md` e
68
+ `.context.md` ganharam campos opcionais.
69
+
70
+ ---
71
+
11
72
  ## 0.7.0 (2026-04-14) — Redesign v4 estável
12
73
 
13
74
  Promoção de `0.7.0-beta.1` para versão estável. Inclui fix crítico:
@@ -21,7 +21,7 @@
21
21
 
22
22
  ### 2. Validar acesso a todos commands
23
23
 
24
- Verificar que TODOS os 11 commands estão acessíveis:
24
+ Verificar que TODOS os 12 commands estão acessíveis:
25
25
 
26
26
  | Command | Caminho |
27
27
  |---------|---------|
@@ -29,6 +29,7 @@ Verificar que TODOS os 11 commands estão acessíveis:
29
29
  | `/sf-load` | `.github/skills/sf-load/SKILL.md` |
30
30
  | `/sf-publish` | `.github/skills/sf-publish/SKILL.md` |
31
31
  | `/sf-start` | `.github/skills/sf-start/SKILL.md` |
32
+ | `/sf-onboard` | `.github/skills/sf-onboard/SKILL.md` |
32
33
  | `/sf-discovery` | `.github/skills/sf-discovery/SKILL.md` |
33
34
  | `/sf-extract` | `.github/skills/sf-extract/SKILL.md` |
34
35
  | `/sf-design` | `.github/skills/sf-design/SKILL.md` |
@@ -108,6 +109,7 @@ ESTE REPO (projeto-base) = ORQUESTRADOR
108
109
  | `/sf-load <nome> \| --all` | Utilitária | Puxa Input + Output do backend. Incremental |
109
110
  | `/sf-publish <nome> <tipo>` | Utilitária | Publica artefato (PRD/TRD/Progresso) nos output.targets[]. Chamado auto por extract/sf-design/sf-plan |
110
111
  | `/sf-start <nome>` | Orquestrador | Entrada única do pipeline. Detecta first_run, cria .context.md, chama /sf-load + /sf-discovery + /sf-extract, para no checkpoint de aprovação |
112
+ | `/sf-onboard <git-url>` | Atômica | **Brownfield**. Clona repo existente em projetos/, lê código e gera TRD + docs/ + projetos.yaml (sem PRD). Cartógrafo descritivo |
111
113
  | `/sf-discovery <path>` | Utilitária | Análise profunda dos insumos (OBRIGATÓRIO no /sf-start em v4) |
112
114
  | `/sf-extract <nome>` | Atômica | Lê workspace/Input/{nome}/ → gera PRD e/ou TRD conforme conteúdo. Re-executável |
113
115
  | `/sf-design <nome>` | Atômica | Requer PRD e/ou TRD aprovados → gera specs/. first_run cria docs/ + projetos.yaml |
@@ -173,7 +175,7 @@ Antes de executar qualquer command, verificar o status. Cada command só avança
173
175
  │ ├── estrutura/ ← architecture, domain, conventions, apiContracts, decisions
174
176
  │ └── global/ ← progresso_global
175
177
  ├── adapters/ ← SourceAdapter interface + ConfluenceAdapter + FilesystemAdapter
176
- ├── commands/ ← 11 commands (mcp, load, publish, sfw-start, discovery, extract, design, plan, dev, merge-docs, session-finish)
178
+ ├── commands/ ← 12 commands (mcp, load, publish, sf-start, sf-onboard, discovery, extract, design, plan, dev, merge-docs, session-finish)
177
179
  └── agents/ ← 7 perfis de agents especializados
178
180
 
179
181
  docs/ ← SÍNTESE CROSS-FEATURE (atualizada pelo /sf-merge-docs)
@@ -1,161 +1,161 @@
1
-
2
- # /sf-design $ARGUMENTS
3
-
4
- Skill atômica de design. Consome PRD + TRD aprovados e gera **`docs/` + `specs/{nome}/` + `projetos.yaml`** (este último em first-run).
5
- `$ARGUMENTS` = nome do scope (ex: `app_barbearia`, `feat_cadastro_cliente`).
6
-
7
- Em **first-run** (docs/ ausente): cria docs/ a partir do PRD+TRD + projetos.yaml + specs/.
8
- Em **feature** (docs/ existe): não cria docs/ (vem pelo /sf-merge-docs depois do /sf-dev) + gera apenas specs/ do scope atual.
9
-
10
- ## Agente: Architect (Opus)
11
-
12
- Técnico e preciso. Deriva projeções a partir dos docs source sem reinventar decisões.
13
-
14
- ## Pré-condições
15
-
16
- | # | Validação | Se falhar |
17
- |---|-----------|-----------|
18
- | 1 | `$ARGUMENTS` informado | Parar |
19
- | 2 | `.context.md` existe com status `extract_done` ou posterior | Se anterior → "/sf-extract $ARGUMENTS primeiro" |
20
- | 3 | Se `prd_existe=true`: `PRD.md` existe E `prd_aprovado=true` | Parar, listar ambiguidades pendentes (ver bloco abaixo) |
21
- | 4 | Se `trd_existe=true`: `TRD.md` existe E `trd_aprovado=true` | Parar, listar ambiguidades pendentes |
22
- | 5 | Pelo menos um dos 2 existe e está aprovado | Parar → "Extração falhou — nenhum doc aprovado" |
23
-
24
- Quando parar por ambiguidade:
25
-
26
- ```
27
- Ambiguidades pendentes em PRD §12 / TRD §10:
28
-
29
- AMB-PRD-001: {pergunta}
30
- AMB-TRD-002: {pergunta}
31
-
32
- Como responder:
33
- 1. Abra workspace/Output/$ARGUMENTS/PRD.md (ou TRD.md)
34
- 2. Vá até §Ambiguidades e preencha a coluna `Resposta`
35
- 3. Marque prd_aprovado=true (ou trd_aprovado=true) em .context.md
36
- 4. Rode /sf-design $ARGUMENTS de novo
37
-
38
- Mais detalhes em .github/skills/sf-extract/SKILL.md → "Como responder ambiguidades".
39
- ```
40
-
41
- ## Passos
42
-
43
- ### 1. Carregar contexto
44
-
45
- - `.context.md` → `first_run`, `prd_existe`, `trd_existe`, `areas_tocadas` (vazio, vai popular)
46
- - `workspace/Output/$ARGUMENTS/PRD.md` (se `prd_existe=true`)
47
- - `workspace/Output/$ARGUMENTS/TRD.md` (se `trd_existe=true`)
48
- - `docs/` (se existir — feature mode): baseline cross-feature
49
- - `discovery.md` (se existir): análise prévia
50
- - `.github/rules.md`
51
- - Templates:
52
- - `.github/templates/specs/{brief,contracts,scenarios}.template.md`
53
- - `.github/templates/estrutura/*.template.md` (só se first-run)
54
- - `.github/templates/feature/projetos.template.yaml` (só se first-run)
55
-
56
- ### 2. Determinar áreas tocadas
57
-
58
- Ler GATEs do TRD §2-§5 (se TRD existe). Áreas marcadas como `GATE: SIM` vão pra
59
- `.context.md → areas_tocadas: [...]`.
60
-
61
- Se TRD não existe (scope puro-produto, raro): `areas_tocadas = []`; `/sf-plan` vai
62
- gerar só tasks de frontend com base no PRD §7.
63
-
64
- ### 3. Branch first-run vs feature
65
-
66
- Ler `first_run` do `.context.md`.
67
-
68
- #### Branch A — first_run = true (bootstrap)
69
-
70
- 1. **Gerar `docs/`** (5 arquivos em `docs/` na raiz do projeto):
71
-
72
- | Doc gerado | Fontes |
73
- |-----------|--------|
74
- | `architecture.md` | TRD §1.1 Stack + §1.2 Arquitetura + §1.3 Ambientes + §1.4 Deploy + §5 §Área-Infra |
75
- | `domain.md` | PRD §1 Contexto + §2 Atores + §3 Jornadas (resumo) + TRD §4 §Área-DB |
76
- | `conventions.md` | TRD §1.5 Segurança baseline + §7 Segurança detalhada + §5.3 Env vars + §5.4 Monitoramento |
77
- | `apiContracts.md` | TRD §2.1 Endpoints + convenções de rota inferidas |
78
- | `decisions.md` | TRD §9 ADRs (transcritas como ADR-001, ADR-002... imutáveis) |
79
-
80
- Regras:
81
- - Ler template → preencher TODAS as seções com dados do PRD/TRD
82
- - Remover bloco `<!-- INSTRUÇÕES -->` do doc gerado
83
- - Changelog inicia vazio
84
- - Se PRD ou TRD não tem dados pra uma seção → "A definir" (não deixar vazio)
85
-
86
- 2. **Gerar `projetos.yaml`** na raiz:
87
-
88
- - Identificar serviços separados no TRD §1.2 Containers (api, worker, web, etc.)
89
- - Perguntar ao usuário: organização GitHub, nome base, se algum repo já existe
90
- - Mapear áreas → repos (API+DB costumam ir juntos; Frontend separado)
91
- - Validar: cada área em `areas_tocadas` tem repo correspondente
92
-
93
- 3. **Gerar `specs/$ARGUMENTS/`** (passo 4 abaixo, comum a first-run e feature)
94
-
95
- #### Branch B — first_run = false (feature)
96
-
97
- 1. **Não toca em `docs/`** (isso é trabalho do /sf-merge-docs após /sf-dev)
98
- 2. **Não gera `projetos.yaml`** (já existe do first-run)
99
- 3. **Gera apenas `specs/$ARGUMENTS/`**
100
-
101
- ### 4. Gerar `specs/$ARGUMENTS/` (sempre)
102
-
103
- Criar/sobrescrever os 4 arquivos em `specs/$ARGUMENTS/`:
104
-
105
- | Arquivo | Projeção de | Conteúdo |
106
- |---------|-------------|----------|
107
- | `brief.md` | PRD §1 + §10 + §11 + TRD §1 | Problema, Solução, Serviços tocados (de projetos.yaml), Escopo (Dentro/Fora), Decisões principais (ADRs resumidas) |
108
- | `contracts.md` | TRD §4 + §2.3 + §2.1 + §6 + PRD §5 | Dados (schema), Validações de Entrada, API (endpoints específicos), Integrações externas, Regras de Negócio com enforcement point |
109
- | `scenarios.md` | PRD §3 + §8 + §7 + TRD §8 | Pré-condições globais, Fluxos happy path, Fluxos de erro (com Ref CA), UI por componente, CAs com Given/When/Then, Estratégia de testes |
110
- | `tasks.md` | stub | (preenchido pelo `/sf-plan`) |
111
-
112
- Regras:
113
- - Projeções são **REGENERÁVEIS** — ao re-rodar `/sf-design`, sobrescreve
114
- - NUNCA editar direto em `specs/` — PRD/TRD são as fontes
115
- - Templates em `.github/templates/specs/`
116
- - Coders e Reviewer leem daqui, NUNCA de PRD/TRD direto
117
-
118
- ### 5. Validação de consistência
119
-
120
- Antes de terminar, verificar:
121
- - Cada RN do PRD §5 aparece em `contracts.md → Regras de Negócio` com enforcement point
122
- - Cada endpoint do TRD §2.1 aparece em `contracts.md → API`
123
- - Cada CA em `scenarios.md` mapeia pra pelo menos 1 RN ou 1 jornada
124
- - Áreas em `areas_tocadas` têm entries em `contracts.md` e `scenarios.md`
125
-
126
- Divergências → alertar no output, sem falhar.
127
-
128
- ### 6. Atualizar `.context.md`
129
-
130
- ```yaml
131
- status: "design_done"
132
- areas_tocadas: [BACK, DB, ...] # derivado do passo 2
133
- ultima_skill: "/sf-design"
134
- atualizado_em: "{{ISO_DATETIME}}"
135
- ```
136
-
137
- ### 7. Saída obrigatória
138
-
139
- ```
140
- /sf-design $ARGUMENTS — completo ({{first-run | feature}})
141
-
142
- Artefatos:
143
- - specs/$ARGUMENTS/brief.md
144
- - specs/$ARGUMENTS/contracts.md
145
- - specs/$ARGUMENTS/scenarios.md
146
- - specs/$ARGUMENTS/tasks.md (stub — será preenchido por /sf-plan)
147
- (se first-run:)
148
- - docs/architecture.md, domain.md, conventions.md, apiContracts.md, decisions.md
149
- - projetos.yaml
150
-
151
- Áreas tocadas: [BACK, DB, FRONT, INFRA]
152
- Validação: {{N issues / passed}}
153
-
154
- Próximo passo: /sf-plan $ARGUMENTS
155
- ```
156
-
157
- ## Regra de ouro
158
-
159
- - `/sf-design` NUNCA reinventa decisões. Apenas projeta PRD+TRD pra formatos consumíveis.
160
- - Se precisa de uma decisão nova que não está no PRD ou TRD: é ambiguidade — voltar pra `/sf-extract` com novo insumo.
161
- - Divergências entre PRD e TRD: **PRD vence em produto, TRD vence em técnica** (não há overlap por design).
1
+
2
+ # /sf-design $ARGUMENTS
3
+
4
+ Skill atômica de design. Consome PRD + TRD aprovados e gera **`docs/` + `specs/{nome}/` + `projetos.yaml`** (este último em first-run).
5
+ `$ARGUMENTS` = nome do scope (ex: `app_barbearia`, `feat_cadastro_cliente`).
6
+
7
+ Em **first-run** (docs/ ausente): cria docs/ a partir do PRD+TRD + projetos.yaml + specs/.
8
+ Em **feature** (docs/ existe): não cria docs/ (vem pelo /sf-merge-docs depois do /sf-dev) + gera apenas specs/ do scope atual.
9
+
10
+ ## Agente: Architect (Opus)
11
+
12
+ Técnico e preciso. Deriva projeções a partir dos docs source sem reinventar decisões.
13
+
14
+ ## Pré-condições
15
+
16
+ | # | Validação | Se falhar |
17
+ |---|-----------|-----------|
18
+ | 1 | `$ARGUMENTS` informado | Parar |
19
+ | 2 | `.context.md` existe com status `extract_done` ou posterior | Se anterior → "/sf-extract $ARGUMENTS primeiro" |
20
+ | 3 | Se `prd_existe=true`: `PRD.md` existe E `prd_aprovado=true` | Parar, listar ambiguidades pendentes (ver bloco abaixo) |
21
+ | 4 | Se `trd_existe=true`: `TRD.md` existe E `trd_aprovado=true` | Parar, listar ambiguidades pendentes |
22
+ | 5 | Pelo menos um dos 2 existe e está aprovado | Parar → "Extração falhou — nenhum doc aprovado" |
23
+
24
+ Quando parar por ambiguidade:
25
+
26
+ ```
27
+ Ambiguidades pendentes em PRD §12 / TRD §10:
28
+
29
+ AMB-PRD-001: {pergunta}
30
+ AMB-TRD-002: {pergunta}
31
+
32
+ Como responder:
33
+ 1. Abra workspace/Output/$ARGUMENTS/PRD.md (ou TRD.md)
34
+ 2. Vá até §Ambiguidades e preencha a coluna `Resposta`
35
+ 3. Marque prd_aprovado=true (ou trd_aprovado=true) em .context.md
36
+ 4. Rode /sf-design $ARGUMENTS de novo
37
+
38
+ Mais detalhes em .github/skills/sf-extract/SKILL.md → "Como responder ambiguidades".
39
+ ```
40
+
41
+ ## Passos
42
+
43
+ ### 1. Carregar contexto
44
+
45
+ - `.context.md` → `first_run`, `prd_existe`, `trd_existe`, `areas_tocadas` (vazio, vai popular)
46
+ - `workspace/Output/$ARGUMENTS/PRD.md` (se `prd_existe=true`)
47
+ - `workspace/Output/$ARGUMENTS/TRD.md` (se `trd_existe=true`)
48
+ - `docs/` (se existir — feature mode): baseline cross-feature
49
+ - `discovery.md` (se existir): análise prévia
50
+ - `.github/rules.md`
51
+ - Templates:
52
+ - `.github/templates/specs/{brief,contracts,scenarios}.template.md`
53
+ - `.github/templates/estrutura/*.template.md` (só se first-run)
54
+ - `.github/templates/feature/projetos.template.yaml` (só se first-run)
55
+
56
+ ### 2. Determinar áreas tocadas
57
+
58
+ Ler GATEs do TRD §2-§5 (se TRD existe). Áreas marcadas como `GATE: SIM` vão pra
59
+ `.context.md → areas_tocadas: [...]`.
60
+
61
+ Se TRD não existe (scope puro-produto, raro): `areas_tocadas = []`; `/sf-plan` vai
62
+ gerar só tasks de frontend com base no PRD §7.
63
+
64
+ ### 3. Branch first-run vs feature
65
+
66
+ Ler `first_run` do `.context.md`.
67
+
68
+ #### Branch A — first_run = true (bootstrap)
69
+
70
+ 1. **Gerar `docs/`** (5 arquivos em `docs/` na raiz do projeto):
71
+
72
+ | Doc gerado | Fontes |
73
+ |-----------|--------|
74
+ | `architecture.md` | TRD §1.1 Stack + §1.2 Arquitetura + §1.3 Ambientes + §1.4 Deploy + §5 §Área-Infra |
75
+ | `domain.md` | PRD §1 Contexto + §2 Atores + §3 Jornadas (resumo) + TRD §4 §Área-DB |
76
+ | `conventions.md` | TRD §1.5 Segurança baseline + §7 Segurança detalhada + §5.3 Env vars + §5.4 Monitoramento |
77
+ | `apiContracts.md` | TRD §2.1 Endpoints + convenções de rota inferidas |
78
+ | `decisions.md` | TRD §9 ADRs (transcritas como ADR-001, ADR-002... imutáveis) |
79
+
80
+ Regras:
81
+ - Ler template → preencher TODAS as seções com dados do PRD/TRD
82
+ - Remover bloco `<!-- INSTRUÇÕES -->` do doc gerado
83
+ - Changelog inicia vazio
84
+ - Se PRD ou TRD não tem dados pra uma seção → "A definir" (não deixar vazio)
85
+
86
+ 2. **Gerar `projetos.yaml`** na raiz:
87
+
88
+ - Identificar serviços separados no TRD §1.2 Containers (api, worker, web, etc.)
89
+ - Perguntar ao usuário: organização GitHub, nome base, se algum repo já existe
90
+ - Mapear áreas → repos (API+DB costumam ir juntos; Frontend separado)
91
+ - Validar: cada área em `areas_tocadas` tem repo correspondente
92
+
93
+ 3. **Gerar `specs/$ARGUMENTS/`** (passo 4 abaixo, comum a first-run e feature)
94
+
95
+ #### Branch B — first_run = false (feature)
96
+
97
+ 1. **Não toca em `docs/`** (isso é trabalho do /sf-merge-docs após /sf-dev)
98
+ 2. **Não gera `projetos.yaml`** (já existe do first-run)
99
+ 3. **Gera apenas `specs/$ARGUMENTS/`**
100
+
101
+ ### 4. Gerar `specs/$ARGUMENTS/` (sempre)
102
+
103
+ Criar/sobrescrever os 4 arquivos em `specs/$ARGUMENTS/`:
104
+
105
+ | Arquivo | Projeção de | Conteúdo |
106
+ |---------|-------------|----------|
107
+ | `brief.md` | PRD §1 + §10 + §11 + TRD §1 | Problema, Solução, Serviços tocados (de projetos.yaml), Escopo (Dentro/Fora), Decisões principais (ADRs resumidas) |
108
+ | `contracts.md` | TRD §4 + §2.3 + §2.1 + §6 + PRD §5 | Dados (schema), Validações de Entrada, API (endpoints específicos), Integrações externas, Regras de Negócio com enforcement point |
109
+ | `scenarios.md` | PRD §3 + §8 + §7 + TRD §8 | Pré-condições globais, Fluxos happy path, Fluxos de erro (com Ref CA), UI por componente, CAs com Given/When/Then, Estratégia de testes |
110
+ | `tasks.md` | stub | (preenchido pelo `/sf-plan`) |
111
+
112
+ Regras:
113
+ - Projeções são **REGENERÁVEIS** — ao re-rodar `/sf-design`, sobrescreve
114
+ - NUNCA editar direto em `specs/` — PRD/TRD são as fontes
115
+ - Templates em `.github/templates/specs/`
116
+ - Coders e Reviewer leem daqui, NUNCA de PRD/TRD direto
117
+
118
+ ### 5. Validação de consistência
119
+
120
+ Antes de terminar, verificar:
121
+ - Cada RN do PRD §5 aparece em `contracts.md → Regras de Negócio` com enforcement point
122
+ - Cada endpoint do TRD §2.1 aparece em `contracts.md → API`
123
+ - Cada CA em `scenarios.md` mapeia pra pelo menos 1 RN ou 1 jornada
124
+ - Áreas em `areas_tocadas` têm entries em `contracts.md` e `scenarios.md`
125
+
126
+ Divergências → alertar no output, sem falhar.
127
+
128
+ ### 6. Atualizar `.context.md`
129
+
130
+ ```yaml
131
+ status: "design_done"
132
+ areas_tocadas: [BACK, DB, ...] # derivado do passo 2
133
+ ultima_skill: "/sf-design"
134
+ atualizado_em: "{{ISO_DATETIME}}"
135
+ ```
136
+
137
+ ### 7. Saída obrigatória
138
+
139
+ ```
140
+ /sf-design $ARGUMENTS — completo ({{first-run | feature}})
141
+
142
+ Artefatos:
143
+ - specs/$ARGUMENTS/brief.md
144
+ - specs/$ARGUMENTS/contracts.md
145
+ - specs/$ARGUMENTS/scenarios.md
146
+ - specs/$ARGUMENTS/tasks.md (stub — será preenchido por /sf-plan)
147
+ (se first-run:)
148
+ - docs/architecture.md, domain.md, conventions.md, apiContracts.md, decisions.md
149
+ - projetos.yaml
150
+
151
+ Áreas tocadas: [BACK, DB, FRONT, INFRA]
152
+ Validação: {{N issues / passed}}
153
+
154
+ Próximo passo: /sf-plan $ARGUMENTS
155
+ ```
156
+
157
+ ## Regra de ouro
158
+
159
+ - `/sf-design` NUNCA reinventa decisões. Apenas projeta PRD+TRD pra formatos consumíveis.
160
+ - Se precisa de uma decisão nova que não está no PRD ou TRD: é ambiguidade — voltar pra `/sf-extract` com novo insumo.
161
+ - Divergências entre PRD e TRD: **PRD vence em produto, TRD vence em técnica** (não há overlap por design).