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,89 +1,89 @@
|
|
|
1
|
-
---
|
|
2
|
-
nome: "{{NOME}}"
|
|
3
|
-
first_run: {{true|false}}
|
|
4
|
-
prd_existe: {{true|false}}
|
|
5
|
-
trd_existe: {{true|false}}
|
|
6
|
-
prd_aprovado: {{true|false}}
|
|
7
|
-
trd_aprovado: {{true|false}}
|
|
8
|
-
areas_tocadas: []
|
|
9
|
-
input_path: "workspace/Input/{{NOME}}/"
|
|
10
|
-
status: "not_started"
|
|
11
|
-
ultima_skill: ""
|
|
12
|
-
atualizado_em: ""
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
<!--
|
|
16
|
-
=============================================================================
|
|
17
|
-
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
18
|
-
=============================================================================
|
|
19
|
-
|
|
20
|
-
SCHEMA v4 (mudou de v3):
|
|
21
|
-
- prd_empty REMOVIDO (conceito obsoleto)
|
|
22
|
-
- prd_existe/trd_existe: bool reais (SEM aspas) indicando se /sf-extract gerou cada doc
|
|
23
|
-
- prd_aprovado/trd_aprovado: bool reais (SEM aspas) controlando gate do /sf-design
|
|
24
|
-
|
|
25
|
-
CAMPOS:
|
|
26
|
-
- nome: identificador livre do scope (ex: app_barbearia, feat_login, infra_k8s)
|
|
27
|
-
- first_run: bool — true se docs/ não existia quando /sf-start foi chamado.
|
|
28
|
-
IMUTÁVEL após criação.
|
|
29
|
-
- prd_existe: bool — true se /sf-extract gerou PRD.md (insumos tinham produto).
|
|
30
|
-
false em scopes puro-técnicos.
|
|
31
|
-
- trd_existe: bool — true se /sf-extract gerou TRD.md (insumos tinham técnica).
|
|
32
|
-
false em scopes puro-produto (raro).
|
|
33
|
-
- prd_aprovado: bool — true após PM aprovar o PRD. Se prd_existe=false, este
|
|
34
|
-
campo também fica false (não há nada a aprovar).
|
|
35
|
-
- trd_aprovado: bool — true após dev aprovar o TRD. Se trd_existe=false, fica false.
|
|
36
|
-
- areas_tocadas: lista de áreas do TRD que têm GATE=SIM. Preenchido pelo /sf-design.
|
|
37
|
-
Possíveis: BACK, FRONT, DB, INFRA. Derivado dos GATEs do TRD §2-§5.
|
|
38
|
-
- input_path: caminho relativo da pasta de insumos
|
|
39
|
-
- status: estado atual da pipeline (ver fluxo abaixo)
|
|
40
|
-
- ultima_skill: qual skill alterou este arquivo por último
|
|
41
|
-
- atualizado_em: data/hora ISO da última atualização
|
|
42
|
-
|
|
43
|
-
FLUXO DE STATUS (v4):
|
|
44
|
-
not_started
|
|
45
|
-
↓ /sf-start cria .context.md
|
|
46
|
-
discovery_done
|
|
47
|
-
↓ /sf-discovery roda (obrigatório no sfw-start)
|
|
48
|
-
extract_done
|
|
49
|
-
↓ /sf-extract gera PRD e/ou TRD
|
|
50
|
-
prd_approved ← apenas se prd_existe=true
|
|
51
|
-
↓ PM revisa e aprova PRD (skill atualiza prd_aprovado=true)
|
|
52
|
-
trd_approved ← apenas se trd_existe=true
|
|
53
|
-
↓ dev revisa e aprova TRD (skill atualiza trd_aprovado=true)
|
|
54
|
-
design_done
|
|
55
|
-
↓ /sf-design gera docs/ (first_run) + specs/ (sempre)
|
|
56
|
-
plan_done
|
|
57
|
-
↓ /sf-plan gera tasks
|
|
58
|
-
dev_in_progress
|
|
59
|
-
↓ /sf-dev executa tasks
|
|
60
|
-
dev_done
|
|
61
|
-
↓ /sf-dev finaliza (chama /sf-merge-docs automaticamente)
|
|
62
|
-
done
|
|
63
|
-
|
|
64
|
-
Se prd_existe=false: status pula direto de extract_done → trd_approved (sem passar
|
|
65
|
-
por prd_approved). Mesmo vice-versa. Ordem das aprovações dentro do par é irrelevante.
|
|
66
|
-
|
|
67
|
-
QUEM ATUALIZA:
|
|
68
|
-
- /sf-start: cria arquivo com status=not_started, first_run derivado de docs/
|
|
69
|
-
- /sf-discovery: not_started → discovery_done
|
|
70
|
-
- /sf-extract: discovery_done → extract_done, preenche prd_existe + trd_existe
|
|
71
|
-
- PM aprova: extract_done → prd_approved (atualiza prd_aprovado=true)
|
|
72
|
-
- dev aprova: extract_done|prd_approved → trd_approved (atualiza trd_aprovado=true)
|
|
73
|
-
(skill futura /approve <doc> ou edição direta do campo + re-rodar /sf-design)
|
|
74
|
-
- /sf-design: (prd_approved + trd_approved) → design_done, preenche areas_tocadas
|
|
75
|
-
Nota: se só um dos docs existe, o outro aprovado não é exigido.
|
|
76
|
-
- /sf-plan: design_done → plan_done
|
|
77
|
-
- /sf-dev: plan_done → dev_in_progress → dev_done
|
|
78
|
-
- /sf-merge-docs: dev_done → done (aplica PRD+TRD em docs/)
|
|
79
|
-
|
|
80
|
-
REGRAS:
|
|
81
|
-
- Nunca pular etapas no fluxo de status
|
|
82
|
-
- Nunca editar manualmente — apenas skills atualizam este arquivo
|
|
83
|
-
- Se status não corresponde ao esperado, a skill deve parar e avisar
|
|
84
|
-
- first_run é IMUTÁVEL após criação (representa o estado no bootstrap do scope)
|
|
85
|
-
- prd_existe/trd_existe são IMUTÁVEIS após o /sf-extract (só mudam via re-extração
|
|
86
|
-
que detecta NOVO conteúdo na outra categoria)
|
|
87
|
-
|
|
88
|
-
=============================================================================
|
|
89
|
-
-->
|
|
1
|
+
---
|
|
2
|
+
nome: "{{NOME}}"
|
|
3
|
+
first_run: {{true|false}}
|
|
4
|
+
prd_existe: {{true|false}}
|
|
5
|
+
trd_existe: {{true|false}}
|
|
6
|
+
prd_aprovado: {{true|false}}
|
|
7
|
+
trd_aprovado: {{true|false}}
|
|
8
|
+
areas_tocadas: []
|
|
9
|
+
input_path: "workspace/Input/{{NOME}}/"
|
|
10
|
+
status: "not_started"
|
|
11
|
+
ultima_skill: ""
|
|
12
|
+
atualizado_em: ""
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<!--
|
|
16
|
+
=============================================================================
|
|
17
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
18
|
+
=============================================================================
|
|
19
|
+
|
|
20
|
+
SCHEMA v4 (mudou de v3):
|
|
21
|
+
- prd_empty REMOVIDO (conceito obsoleto)
|
|
22
|
+
- prd_existe/trd_existe: bool reais (SEM aspas) indicando se /sf-extract gerou cada doc
|
|
23
|
+
- prd_aprovado/trd_aprovado: bool reais (SEM aspas) controlando gate do /sf-design
|
|
24
|
+
|
|
25
|
+
CAMPOS:
|
|
26
|
+
- nome: identificador livre do scope (ex: app_barbearia, feat_login, infra_k8s)
|
|
27
|
+
- first_run: bool — true se docs/ não existia quando /sf-start foi chamado.
|
|
28
|
+
IMUTÁVEL após criação.
|
|
29
|
+
- prd_existe: bool — true se /sf-extract gerou PRD.md (insumos tinham produto).
|
|
30
|
+
false em scopes puro-técnicos.
|
|
31
|
+
- trd_existe: bool — true se /sf-extract gerou TRD.md (insumos tinham técnica).
|
|
32
|
+
false em scopes puro-produto (raro).
|
|
33
|
+
- prd_aprovado: bool — true após PM aprovar o PRD. Se prd_existe=false, este
|
|
34
|
+
campo também fica false (não há nada a aprovar).
|
|
35
|
+
- trd_aprovado: bool — true após dev aprovar o TRD. Se trd_existe=false, fica false.
|
|
36
|
+
- areas_tocadas: lista de áreas do TRD que têm GATE=SIM. Preenchido pelo /sf-design.
|
|
37
|
+
Possíveis: BACK, FRONT, DB, INFRA. Derivado dos GATEs do TRD §2-§5.
|
|
38
|
+
- input_path: caminho relativo da pasta de insumos
|
|
39
|
+
- status: estado atual da pipeline (ver fluxo abaixo)
|
|
40
|
+
- ultima_skill: qual skill alterou este arquivo por último
|
|
41
|
+
- atualizado_em: data/hora ISO da última atualização
|
|
42
|
+
|
|
43
|
+
FLUXO DE STATUS (v4):
|
|
44
|
+
not_started
|
|
45
|
+
↓ /sf-start cria .context.md
|
|
46
|
+
discovery_done
|
|
47
|
+
↓ /sf-discovery roda (obrigatório no sfw-start)
|
|
48
|
+
extract_done
|
|
49
|
+
↓ /sf-extract gera PRD e/ou TRD
|
|
50
|
+
prd_approved ← apenas se prd_existe=true
|
|
51
|
+
↓ PM revisa e aprova PRD (skill atualiza prd_aprovado=true)
|
|
52
|
+
trd_approved ← apenas se trd_existe=true
|
|
53
|
+
↓ dev revisa e aprova TRD (skill atualiza trd_aprovado=true)
|
|
54
|
+
design_done
|
|
55
|
+
↓ /sf-design gera docs/ (first_run) + specs/ (sempre)
|
|
56
|
+
plan_done
|
|
57
|
+
↓ /sf-plan gera tasks
|
|
58
|
+
dev_in_progress
|
|
59
|
+
↓ /sf-dev executa tasks
|
|
60
|
+
dev_done
|
|
61
|
+
↓ /sf-dev finaliza (chama /sf-merge-docs automaticamente)
|
|
62
|
+
done
|
|
63
|
+
|
|
64
|
+
Se prd_existe=false: status pula direto de extract_done → trd_approved (sem passar
|
|
65
|
+
por prd_approved). Mesmo vice-versa. Ordem das aprovações dentro do par é irrelevante.
|
|
66
|
+
|
|
67
|
+
QUEM ATUALIZA:
|
|
68
|
+
- /sf-start: cria arquivo com status=not_started, first_run derivado de docs/
|
|
69
|
+
- /sf-discovery: not_started → discovery_done
|
|
70
|
+
- /sf-extract: discovery_done → extract_done, preenche prd_existe + trd_existe
|
|
71
|
+
- PM aprova: extract_done → prd_approved (atualiza prd_aprovado=true)
|
|
72
|
+
- dev aprova: extract_done|prd_approved → trd_approved (atualiza trd_aprovado=true)
|
|
73
|
+
(skill futura /approve <doc> ou edição direta do campo + re-rodar /sf-design)
|
|
74
|
+
- /sf-design: (prd_approved + trd_approved) → design_done, preenche areas_tocadas
|
|
75
|
+
Nota: se só um dos docs existe, o outro aprovado não é exigido.
|
|
76
|
+
- /sf-plan: design_done → plan_done
|
|
77
|
+
- /sf-dev: plan_done → dev_in_progress → dev_done
|
|
78
|
+
- /sf-merge-docs: dev_done → done (aplica PRD+TRD em docs/)
|
|
79
|
+
|
|
80
|
+
REGRAS:
|
|
81
|
+
- Nunca pular etapas no fluxo de status
|
|
82
|
+
- Nunca editar manualmente — apenas skills atualizam este arquivo
|
|
83
|
+
- Se status não corresponde ao esperado, a skill deve parar e avisar
|
|
84
|
+
- first_run é IMUTÁVEL após criação (representa o estado no bootstrap do scope)
|
|
85
|
+
- prd_existe/trd_existe são IMUTÁVEIS após o /sf-extract (só mudam via re-extração
|
|
86
|
+
que detecta NOVO conteúdo na outra categoria)
|
|
87
|
+
|
|
88
|
+
=============================================================================
|
|
89
|
+
-->
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
# Extract Log — {{NOME}}
|
|
2
|
-
|
|
3
|
-
<!--
|
|
4
|
-
=============================================================================
|
|
5
|
-
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
6
|
-
=============================================================================
|
|
7
|
-
|
|
8
|
-
QUANDO USAR: Criado pelo /sf-extract na primeira extração. Atualizado em re-extrações.
|
|
9
|
-
QUEM GERA: Tech-Analyzer + Produto-Analyzer (Opus) ao final da extração.
|
|
10
|
-
|
|
11
|
-
COMO GERAR:
|
|
12
|
-
1. Cada extração gera uma nova seção com timestamp
|
|
13
|
-
2. Para cada arquivo processado registrar: nome, hash SHA-256 (8 chars),
|
|
14
|
-
classificação, status, destino (PRD e/ou TRD + seções específicas)
|
|
15
|
-
3. Classificação: contexto de re-extração (NOVO, MODIFICADO, INALTERADO)
|
|
16
|
-
4. Status: resultado da leitura (extraído, parcial, não identificado)
|
|
17
|
-
5. Destino: onde a informação do arquivo foi para
|
|
18
|
-
- Formato: `PRD §N` ou `TRD §N.M` (múltiplos separados por vírgula)
|
|
19
|
-
- Se arquivo tem info de produto E técnica, aparece em ambos
|
|
20
|
-
- Se arquivo foi puro-técnico: só TRD §N
|
|
21
|
-
- Se arquivo foi puro-produto: só PRD §N
|
|
22
|
-
|
|
23
|
-
REGRAS:
|
|
24
|
-
- Hashes são SHA-256 truncados em 8 caracteres
|
|
25
|
-
- Arquivo .gitkeep é sempre ignorado
|
|
26
|
-
- Arquivos INALTERADOS aparecem no log mas com Destino "—"
|
|
27
|
-
- Append-only: nunca remover extrações anteriores do log
|
|
28
|
-
|
|
29
|
-
CLASSIFICAÇÕES POSSÍVEIS:
|
|
30
|
-
- NOVO: arquivo não existia no log anterior
|
|
31
|
-
- MODIFICADO: hash diferente do log anterior
|
|
32
|
-
- INALTERADO: hash igual ao log anterior
|
|
33
|
-
- NÃO IDENTIFICADO: Reader não conseguiu extrair conteúdo (binário, corrompido)
|
|
34
|
-
- PARCIAL: Reader extraiu algo mas com limitações (imagem sem OCR, PDF escaneado)
|
|
35
|
-
|
|
36
|
-
MUDANÇA v3 → v4:
|
|
37
|
-
- v3 tinha coluna "Tech chunks" separada (produto/tech/both) pra /sf-design consumir
|
|
38
|
-
- v4 elimina essa categorização — tudo técnico vai direto pro TRD (já
|
|
39
|
-
estruturado), e /sf-design lê TRD + PRD em vez de chunks brutos.
|
|
40
|
-
- Resultado: extract-log mais enxuto, zero lógica de categorização residual.
|
|
41
|
-
|
|
42
|
-
=============================================================================
|
|
43
|
-
-->
|
|
44
|
-
|
|
45
|
-
## Extração 1 — {{ISO_DATETIME}}
|
|
46
|
-
|
|
47
|
-
| Arquivo | Hash | Classificação | Status | Destino |
|
|
48
|
-
|---------|------|---------------|--------|---------|
|
|
49
|
-
| `{{arquivo}}` | {{hash_8}} | NOVO | extraído | PRD §1, §5 + TRD §1.1, §2.1 |
|
|
1
|
+
# Extract Log — {{NOME}}
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
=============================================================================
|
|
5
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
6
|
+
=============================================================================
|
|
7
|
+
|
|
8
|
+
QUANDO USAR: Criado pelo /sf-extract na primeira extração. Atualizado em re-extrações.
|
|
9
|
+
QUEM GERA: Tech-Analyzer + Produto-Analyzer (Opus) ao final da extração.
|
|
10
|
+
|
|
11
|
+
COMO GERAR:
|
|
12
|
+
1. Cada extração gera uma nova seção com timestamp
|
|
13
|
+
2. Para cada arquivo processado registrar: nome, hash SHA-256 (8 chars),
|
|
14
|
+
classificação, status, destino (PRD e/ou TRD + seções específicas)
|
|
15
|
+
3. Classificação: contexto de re-extração (NOVO, MODIFICADO, INALTERADO)
|
|
16
|
+
4. Status: resultado da leitura (extraído, parcial, não identificado)
|
|
17
|
+
5. Destino: onde a informação do arquivo foi para
|
|
18
|
+
- Formato: `PRD §N` ou `TRD §N.M` (múltiplos separados por vírgula)
|
|
19
|
+
- Se arquivo tem info de produto E técnica, aparece em ambos
|
|
20
|
+
- Se arquivo foi puro-técnico: só TRD §N
|
|
21
|
+
- Se arquivo foi puro-produto: só PRD §N
|
|
22
|
+
|
|
23
|
+
REGRAS:
|
|
24
|
+
- Hashes são SHA-256 truncados em 8 caracteres
|
|
25
|
+
- Arquivo .gitkeep é sempre ignorado
|
|
26
|
+
- Arquivos INALTERADOS aparecem no log mas com Destino "—"
|
|
27
|
+
- Append-only: nunca remover extrações anteriores do log
|
|
28
|
+
|
|
29
|
+
CLASSIFICAÇÕES POSSÍVEIS:
|
|
30
|
+
- NOVO: arquivo não existia no log anterior
|
|
31
|
+
- MODIFICADO: hash diferente do log anterior
|
|
32
|
+
- INALTERADO: hash igual ao log anterior
|
|
33
|
+
- NÃO IDENTIFICADO: Reader não conseguiu extrair conteúdo (binário, corrompido)
|
|
34
|
+
- PARCIAL: Reader extraiu algo mas com limitações (imagem sem OCR, PDF escaneado)
|
|
35
|
+
|
|
36
|
+
MUDANÇA v3 → v4:
|
|
37
|
+
- v3 tinha coluna "Tech chunks" separada (produto/tech/both) pra /sf-design consumir
|
|
38
|
+
- v4 elimina essa categorização — tudo técnico vai direto pro TRD (já
|
|
39
|
+
estruturado), e /sf-design lê TRD + PRD em vez de chunks brutos.
|
|
40
|
+
- Resultado: extract-log mais enxuto, zero lógica de categorização residual.
|
|
41
|
+
|
|
42
|
+
=============================================================================
|
|
43
|
+
-->
|
|
44
|
+
|
|
45
|
+
## Extração 1 — {{ISO_DATETIME}}
|
|
46
|
+
|
|
47
|
+
| Arquivo | Hash | Classificação | Status | Destino |
|
|
48
|
+
|---------|------|---------------|--------|---------|
|
|
49
|
+
| `{{arquivo}}` | {{hash_8}} | NOVO | extraído | PRD §1, §5 + TRD §1.1, §2.1 |
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
# projetos.yaml — Manifesto de Repositórios
|
|
2
|
-
#
|
|
3
|
-
# =============================================================================
|
|
4
|
-
# INSTRUÇÕES PARA O AGENTE
|
|
5
|
-
# =============================================================================
|
|
6
|
-
#
|
|
7
|
-
# QUANDO CRIAR: Gerado pelo /sf-design em first-run (quando docs/ ainda não existia).
|
|
8
|
-
# QUEM GERA: Agent Architect (Opus), baseado no
|
|
9
|
-
#
|
|
10
|
-
# COMO GERAR:
|
|
11
|
-
# 1. Ler
|
|
12
|
-
# 2. Para cada serviço, definir: nome do repo, path local, áreas de task, stack
|
|
13
|
-
# 3. A stack DEVE vir do
|
|
14
|
-
# 4. Se o repo já existe no GitHub, marcar existing: true
|
|
15
|
-
# 5. Se é novo, marcar existing: false (será criado pelo /sf-dev INFRA-001)
|
|
16
|
-
#
|
|
17
|
-
# REGRAS:
|
|
18
|
-
# - Todo serviço identificado no
|
|
19
|
-
# - O campo `areas` define quais prefixos de task escrevem nesse repo
|
|
20
|
-
# - Uma área NÃO pode pertencer a dois repos (mapeamento 1:1)
|
|
21
|
-
# - DB pode ir junto com api (se usa ORM com migrations no mesmo repo) ou separado
|
|
22
|
-
# - O campo `stack` DEVE ser consistente com
|
|
23
|
-
# - O `org` é a organização/user do GitHub
|
|
24
|
-
#
|
|
25
|
-
# EXEMPLOS DE STACK (apenas referência — usar a REAL do
|
|
26
|
-
# - Backend: ".NET 8", "Node.js 20 + Express", "Python 3.12 + FastAPI", "Go 1.22"
|
|
27
|
-
# - Frontend: "React 18 + Vite", "Next.js 15", "Vue 3 + Nuxt", "Angular 17"
|
|
28
|
-
# - Mobile: "React Native", "Flutter", "Swift / Kotlin nativo"
|
|
29
|
-
# =============================================================================
|
|
30
|
-
|
|
31
|
-
# Organização/usuário no GitHub
|
|
32
|
-
org: "{{GITHUB_ORG}}"
|
|
33
|
-
|
|
34
|
-
# Nome base do projeto (usado como prefixo dos repos)
|
|
35
|
-
project: "{{PROJECT_NAME}}"
|
|
36
|
-
|
|
37
|
-
# Repositórios — preencher conforme serviços do
|
|
38
|
-
repos:
|
|
39
|
-
# API backend (exemplo — adaptar stack ao
|
|
40
|
-
api:
|
|
41
|
-
repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-api"
|
|
42
|
-
path: "projetos/api"
|
|
43
|
-
existing: false # true = clonar existente; false = criar novo
|
|
44
|
-
areas: [BACK, DB] # áreas de task que escrevem aqui (1:1 por área)
|
|
45
|
-
stack: "{{STACK_BACKEND}}" # do
|
|
46
|
-
branch_prefix: "feature/"
|
|
47
|
-
|
|
48
|
-
# Worker / jobs assíncronos (descomentar se
|
|
49
|
-
# worker:
|
|
50
|
-
# repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-worker"
|
|
51
|
-
# path: "projetos/worker"
|
|
52
|
-
# existing: false
|
|
53
|
-
# areas: [BACK] # ou criar área WORKER dedicada se preferir
|
|
54
|
-
# stack: "{{STACK_WORKER}}"
|
|
55
|
-
# branch_prefix: "feature/"
|
|
56
|
-
|
|
57
|
-
# Frontend web (descomentar se
|
|
58
|
-
# web:
|
|
59
|
-
# repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-web"
|
|
60
|
-
# path: "projetos/web"
|
|
61
|
-
# existing: false
|
|
62
|
-
# areas: [FRONT]
|
|
63
|
-
# stack: "{{STACK_FRONTEND}}"
|
|
64
|
-
# branch_prefix: "feature/"
|
|
65
|
-
|
|
66
|
-
# App mobile (descomentar se
|
|
67
|
-
# mobile:
|
|
68
|
-
# repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-mobile"
|
|
69
|
-
# path: "projetos/mobile"
|
|
70
|
-
# existing: false
|
|
71
|
-
# areas: [MOBILE]
|
|
72
|
-
# stack: "{{STACK_MOBILE}}"
|
|
73
|
-
# branch_prefix: "feature/"
|
|
74
|
-
|
|
75
|
-
# Notas:
|
|
76
|
-
# - projetos/ está no .gitignore do projeto-base (contém repos independentes)
|
|
77
|
-
# - Cada repo tem seu próprio .git, CI/CD, e deploy
|
|
78
|
-
# - O projeto-base é o "cérebro" — specs, docs, pipeline
|
|
79
|
-
# - Os repos em projetos/ são o "corpo" — código implementado
|
|
1
|
+
# projetos.yaml — Manifesto de Repositórios
|
|
2
|
+
#
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# INSTRUÇÕES PARA O AGENTE
|
|
5
|
+
# =============================================================================
|
|
6
|
+
#
|
|
7
|
+
# QUANDO CRIAR: Gerado pelo /sf-design em first-run (quando docs/ ainda não existia).
|
|
8
|
+
# QUEM GERA: Agent Architect (Opus), baseado no TRD §1.2 Arquitetura e §5 §Área-Infra.
|
|
9
|
+
#
|
|
10
|
+
# COMO GERAR:
|
|
11
|
+
# 1. Ler TRD §1.2 Arquitetura → identificar quais serviços existem (api, worker, web, etc.)
|
|
12
|
+
# 2. Para cada serviço, definir: nome do repo, path local, áreas de task, stack
|
|
13
|
+
# 3. A stack DEVE vir do TRD §1.1 (Stack) — não inventar, não copiar exemplo
|
|
14
|
+
# 4. Se o repo já existe no GitHub, marcar existing: true
|
|
15
|
+
# 5. Se é novo, marcar existing: false (será criado pelo /sf-dev INFRA-001)
|
|
16
|
+
#
|
|
17
|
+
# REGRAS:
|
|
18
|
+
# - Todo serviço identificado no TRD §1.2 DEVE ter uma entrada
|
|
19
|
+
# - O campo `areas` define quais prefixos de task escrevem nesse repo
|
|
20
|
+
# - Uma área NÃO pode pertencer a dois repos (mapeamento 1:1)
|
|
21
|
+
# - DB pode ir junto com api (se usa ORM com migrations no mesmo repo) ou separado
|
|
22
|
+
# - O campo `stack` DEVE ser consistente com TRD §1.1 + docs/architecture.md
|
|
23
|
+
# - O `org` é a organização/user do GitHub
|
|
24
|
+
#
|
|
25
|
+
# EXEMPLOS DE STACK (apenas referência — usar a REAL do TRD):
|
|
26
|
+
# - Backend: ".NET 8", "Node.js 20 + Express", "Python 3.12 + FastAPI", "Go 1.22"
|
|
27
|
+
# - Frontend: "React 18 + Vite", "Next.js 15", "Vue 3 + Nuxt", "Angular 17"
|
|
28
|
+
# - Mobile: "React Native", "Flutter", "Swift / Kotlin nativo"
|
|
29
|
+
# =============================================================================
|
|
30
|
+
|
|
31
|
+
# Organização/usuário no GitHub
|
|
32
|
+
org: "{{GITHUB_ORG}}"
|
|
33
|
+
|
|
34
|
+
# Nome base do projeto (usado como prefixo dos repos)
|
|
35
|
+
project: "{{PROJECT_NAME}}"
|
|
36
|
+
|
|
37
|
+
# Repositórios — preencher conforme serviços do TRD §1.2
|
|
38
|
+
repos:
|
|
39
|
+
# API backend (exemplo — adaptar stack ao TRD real do projeto)
|
|
40
|
+
api:
|
|
41
|
+
repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-api"
|
|
42
|
+
path: "projetos/api"
|
|
43
|
+
existing: false # true = clonar existente; false = criar novo
|
|
44
|
+
areas: [BACK, DB] # áreas de task que escrevem aqui (1:1 por área)
|
|
45
|
+
stack: "{{STACK_BACKEND}}" # do TRD §1.1 (ex: "Node.js 20 + Express")
|
|
46
|
+
branch_prefix: "feature/"
|
|
47
|
+
|
|
48
|
+
# Worker / jobs assíncronos (descomentar se TRD §1.2 define)
|
|
49
|
+
# worker:
|
|
50
|
+
# repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-worker"
|
|
51
|
+
# path: "projetos/worker"
|
|
52
|
+
# existing: false
|
|
53
|
+
# areas: [BACK] # ou criar área WORKER dedicada se preferir
|
|
54
|
+
# stack: "{{STACK_WORKER}}"
|
|
55
|
+
# branch_prefix: "feature/"
|
|
56
|
+
|
|
57
|
+
# Frontend web (descomentar se TRD §1.2 define)
|
|
58
|
+
# web:
|
|
59
|
+
# repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-web"
|
|
60
|
+
# path: "projetos/web"
|
|
61
|
+
# existing: false
|
|
62
|
+
# areas: [FRONT]
|
|
63
|
+
# stack: "{{STACK_FRONTEND}}"
|
|
64
|
+
# branch_prefix: "feature/"
|
|
65
|
+
|
|
66
|
+
# App mobile (descomentar se TRD §1.2 define)
|
|
67
|
+
# mobile:
|
|
68
|
+
# repo: "{{GITHUB_ORG}}/{{PROJECT_NAME}}-mobile"
|
|
69
|
+
# path: "projetos/mobile"
|
|
70
|
+
# existing: false
|
|
71
|
+
# areas: [MOBILE]
|
|
72
|
+
# stack: "{{STACK_MOBILE}}"
|
|
73
|
+
# branch_prefix: "feature/"
|
|
74
|
+
|
|
75
|
+
# Notas:
|
|
76
|
+
# - projetos/ está no .gitignore do projeto-base (contém repos independentes)
|
|
77
|
+
# - Cada repo tem seu próprio .git, CI/CD, e deploy
|
|
78
|
+
# - O projeto-base é o "cérebro" — specs, docs, pipeline
|
|
79
|
+
# - Os repos em projetos/ são o "corpo" — código implementado
|
|
@@ -1,57 +1,59 @@
|
|
|
1
|
-
# Progresso Geral
|
|
2
|
-
|
|
3
|
-
> Visão consolidada de todas as features, bugs e tarefas do projeto.
|
|
4
|
-
> Atualizado automaticamente ao final de cada `/sf-plan` e `/sf-dev`.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
<!--
|
|
9
|
-
=============================================================================
|
|
10
|
-
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado na primeira vez)
|
|
11
|
-
=============================================================================
|
|
12
|
-
|
|
13
|
-
QUANDO USAR: Criado pelo /sf-plan do primeiro setup ou feature. Atualizado por cada /sf-plan e /sf-dev.
|
|
14
|
-
|
|
15
|
-
COMO ATUALIZAR:
|
|
16
|
-
- Ao criar nova feature (/sf-plan) → adicionar linha na tabela com contadores zerados
|
|
17
|
-
- Ao concluir tasks (/sf-dev) → atualizar contadores
|
|
18
|
-
- Ao concluir feature (/sf-merge-docs) → status "concluído" ou "done"
|
|
19
|
-
|
|
20
|
-
ÁREAS SÃO DINÂMICAS:
|
|
21
|
-
- Colunas de área mudam conforme o projeto (DB, BACK, FRONT, DOC, INFRA, MOBILE...)
|
|
22
|
-
- Cada feature pode ter áreas diferentes
|
|
23
|
-
- Usar "—" quando uma feature não tem tasks naquela área
|
|
24
|
-
|
|
25
|
-
STATUS USA O VALOR DO .context.md:
|
|
26
|
-
- not_started, extract_done, approved, design_done, plan_done, dev_in_progress, dev_done, done
|
|
27
|
-
|
|
28
|
-
=============================================================================
|
|
29
|
-
-->
|
|
30
|
-
|
|
31
|
-
## Resumo
|
|
32
|
-
|
|
33
|
-
| # | Feature | Status | {{AREA_1}} | {{AREA_2}} | {{AREA_N}} | Última atualização |
|
|
34
|
-
|---|---------|--------|------------|------------|------------|-------------------|
|
|
35
|
-
| 1 | {{NOME}} | {{status}} | 0/N | 0/N | 0/N | {{data}} |
|
|
36
|
-
|
|
37
|
-
<!-- Exemplo preenchido:
|
|
38
|
-
| 1 | setup_projeto | plan_done | DB: 0/7 | BACK: 0/10 | FRONT: 0/3 | DOC: 0/8 | 2026-04-08 |
|
|
39
|
-
| 2 | feat_cadastro_cliente | extract_done | — | — | — | — | 2026-04-09 |
|
|
40
|
-
-->
|
|
41
|
-
|
|
42
|
-
## Legenda de Status
|
|
43
|
-
|
|
44
|
-
| Status | Significado |
|
|
45
|
-
|--------|-------------|
|
|
46
|
-
| `not_started` | Pipeline iniciado, aguardando
|
|
47
|
-
| `
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
50
|
-
| `
|
|
51
|
-
| `
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
1
|
+
# Progresso Geral
|
|
2
|
+
|
|
3
|
+
> Visão consolidada de todas as features, bugs e tarefas do projeto.
|
|
4
|
+
> Atualizado automaticamente ao final de cada `/sf-plan` e `/sf-dev`.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!--
|
|
9
|
+
=============================================================================
|
|
10
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado na primeira vez)
|
|
11
|
+
=============================================================================
|
|
12
|
+
|
|
13
|
+
QUANDO USAR: Criado pelo /sf-plan do primeiro setup ou feature. Atualizado por cada /sf-plan e /sf-dev.
|
|
14
|
+
|
|
15
|
+
COMO ATUALIZAR:
|
|
16
|
+
- Ao criar nova feature (/sf-plan) → adicionar linha na tabela com contadores zerados
|
|
17
|
+
- Ao concluir tasks (/sf-dev) → atualizar contadores
|
|
18
|
+
- Ao concluir feature (/sf-merge-docs) → status "concluído" ou "done"
|
|
19
|
+
|
|
20
|
+
ÁREAS SÃO DINÂMICAS:
|
|
21
|
+
- Colunas de área mudam conforme o projeto (DB, BACK, FRONT, DOC, INFRA, MOBILE...)
|
|
22
|
+
- Cada feature pode ter áreas diferentes
|
|
23
|
+
- Usar "—" quando uma feature não tem tasks naquela área
|
|
24
|
+
|
|
25
|
+
STATUS USA O VALOR DO .context.md:
|
|
26
|
+
- not_started, extract_done, approved, design_done, plan_done, dev_in_progress, dev_done, done
|
|
27
|
+
|
|
28
|
+
=============================================================================
|
|
29
|
+
-->
|
|
30
|
+
|
|
31
|
+
## Resumo
|
|
32
|
+
|
|
33
|
+
| # | Feature | Status | {{AREA_1}} | {{AREA_2}} | {{AREA_N}} | Última atualização |
|
|
34
|
+
|---|---------|--------|------------|------------|------------|-------------------|
|
|
35
|
+
| 1 | {{NOME}} | {{status}} | 0/N | 0/N | 0/N | {{data}} |
|
|
36
|
+
|
|
37
|
+
<!-- Exemplo preenchido:
|
|
38
|
+
| 1 | setup_projeto | plan_done | DB: 0/7 | BACK: 0/10 | FRONT: 0/3 | DOC: 0/8 | 2026-04-08 |
|
|
39
|
+
| 2 | feat_cadastro_cliente | extract_done | — | — | — | — | 2026-04-09 |
|
|
40
|
+
-->
|
|
41
|
+
|
|
42
|
+
## Legenda de Status
|
|
43
|
+
|
|
44
|
+
| Status | Significado |
|
|
45
|
+
|--------|-------------|
|
|
46
|
+
| `not_started` | Pipeline iniciado, aguardando /sf-discovery |
|
|
47
|
+
| `discovery_done` | Análise dos insumos feita, aguardando /sf-extract |
|
|
48
|
+
| `extract_done` | PRD e/ou TRD gerado(s), aguardando aprovações |
|
|
49
|
+
| `prd_approved` | PM aprovou PRD |
|
|
50
|
+
| `trd_approved` | dev aprovou TRD (ambas aprovações = pode chamar /sf-design) |
|
|
51
|
+
| `design_done` | `specs/{nome}/` gerado (+ `docs/` em first-run) |
|
|
52
|
+
| `plan_done` | Tasks geradas, pronto para /sf-dev |
|
|
53
|
+
| `dev_in_progress` | /sf-dev em execução |
|
|
54
|
+
| `dev_done` | Todas tasks concluídas |
|
|
55
|
+
| `done` | docs/ atualizado via /sf-merge-docs |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
> **Atualização**: Cada skill atualiza este arquivo ao criar ou concluir features.
|