spec-first-copilot 0.7.0-beta.1 → 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 (55) 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 +560 -533
  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 +215 -215
  16. package/templates/.github/agents/db-coder.md +165 -165
  17. package/templates/.github/agents/doc-writer.md +66 -66
  18. package/templates/.github/agents/frontend-coder.md +222 -222
  19. package/templates/.github/agents/infra-coder.md +341 -341
  20. package/templates/.github/agents/reviewer.md +99 -99
  21. package/templates/.github/agents/security-reviewer.md +153 -153
  22. package/templates/.github/copilot-instructions.md +272 -272
  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 -289
  27. package/templates/.github/skills/sf-design/SKILL.md +161 -161
  28. package/templates/.github/skills/sf-dev/SKILL.md +204 -204
  29. package/templates/.github/skills/sf-discovery/SKILL.md +415 -415
  30. package/templates/.github/skills/sf-extract/SKILL.md +225 -225
  31. package/templates/.github/skills/sf-load/SKILL.md +296 -296
  32. package/templates/.github/skills/sf-mcp/SKILL.md +386 -386
  33. package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -152
  34. package/templates/.github/skills/sf-plan/SKILL.md +152 -152
  35. package/templates/.github/skills/sf-publish/SKILL.md +144 -144
  36. package/templates/.github/skills/sf-session-finish/SKILL.md +93 -93
  37. package/templates/.github/skills/sf-start/SKILL.md +192 -192
  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 -279
  44. package/templates/.github/templates/feature/Progresso.template.md +141 -141
  45. package/templates/.github/templates/feature/TRD.template.md +358 -358
  46. package/templates/.github/templates/feature/context.template.md +89 -89
  47. package/templates/.github/templates/feature/extract-log.template.md +49 -49
  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 -66
  51. package/templates/.github/templates/specs/contracts.template.md +147 -147
  52. package/templates/.github/templates/specs/scenarios.template.md +125 -125
  53. package/templates/.github/templates/specs/tasks.template.md +65 -65
  54. package/templates/_gitignore +35 -35
  55. package/templates/sfw.config.yml.example +147 -147
@@ -1,272 +1,272 @@
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 | Lê 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 | Lê 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 já está em `docs/` — se sim, marca resolvida, não pergunta
157
- 5. **Specs são auto-contidos**: coder lê 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
- **Quem lê o 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 lê 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 inexistente → PARAR
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/*` — Só 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`, `sdd.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
- | Especialistas por scope | `workspace/Output/{nome}/sdd.md` |
270
- | Projeções pro coder | `specs/{nome}/*.md` |
271
- | Insumos brutos | `workspace/Input/` |
272
- | 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 | Lê 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 | Lê 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 já está em `docs/` — se sim, marca resolvida, não pergunta
157
+ 5. **Specs são auto-contidos**: coder lê 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
+ **Quem lê o 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 lê 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 inexistente → PARAR
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/*` — Só 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/` |