spec-first-copilot 0.6.0-beta.9 → 0.7.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.
Files changed (57) hide show
  1. package/README.md +252 -167
  2. package/bin/cli.js +70 -70
  3. package/lib/init.js +92 -92
  4. package/lib/update.js +132 -132
  5. package/package.json +1 -1
  6. package/templates/.ai/memory/napkin.md +68 -68
  7. package/templates/.github/CHANGELOG.md +121 -0
  8. package/templates/.github/adapters/SETUP.md +314 -314
  9. package/templates/.github/adapters/confluence.md +295 -295
  10. package/templates/.github/adapters/errors.md +234 -234
  11. package/templates/.github/adapters/filesystem.md +353 -353
  12. package/templates/.github/adapters/interface.md +301 -301
  13. package/templates/.github/adapters/naming.md +241 -241
  14. package/templates/.github/adapters/registry.md +244 -244
  15. package/templates/.github/agents/backend-coder.md +14 -14
  16. package/templates/.github/agents/db-coder.md +165 -165
  17. package/templates/.github/agents/doc-writer.md +66 -53
  18. package/templates/.github/agents/frontend-coder.md +5 -5
  19. package/templates/.github/agents/infra-coder.md +341 -341
  20. package/templates/.github/agents/reviewer.md +6 -6
  21. package/templates/.github/agents/security-reviewer.md +153 -153
  22. package/templates/.github/copilot-instructions.md +272 -262
  23. package/templates/.github/instructions/docs.instructions.md +147 -145
  24. package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
  25. package/templates/.github/rules.md +229 -229
  26. package/templates/.github/scripts/bootstrap-confluence.js +289 -223
  27. package/templates/.github/skills/sf-design/SKILL.md +161 -216
  28. package/templates/.github/skills/sf-dev/SKILL.md +204 -351
  29. package/templates/.github/skills/sf-discovery/SKILL.md +415 -414
  30. package/templates/.github/skills/sf-extract/SKILL.md +225 -249
  31. package/templates/.github/skills/sf-load/SKILL.md +296 -295
  32. package/templates/.github/skills/sf-mcp/SKILL.md +386 -385
  33. package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -100
  34. package/templates/.github/skills/sf-plan/SKILL.md +152 -128
  35. package/templates/.github/skills/sf-publish/SKILL.md +144 -143
  36. package/templates/.github/skills/sf-session-finish/SKILL.md +93 -120
  37. package/templates/.github/skills/sf-start/SKILL.md +192 -145
  38. package/templates/.github/templates/estrutura/apiContracts.template.md +160 -159
  39. package/templates/.github/templates/estrutura/architecture.template.md +169 -168
  40. package/templates/.github/templates/estrutura/conventions.template.md +214 -212
  41. package/templates/.github/templates/estrutura/decisions.template.md +107 -107
  42. package/templates/.github/templates/estrutura/domain.template.md +161 -160
  43. package/templates/.github/templates/feature/PRD.template.md +279 -286
  44. package/templates/.github/templates/feature/Progresso.template.md +141 -141
  45. package/templates/.github/templates/feature/TRD.template.md +358 -0
  46. package/templates/.github/templates/feature/context.template.md +89 -48
  47. package/templates/.github/templates/feature/extract-log.template.md +49 -39
  48. package/templates/.github/templates/feature/projetos.template.yaml +79 -79
  49. package/templates/.github/templates/global/progresso_global.template.md +59 -57
  50. package/templates/.github/templates/specs/brief.template.md +66 -59
  51. package/templates/.github/templates/specs/contracts.template.md +147 -141
  52. package/templates/.github/templates/specs/scenarios.template.md +125 -117
  53. package/templates/.github/templates/specs/tasks.template.md +65 -63
  54. package/templates/_gitignore +35 -35
  55. package/templates/sfw.config.yml.example +147 -147
  56. package/templates/.github/templates/feature/backlog-extraido.template.md +0 -156
  57. package/templates/.github/templates/feature/sdd.template.md +0 -559
