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.
- package/README.md +252 -167
- package/bin/cli.js +70 -70
- package/lib/init.js +92 -92
- package/lib/update.js +132 -132
- package/package.json +1 -1
- package/templates/.ai/memory/napkin.md +68 -68
- package/templates/.github/CHANGELOG.md +560 -533
- package/templates/.github/adapters/SETUP.md +314 -314
- package/templates/.github/adapters/confluence.md +295 -295
- package/templates/.github/adapters/errors.md +234 -234
- package/templates/.github/adapters/filesystem.md +353 -353
- package/templates/.github/adapters/interface.md +301 -301
- package/templates/.github/adapters/naming.md +241 -241
- package/templates/.github/adapters/registry.md +244 -244
- package/templates/.github/agents/backend-coder.md +215 -215
- package/templates/.github/agents/db-coder.md +165 -165
- package/templates/.github/agents/doc-writer.md +66 -66
- package/templates/.github/agents/frontend-coder.md +222 -222
- package/templates/.github/agents/infra-coder.md +341 -341
- package/templates/.github/agents/reviewer.md +99 -99
- package/templates/.github/agents/security-reviewer.md +153 -153
- package/templates/.github/copilot-instructions.md +272 -272
- package/templates/.github/instructions/docs.instructions.md +147 -145
- package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
- package/templates/.github/rules.md +229 -229
- package/templates/.github/scripts/bootstrap-confluence.js +289 -289
- package/templates/.github/skills/sf-design/SKILL.md +161 -161
- package/templates/.github/skills/sf-dev/SKILL.md +204 -204
- package/templates/.github/skills/sf-discovery/SKILL.md +415 -415
- package/templates/.github/skills/sf-extract/SKILL.md +225 -225
- package/templates/.github/skills/sf-load/SKILL.md +296 -296
- package/templates/.github/skills/sf-mcp/SKILL.md +386 -386
- package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -152
- package/templates/.github/skills/sf-plan/SKILL.md +152 -152
- package/templates/.github/skills/sf-publish/SKILL.md +144 -144
- package/templates/.github/skills/sf-session-finish/SKILL.md +93 -93
- package/templates/.github/skills/sf-start/SKILL.md +192 -192
- package/templates/.github/templates/estrutura/apiContracts.template.md +160 -159
- package/templates/.github/templates/estrutura/architecture.template.md +169 -168
- package/templates/.github/templates/estrutura/conventions.template.md +214 -212
- package/templates/.github/templates/estrutura/decisions.template.md +107 -107
- package/templates/.github/templates/estrutura/domain.template.md +161 -160
- package/templates/.github/templates/feature/PRD.template.md +279 -279
- package/templates/.github/templates/feature/Progresso.template.md +141 -141
- package/templates/.github/templates/feature/TRD.template.md +358 -358
- package/templates/.github/templates/feature/context.template.md +89 -89
- package/templates/.github/templates/feature/extract-log.template.md +49 -49
- package/templates/.github/templates/feature/projetos.template.yaml +79 -79
- package/templates/.github/templates/global/progresso_global.template.md +59 -57
- package/templates/.github/templates/specs/brief.template.md +66 -66
- package/templates/.github/templates/specs/contracts.template.md +147 -147
- package/templates/.github/templates/specs/scenarios.template.md +125 -125
- package/templates/.github/templates/specs/tasks.template.md +65 -65
- package/templates/_gitignore +35 -35
- 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`, `
|
|
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
|
-
|
|
|
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/` |
|