@@ -1,262 +1,272 @@
1
- # Copilot Instructions — Projeto
2
-
3
- > Regras globais que o agente deve seguir em TODAS as interações neste projeto.
4
- > Este arquivo é lido automaticamente no início de cada sessão.
5
-
6
- ---
7
-
8
- ## Inicialização (executar no início de cada sessão)
9
-
10
- ### 1. Verificar dependências do workflow
11
-
12
- | Dependência | Caminho | Se não existir |
13
- |-------------|---------|----------------|
14
- | Napkin (memória) | `.ai/memory/napkin.md` | Criar com formato padrão: seções Decisões, Padrões, Armadilhas, Preferências (máx 10 itens/seção) |
15
- | Templates | `.github/templates/` | ERRO — projeto não está configurado |
16
- | Skills | `.github/skills/` | ERRO — projeto não está configurado |
17
- | Agents | `.github/agents/` | ERRO — projeto não está configurado |
18
- | Rules | `.github/rules.md` | ERRO — projeto não está configurado |
19
- | CHANGELOG do framework | `.github/CHANGELOG.md` | OK — projeto antigo sem update |
20
- | Retomada | `workspace/Output/retomada.md` | OK — primeira sessão |
21
-
22
- ### 2. Validar acesso a todas skills
23
-
24
- Verificar que TODAS as 11 skills estão acessíveis:
25
-
26
- | Skill | Caminho |
27
- |-------|---------|
28
- | `/sf-mcp` | `.github/skills/sf-mcp/SKILL.md` |
29
- | `/sf-load` | `.github/skills/sf-load/SKILL.md` |
30
- | `/sf-publish` | `.github/skills/sf-publish/SKILL.md` |
31
- | `/sf-start` | `.github/skills/sf-start/SKILL.md` |
32
- | `/sf-discovery` | `.github/skills/sf-discovery/SKILL.md` |
33
- | `/sf-extract` | `.github/skills/sf-extract/SKILL.md` |
34
- | `/sf-design` | `.github/skills/sf-design/SKILL.md` |
35
- | `/sf-plan` | `.github/skills/sf-plan/SKILL.md` |
36
- | `/sf-dev` | `.github/skills/sf-dev/SKILL.md` |
37
- | `/sf-merge-docs` | `.github/skills/sf-merge-docs/SKILL.md` |
38
- | `/sf-session-finish` | `.github/skills/sf-session-finish/SKILL.md` |
39
-
40
- Se alguma skill não for encontrada → avisar o usuário.
41
-
42
- ### 3. Carregar contexto
43
-
44
- 1. Ler `.ai/memory/napkin.md` — decisões e padrões acumulados
45
- 2. Ler `workspace/Output/retomada.md` (se existir) — ponto de retomada da última sessão
46
- 3. Ler `docs/` (se existir) — contexto global do projeto (architecture, domain, conventions, apiContracts, decisions)
47
- 4. Ler `.github/rules.md` — regras de desenvolvimento
48
-
49
- ---
50
-
51
- ## Identidade do Projeto
52
-
53
- Este é um projeto que utiliza desenvolvimento **spec-first** assistido por IA.
54
- Nenhum código é escrito sem especificação aprovada (SDD).
55
-
56
- ### Arquitetura: Projeto-base vs Repos de código
57
-
58
- ```
59
- ESTE REPO (projeto-base) = ORQUESTRADOR
60
- ├── .github/ ← AI operational config (rules, templates, skills, agents)
61
- ├── .ai/ ← memória persistente (napkin, publish-log, load-log)
62
- ├── docs/ ← síntese cross-feature (architecture, domain, conventions, apiContracts, decisions)
63
- ├── specs/ ← projeções do SDD pro coder (brief, contracts, scenarios, tasks)
64
- ├── workspace/ ← content compartilhável
65
- │ ├── Input/ ← insumos brutos do time
66
- │ └── Output/ ← outputs por scope (PRD, SDD, Progresso)
67
- ├── sfw.config.yml ← manifesto de adapters (input/output backends)
68
- ├── projetos.yaml ← manifesto de repos (gerado pelo /sf-design em first-run)
69
- └── projetos/ ← repos de código (gitignored, cada um com .git próprio)
70
- ├── api/ ← repo: org/projeto-api
71
- ├── web/ ← repo: org/projeto-web
72
- └── worker/ ← repo: org/projeto-worker
73
- ```
74
-
75
- **Três zonas, zero ambiguidade:**
76
- - **`.github/` + `.ai/`** → AI operational config + memória (time edita raro)
77
- - **`docs/`** → síntese cross-feature (atualizada pelo `/sf-merge-docs`)
78
- - **`workspace/`** → content compartilhável (Input = time, Output = workflow)
79
- - **`projetos/`** → código dos serviços (branches, PRs, commits acontecem aí)
80
-
81
- ## Pipeline do Workflow
82
-
83
- ```
84
- /sf-start <nome>
85
- ↓ detecta first_run via presença/ausência de docs/
86
- ↓ /sf-load <nome> (puxa insumos do backend) → workspace/Input/{nome}/
87
- ↓ /sf-discovery (opcional, recomendado)
88
-
89
- /sf-extract → PRD.md (pode ser empty) + extract-log com tech chunks
90
- checkpoint: usuário aprova
91
- /sf-design
92
- first_run=true: SDD §Sistema completo + cria docs/ + projetos.yaml
93
- ↓ first_run=false: SDD §Área-X tocadas + §11 Delta Specs
94
- sempre: gera specs/{nome}/ (brief/contracts/scenarios)
95
- /sf-plan specs/{nome}/tasks.md + Progresso.md (tasks com campo Repo:)
96
-
97
- /sf-dev → INFRA-001 cria/clona repos (se first-run) → código nos repos (Security Review pós-dev)
98
- ao final, chama /sf-merge-docs automaticamente
99
- /sf-merge-docs aplica SDD §11 em docs/ (síntese cross-feature atualizada)
100
- ```
101
-
102
- ## Skills disponíveis
103
-
104
- | Skill | Tipo | O que faz |
105
- |-------|------|-----------|
106
- | `/sf-mcp <provider>` | Setup | Configura backend externo interativamente. Cria .mcp.json + sfw.config.yml + ajusta .gitignore |
107
- | `/sf-load <nome> \| --all` | Utilitária | Puxa Input + Output do backend. Incremental |
108
- | `/sf-publish <nome> <tipo>` | Utilitária | Publica artefato (PRD/SDD/Progresso) nos output.targets[]. Chamado auto por extract/design/plan |
109
- | `/sf-start <nome>` | Orquestrador | Entrada única do pipeline. Detecta first_run, cria .context.md, chama /sf-load + /sf-extract, para no checkpoint |
110
- | `/sf-discovery <path>` | Utilitária | Análise profunda dos insumos (RECOMENDADO antes do /sf-extract) |
111
- | `/sf-extract <nome>` | Atômica | workspace/Input/{nome}/ gera PRD + categoriza tech chunks no extract-log. Re-executável |
112
- | `/sf-design <nome>` | Atômica | Pergunta aprovação → gera SDD. first_run cria docs/ + projetos.yaml; feature gera só áreas tocadas |
113
- | `/sf-plan <nome>` | Atômica | SDD → gera tasks por área + Progresso.md |
114
- | `/sf-dev <nome>` | Atômica | Implementa tasks com loop (implement test review). Agents por área. /sf-merge-docs automático no fim |
115
- | `/sf-merge-docs <nome>` | Atômica | Aplica SDD §11 Delta Specs em docs/ (cross-feature sync). Chamado pelo /sf-dev, re-executável |
116
- | `/sf-session-finish` | Utilitária | Encerra sessão: salva estado, atualiza napkin, gera retomada.md |
117
-
118
- ## Agents especializados (usados pelo /sf-dev)
119
-
120
- | Agent | Área | Stack padrão | Perfil |
121
- |-------|------|-------------|--------|
122
- | Backend Coder | BACK | .NET 8 / C# | `.github/agents/backend-coder.md` |
123
- | Frontend Coder | FRONT | React + Fusion | `.github/agents/frontend-coder.md` |
124
- | DB Coder | DB | PostgreSQL 16 | `.github/agents/db-coder.md` |
125
- | Infra Coder | INFRA | Docker | `.github/agents/infra-coder.md` |
126
- | Doc Writer | DOC | | `.github/agents/doc-writer.md` |
127
- | Reviewer | Todas | — | `.github/agents/reviewer.md` |
128
- | Security Reviewer | Todas | — | `.github/agents/security-reviewer.md` |
129
-
130
- ## Estado da pipeline (`.context.md`)
131
-
132
- Cada scope tem um `.context.md` em `workspace/Output/{nome}/`:
133
-
134
- ```yaml
135
- nome: "{nome}"
136
- first_run: true|false # imutável, derivado da ausência de docs/
137
- prd_empty: true|false # preenchido pelo /sf-extract
138
- areas_tocadas: [...] # preenchido pelo /sf-design
139
- input_path: "workspace/Input/{nome}/"
140
- status: not_started extract_done approved → design_done → plan_done → dev_in_progress → dev_done → done
141
- ultima_skill: "/sf-start"
142
- atualizado_em: "ISO_DATETIME"
143
- ```
144
-
145
- Antes de executar qualquer skill, verificar o status. Cada skill só avança se o status anterior está correto. **Apenas skills atualizam `.context.md`** — usuário nunca edita manualmente.
146
-
147
- ## Regras Invioláveis
148
-
149
- 1. **Spec-first**: NUNCA gerar código sem SDD aprovado
150
- 2. **Input é sagrado**: NUNCA modificar arquivos em `workspace/Input/`
151
- 3. **Extração rígida**: categorias fixas do template, sem texto narrativo, ambiguidades são BLOQUEANTES
152
- 4. **Consulta docs/ antes de ambiguidade**: Analyzer valida se resposta já está em `docs/` — se sim, marca resolvida, não pergunta
153
- 5. **SDD é auto-contido**: coder APENAS specs/{nome}/ + task, NUNCA PRD/PM diretamente
154
- 6. **Memória ativa**: ler napkin.md no início, atualizar ao descobrir padrões/armadilhas
155
- 7. **Progresso atualizado**: atualizar Progresso.md ao concluir cada task
156
- 8. **Delta Specs**: todo SDD tem §11 ADDED/MODIFIED/REMOVEDobrigatório (mesmo vazio)
157
- 9. **Testes junto com código**: implementar e testar na mesma task, não separar
158
-
159
- ## Estrutura de Documentação
160
-
161
- ```
162
- .github/ ← AI OPERATIONAL CONFIG
163
- ├── copilot-instructions.md ← Regras globais pro agente (este arquivo)
164
- ├── rules.md ← Regras de desenvolvimento (lidas pelos coders)
165
- ├── CHANGELOG.md ← Histórico do framework (sobrescrito pelo `update`)
166
- ├── templates/ ← Templates do workflow
167
- │ ├── feature/ PRD, SDD, context, extract-log, Progresso, backlog-extraido, projetos.yaml
168
- ├── specs/ brief, contracts, scenarios, tasks (projeções pro agent)
169
- ├── estrutura/ architecture, domain, conventions, apiContracts, decisions
170
- │ └── global/ progresso_global
171
- ├── adapters/ SourceAdapter interface + ConfluenceAdapter + FilesystemAdapter
172
- ├── skills/ 11 skills (sf-mcp, sf-load, sf-publish, sf-start, sf-discovery, sf-extract, sf-design, sf-plan, sf-dev, sf-merge-docs, sf-session-finish)
173
- ├── agents/ 7 perfis de agents especializados
174
- └── instructions/ Instruções por contexto
175
-
176
- docs/ SÍNTESE CROSS-FEATURE (atualizada pelo /sf-merge-docs)
177
- ├── architecture.md Stack + C4 + ambientes + deploy
178
- ├── domain.md ← Visão de negócio + modelo de dados consolidado
179
- ├── conventions.md Auth, authz, LGPD, env vars, monitoramento
180
- ├── apiContracts.md ← Convenções + catálogo de endpoints
181
- └── decisions.md ADRs (append-only)
182
-
183
- specs/ AGENT CONTRACTS (projeções do SDD pro coder)
184
- └── {nome}/
185
- ├── brief.md ← SDD §1+§2+§10 (Problema/Solução/Escopo)
186
- ├── contracts.md SDD §3+§4+§5+§6+§7 (§Sistema + áreas tocadas)
187
- ├── scenarios.md ← SDD §5.2+§8+§9 (Fluxos/UI/CAs)
188
- └── tasks.md ← Tabela única com coluna Área (gerado pelo /sf-plan)
189
-
190
- workspace/ TEAM CONTENT
191
- ├── Input/ Insumos brutos (QUALQUER formato nunca modificar)
192
- │ └── {nome}/ ← Nomeado livremente pelo usuário (ex: app_barbearia, feat_login)
193
- └── Output/ Artefatos humanos gerados pelo workflow
194
- └── {nome}/
195
- ├── PRD.md Requirements de produto (gerado pelo /sf-extract; pode ter empty: true)
196
- ├── sdd.md Especificação técnica narrativa (gerado pelo /sf-design)
197
- ├── Progresso.md ← Tracking de execução (gerado pelo /sf-plan)
198
- ├── backlog_extraido.md ← (opcional) features fora-de-escopo detectadas em first-run
199
- ├── .context.md Estado da pipeline
200
- ├── .extract-log.md Log de hashes + categorização tech
201
- ├── discovery.md ← (opcional) análise do /sf-discovery
202
- └── retomada.md (session-finish) ponto de retomada
203
-
204
- projetos/ Repos de serviços (gitignored, cada um com .git próprio)
205
- projetos.yaml ← Manifesto: serviço → repo → áreas → stack (gerado em first-run)
206
- sfw.config.yml Manifesto de adapters (input/output backends)
207
- ```
208
-
209
- **Quem lê o quê:**
210
- - **Humano**: `workspace/Output/` (PRD/SDD narrativos + Progresso) + `docs/` (onboarding)
211
- - **Coder agent**: `specs/{nome}/` (projeções estruturadas) — NUNCA SDD direto
212
- - **Reviewer**: `specs/{nome}/scenarios.md` (CAs) + código
213
- - **Security Reviewer**: `specs/{nome}/contracts.md` + `docs/conventions.md` + código
214
- - **`/sf-merge-docs`**: `workspace/Output/{nome}/sdd.md` §11 (única leitura do SDD pelo pipeline)
215
-
216
- ## Convenções
217
-
218
- - **Pastas de scope** (convenção sugerida, opcional): `feat_nome`, `bug_nome`, `task_nome`, ou bootstrap como `app_nome` (snake_case)
219
- - **Task IDs**: `AREA-NNN` (BACK-001, FRONT-001, DB-001, INFRA-001)
220
- - **Regras de negócio**: `RN-NNN` (IDs estáveis, nunca renumerar)
221
- - **Commits**: `tipo(TASK-ID): descrição` (feat, fix, refactor, test, docs, chore)
222
- - **Branches**: `feature/{nome}_fase{N}` (fase vem do PRD §11 Fases de Entrega)
223
-
224
- ## Quando Parar e Perguntar
225
-
226
- - `workspace/Input/{nome}/` vazio ou inexistente → PARAR
227
- - Ambiguidade na extração (não coberta por `docs/`) → listar como pergunta BLOQUEANTE, PARAR
228
- - `.context.md` com status incompatível com a skill → PARAR, informar status atual
229
- - Task com dependência não concluída avisar, não pular
230
- - Dúvida sobre regra de negócioperguntar, NUNCA assumir
231
- - Quality gate reprovado 3xescalar pro usuário
232
-
233
- ## Arquivos Sensíveis
234
-
235
- ### NUNCA modificar
236
- - `workspace/Input/**/*` — Insumos brutos. Somente leitura.
237
- - `.env`, `.env.*`, `.mcp.json` — Secrets.
238
- - `docs/decisions.md` — ADRs aceitas são imutáveis (apenas adicionar novas, com status "substituída por ADR-XXX" na original).
239
-
240
- ### Requerem aprovação
241
- - `docs/*` alterar via `/sf-merge-docs` após `/sf-dev`.
242
- - `.github/rules.md` — Alteração explícita.
243
- - `.github/copilot-instructions.md` — Meta-regras. Alteração requer aprovação.
244
- - `.github/skills/*`, `.github/agents/*`, `.github/templates/*` — Alteração requer aprovação.
245
- - `sfw.config.yml` — Manifesto de adapters. Mudar via `/sf-mcp` ou edição explícita.
246
-
247
- ## Referências
248
-
249
- | Doc | Onde |
250
- |-----|------|
251
- | Rules de dev | `.github/rules.md` |
252
- | CHANGELOG do framework | `.github/CHANGELOG.md` |
253
- | Memória | `.ai/memory/napkin.md` |
254
- | Skills | `.github/skills/*/SKILL.md` |
255
- | Agents | `.github/agents/*.md` |
256
- | Templates | `.github/templates/` |
257
- | Adapters | `.github/adapters/` |
258
- | Síntese do sistema | `docs/*.md` |
259
- | Especialistas por scope | `workspace/Output/{nome}/sdd.md` |
260
- | Projeções pro coder | `specs/{nome}/*.md` |
261
- | Insumos brutos | `workspace/Input/` |
262
- | Outputs do workflow | `workspace/Output/` |
1
+ # Copilot Instructions — Projeto
2
+
3
+ > Regras globais para TODAS as interações neste projeto.
4
+ > Lido automaticamente no início de cada sessão.
5
+
6
+ ---
7
+
8
+ ## Inicialização (executar no início de cada sessão)
9
+
10
+ ### 1. Verificar dependências do workflow
11
+
12
+ | Dependência | Caminho | Se não existir |
13
+ |-------------|---------|----------------|
14
+ | Napkin (memória) | `.ai/memory/napkin.md` | Criar com formato padrão |
15
+ | Templates | `.github/templates/` | ERRO — projeto não está configurado |
16
+ | Commands | `.github/commands/` | ERRO — projeto não está configurado |
17
+ | Agents | `.github/agents/` | ERRO — projeto não está configurado |
18
+ | Rules | `.github/rules.md` | ERRO — projeto não está configurado |
19
+ | CHANGELOG do framework | `.github/CHANGELOG.md` | OK — projeto antigo sem update |
20
+ | Retomada | `workspace/Output/retomada.md` | OK — primeira sessão |
21
+
22
+ ### 2. Validar acesso a todos commands
23
+
24
+ Verificar que TODOS os 11 commands estão acessíveis:
25
+
26
+ | Command | Caminho |
27
+ |---------|---------|
28
+ | `/sf-mcp` | `.github/skills/sf-mcp/SKILL.md` |
29
+ | `/sf-load` | `.github/skills/sf-load/SKILL.md` |
30
+ | `/sf-publish` | `.github/skills/sf-publish/SKILL.md` |
31
+ | `/sf-start` | `.github/skills/sf-start/SKILL.md` |
32
+ | `/sf-discovery` | `.github/skills/sf-discovery/SKILL.md` |
33
+ | `/sf-extract` | `.github/skills/sf-extract/SKILL.md` |
34
+ | `/sf-design` | `.github/skills/sf-design/SKILL.md` |
35
+ | `/sf-plan` | `.github/skills/sf-plan/SKILL.md` |
36
+ | `/sf-dev` | `.github/skills/sf-dev/SKILL.md` |
37
+ | `/sf-merge-docs` | `.github/skills/sf-merge-docs/SKILL.md` |
38
+ | `/sf-session-finish` | `.github/skills/sf-session-finish/SKILL.md` |
39
+
40
+ Se algum command não for encontrado → avisar o usuário.
41
+
42
+ ### 3. Carregar contexto
43
+
44
+ 1. Ler `.ai/memory/napkin.md` — decisões e padrões acumulados
45
+ 2. Ler `workspace/Output/retomada.md` (se existir) — ponto de retomada da última sessão
46
+ 3. Ler `docs/` (se existir) — contexto global do projeto (architecture, domain, conventions, apiContracts, decisions)
47
+ 4. Ler `.github/rules.md` — regras de desenvolvimento
48
+
49
+ ---
50
+
51
+ ## Identidade do Projeto
52
+
53
+ Este é um projeto que utiliza desenvolvimento **spec-first** assistido por IA.
54
+ Nenhum código é escrito sem especificações aprovadas (PRD + TRD).
55
+
56
+ ### Arquitetura: Projeto-base vs Repos de código
57
+
58
+ ```
59
+ ESTE REPO (projeto-base) = ORQUESTRADOR
60
+ ├── .github/ ← AI operational config (rules, templates, commands, agents)
61
+ ├── .ai/ ← memória persistente (napkin, publish-log, load-log)
62
+ ├── docs/ ← síntese cross-feature (architecture, domain, conventions, apiContracts, decisions)
63
+ ├── specs/ ← projeções de PRD+TRD pro coder (brief, contracts, scenarios, tasks)
64
+ ├── workspace/ ← content compartilhável
65
+ │ ├── Input/ ← insumos brutos do time
66
+ │ └── Output/ ← outputs por scope (PRD, TRD, Progresso)
67
+ ├── sfw.config.yml ← manifesto de adapters (input/output backends)
68
+ ├── projetos.yaml ← manifesto de repos (gerado pelo /sf-design em first-run)
69
+ └── projetos/ ← repos de código (gitignored, cada um com .git próprio)
70
+ ├── api/ ← repo: org/projeto-api
71
+ ├── web/ ← repo: org/projeto-web
72
+ └── worker/ ← repo: org/projeto-worker
73
+ ```
74
+
75
+ **Três zonas, zero ambiguidade:**
76
+ - **`.github/` + `.ai/`** → AI operational config + memória (time edita raro)
77
+ - **`docs/`** → síntese cross-feature (atualizada pelo `/sf-merge-docs`)
78
+ - **`workspace/`** → content compartilhável (Input = time, Output = workflow)
79
+ - **`projetos/`** → código dos serviços (branches, PRs, commits acontecem aí)
80
+
81
+ ## Pipeline do Workflow
82
+
83
+ ```
84
+ /sf-start <nome>
85
+ ↓ detecta first_run via presença/ausência de docs/
86
+ ↓ /sf-load <nome> (puxa insumos do backend) → workspace/Input/{nome}/
87
+ ↓ /sf-discovery (OBRIGATÓRIO em v4)
88
+
89
+ /sf-extract → gera PRD.md e/ou TRD.md (ambos condicionais ao conteúdo dos insumos)
90
+ CHECKPOINT DUPLO:
91
+ - PM aprova PRD (marca prd_aprovado=true em .context.md)
92
+ - dev aprova TRD (marca trd_aprovado=true em .context.md)
93
+ /sf-design
94
+ first_run=true: cria docs/ + projetos.yaml a partir de PRD+TRD aprovados
95
+ sempre: gera specs/{nome}/ (brief/contracts/scenarios)
96
+ /sf-plan → specs/{nome}/tasks.md + Progresso.md (tasks com campo Repo:)
97
+
98
+ /sf-dev INFRA-001 cria/clona repos (se first-run) → código nos repos (Security Review pós-dev)
99
+ ao final de feature, chama /sf-merge-docs automaticamente
100
+ /sf-merge-docs → diff semântico PRD+TRD ↔ docs/ → atualiza docs/ cross-feature
101
+ ```
102
+
103
+ ## Commands disponíveis (slash commands)
104
+
105
+ | Command | Tipo | O que faz |
106
+ |---------|------|-----------|
107
+ | `/sf-mcp <provider>` | Setup | Configura backend externo interativamente. Cria .mcp.json + sfw.config.yml + ajusta .gitignore |
108
+ | `/sf-load <nome> \| --all` | Utilitária | Puxa Input + Output do backend. Incremental |
109
+ | `/sf-publish <nome> <tipo>` | Utilitária | Publica artefato (PRD/TRD/Progresso) nos output.targets[]. Chamado auto por extract/sf-design/sf-plan |
110
+ | `/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 |
111
+ | `/sf-discovery <path>` | Utilitária | Análise profunda dos insumos (OBRIGATÓRIO no /sf-start em v4) |
112
+ | `/sf-extract <nome>` | Atômica | workspace/Input/{nome}/ → gera PRD e/ou TRD conforme conteúdo. Re-executável |
113
+ | `/sf-design <nome>` | Atômica | Requer PRD e/ou TRD aprovados → gera specs/. first_run cria docs/ + projetos.yaml |
114
+ | `/sf-plan <nome>` | Atômica | PRD + TRD + specs/gera tasks por área + Progresso.md |
115
+ | `/sf-dev <nome>` | Atômica | Implementa tasks com loop (implement test review). Agents por área. /sf-merge-docs automático no fim de features |
116
+ | `/sf-merge-docs <nome>` | Atômica | Diff semântico PRD+TRD docs/ → atualiza docs/ cross-feature. Chamado pelo /sf-dev, re-executável |
117
+ | `/sf-session-finish` | Utilitária | Encerra sessão: salva estado, atualiza napkin, gera retomada.md |
118
+
119
+ ## Agents especializados (usados pelo /sf-dev)
120
+
121
+ | Agent | Área | Stack padrão | Perfil |
122
+ |-------|------|-------------|--------|
123
+ | Backend Coder | BACK | .NET 8 / C# | `.github/agents/backend-coder.md` |
124
+ | Frontend Coder | FRONT | React + Fusion | `.github/agents/frontend-coder.md` |
125
+ | DB Coder | DB | PostgreSQL 16 | `.github/agents/db-coder.md` |
126
+ | Infra Coder | INFRA | Docker | `.github/agents/infra-coder.md` |
127
+ | Doc Writer | DOC | — | `.github/agents/doc-writer.md` |
128
+ | Reviewer | Todas | — | `.github/agents/reviewer.md` |
129
+ | Security Reviewer | Todas | — | `.github/agents/security-reviewer.md` |
130
+
131
+ ## Estado da pipeline (`.context.md`)
132
+
133
+ Cada scope tem um `.context.md` em `workspace/Output/{nome}/`:
134
+
135
+ ```yaml
136
+ nome: "{nome}"
137
+ first_run: true|false # imutável, derivado da ausência de docs/
138
+ prd_existe: true|false # preenchido pelo /sf-extract
139
+ trd_existe: true|false # preenchido pelo /sf-extract
140
+ prd_aprovado: true|false # PM marca ao revisar PRD
141
+ trd_aprovado: true|false # dev marca ao revisar TRD
142
+ areas_tocadas: [...] # preenchido pelo /sf-design (dos GATEs do TRD)
143
+ input_path: "workspace/Input/{nome}/"
144
+ status: not_started → discovery_done → extract_done → prd_approved → trd_approved → design_done → plan_done → dev_in_progress → dev_done → done
145
+ ultima_skill: "/sf-start"
146
+ atualizado_em: "ISO_DATETIME"
147
+ ```
148
+
149
+ Antes de executar qualquer command, verificar o status. Cada command só avança se o status anterior está correto. **Apenas commands atualizam `.context.md`** usuário nunca edita manualmente.
150
+
151
+ ## Regras Invioláveis
152
+
153
+ 1. **Spec-first**: NUNCA gerar código sem PRD e/ou TRD aprovados
154
+ 2. **Input é sagrado**: NUNCA modificar arquivos em `workspace/Input/`
155
+ 3. **Extração rígida**: categorias fixas do template, sem texto narrativo, ambiguidades são BLOQUEANTES
156
+ 4. **Consulta docs/ antes de ambiguidade**: Analyzer valida se resposta está em `docs/` se sim, marca resolvida, não pergunta
157
+ 5. **Specs são auto-contidos**: coder APENAS `specs/{nome}/` + task, NUNCA PRD/TRD/PM diretamente
158
+ 6. **Memória ativa**: ler napkin.md no início, atualizar ao descobrir padrões/armadilhas
159
+ 7. **Progresso atualizado**: atualizar Progresso.md ao concluir cada task
160
+ 8. **docs/ é síntese cross-feature**: atualizado via /sf-merge-docs (diff PRD+TRD ↔ docs/) — nunca editado manualmente
161
+ 9. **Testes junto com código**: implementar e testar na mesma task, não separar
162
+ 10. **Não commitar sem pedir**: sempre perguntar antes de commitar
163
+
164
+ ## Estrutura de Documentação
165
+
166
+ ```
167
+ .github/ AI OPERATIONAL CONFIG
168
+ ├── rules.md Regras de desenvolvimento
169
+ ├── CHANGELOG.md Histórico do framework (sobrescrito pelo `update`)
170
+ ├── templates/ Templates do workflow
171
+ ├── feature/ PRD, TRD, context, extract-log, Progresso, projetos.yaml
172
+ ├── specs/ brief, contracts, scenarios, tasks (projeções pro agent)
173
+ ├── estrutura/ architecture, domain, conventions, apiContracts, decisions
174
+ └── global/ progresso_global
175
+ ├── adapters/ ← SourceAdapter interface + ConfluenceAdapter + FilesystemAdapter
176
+ ├── commands/ 11 commands (mcp, load, publish, sfw-start, discovery, extract, design, plan, dev, merge-docs, session-finish)
177
+ └── agents/ 7 perfis de agents especializados
178
+
179
+ docs/ SÍNTESE CROSS-FEATURE (atualizada pelo /sf-merge-docs)
180
+ ├── architecture.md ← Stack + C4 + ambientes + deploy
181
+ ├── domain.md Visão de negócio + modelo de dados consolidado
182
+ ├── conventions.md ← Auth, authz, LGPD, env vars, monitoramento
183
+ ├── apiContracts.md Convenções + catálogo de endpoints
184
+ └── decisions.md ← ADRs (append-only)
185
+
186
+ specs/ AGENT CONTRACTS (projeções de PRD+TRD pro coder)
187
+ └── {nome}/
188
+ ├── brief.md ← PRD §1+§10+§11 + TRD §Sistema (Problema/Solução/Serviços/Escopo)
189
+ ├── contracts.md ← TRD §Área-DB + §Área-Backend + §6 Integrações + PRD §5 RNs
190
+ ├── scenarios.md PRD §3 Jornadas + §8 Cenários + TRD §8 Estratégia de Testes
191
+ └── tasks.md Tabela única com coluna Área (gerado pelo /sf-plan)
192
+
193
+ workspace/ TEAM CONTENT
194
+ ├── Input/ ← Insumos brutos (QUALQUER formato — nunca modificar)
195
+ │ └── {nome}/ Nomeado livremente pelo usuário (ex: app_barbearia, feat_login)
196
+ └── Output/ Artefatos humanos gerados pelo workflow
197
+ └── {nome}/
198
+ ├── PRD.md Requirements de produto (gerado pelo /sf-extract; condicional só se insumos têm produto)
199
+ ├── TRD.md Requirements técnicos (gerado pelo /sf-extract; condicional — só se insumos têm técnica)
200
+ ├── Progresso.md Tracking de execução (gerado pelo /sf-plan)
201
+ ├── .context.md Estado da pipeline (prd_existe, trd_existe, aprovações, status)
202
+ ├── .extract-log.md Log de hashes dos insumos
203
+ ├── discovery.md ← análise do /sf-discovery (obrigatório em v4)
204
+ └── retomada.md ← (session-finish) ponto de retomada
205
+
206
+ projetos/ Repos de serviços (gitignored, cada um com .git próprio)
207
+ projetos.yaml ← Manifesto: serviço → repo → áreas → stack (gerado em first-run)
208
+ sfw.config.yml ← Manifesto de adapters (input/output backends)
209
+ ```
210
+
211
+ **Quemo quê:**
212
+ - **Humano (PM)**: `workspace/Output/{nome}/PRD.md` para aprovar
213
+ - **Humano (dev)**: `workspace/Output/{nome}/TRD.md` para aprovar + `docs/` (onboarding)
214
+ - **Coder agent**: `specs/{nome}/` (projeções estruturadas) NUNCA PRD/TRD direto
215
+ - **Reviewer**: `specs/{nome}/scenarios.md` (CAs) + código
216
+ - **Security Reviewer**: `specs/{nome}/contracts.md` + `docs/conventions.md` + código
217
+ - **`/sf-merge-docs`**: `workspace/Output/{nome}/PRD.md + TRD.md` (diff semântico pra atualizar docs/)
218
+
219
+ ## Convenções
220
+
221
+ - **Pastas de scope** (convenção sugerida, opcional): `feat_nome`, `bug_nome`, `task_nome`, ou bootstrap como `app_nome` (snake_case)
222
+ - **Task IDs**: `AREA-NNN` (BACK-001, FRONT-001, DB-001, INFRA-001)
223
+ - **Regras de negócio**: `RN-NNN` (IDs estáveis, nunca renumerar)
224
+ - **Commits**: `tipo(TASK-ID): descrição` (feat, fix, refactor, test, docs, chore)
225
+ - **Branches**: `feature/{nome}_fase{N}` (fase vem do PRD §11 Fases de Entrega)
226
+
227
+ ## Quando Parar e Perguntar
228
+
229
+ - `workspace/Input/{nome}/` vazio ou inexistentePARAR
230
+ - Ambiguidade na extração (não coberta por `docs/`) listar como pergunta BLOQUEANTE, PARAR
231
+ - `.context.md` com status incompatível com o command PARAR, informar status atual
232
+ - Task com dependência não concluída → avisar, não pular
233
+ - Dúvida sobre regra de negócio → perguntar, NUNCA assumir
234
+ - Quality gate reprovado 3x → escalar pro usuário
235
+
236
+ ## Arquivos Sensíveis
237
+
238
+ ### NUNCA modificar
239
+ - `workspace/Input/**/*` — Insumos brutos. Somente leitura.
240
+ - `.env`, `.env.*`, `.mcp.json` — Secrets.
241
+ - `docs/decisions.md`ADRs aceitas são imutáveis (apenas adicionar novas, com status "substituída por ADR-XXX" na original).
242
+
243
+ ### Requerem aprovação
244
+ - `docs/*` — alterar via `/sf-merge-docs` após `/sf-dev`.
245
+ - `.github/rules.md` — Alteração explícita.
246
+ - `copilot-instructions.md` — Meta-regras. Alteração requer aprovação.
247
+ - `.github/commands/*`, `.github/agents/*`, `.github/templates/*` — Alteração requer aprovação.
248
+ - `sfw.config.yml` — Manifesto de adapters. Mudar via `/sf-mcp` ou edição explícita.
249
+
250
+ ### Formato rígido (gerados por commands)
251
+ - `.context.md` YAML frontmatter, apenas commands atualizam.
252
+ - `.extract-log.md` Append-only, hashes obrigatórios.
253
+ - `PRD.md`, `TRD.md` — Seguir template exato.
254
+ - `specs/{nome}/tasks.md` — IDs sequenciais, campos obrigatórios.
255
+ - `Progresso.md` — Tabelas com formato fixo.
256
+
257
+ ## Referências
258
+
259
+ | Doc | Onde |
260
+ |-----|------|
261
+ | Rules de dev | `.github/rules.md` |
262
+ | CHANGELOG do framework | `.github/CHANGELOG.md` |
263
+ | Memória | `.ai/memory/napkin.md` |
264
+ | Commands | `.github/commands/*.md` |
265
+ | Agents | `.github/agents/*.md` |
266
+ | Templates | `.github/templates/` |
267
+ | Adapters | `.github/adapters/` |
268
+ | Síntese do sistema | `docs/*.md` |
269
+ | Source técnico por scope | `workspace/Output/{nome}/TRD.md` |
270
+ | Projeções pro coder | `specs/{nome}/*.md` |
271
+ | Insumos brutos | `workspace/Input/` |
272
+ | Outputs do workflow | `workspace/Output/` |