spec-first-copilot 0.6.0-beta.9 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +121 -0
- 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 +14 -14
- package/templates/.github/agents/db-coder.md +165 -165
- package/templates/.github/agents/doc-writer.md +66 -53
- package/templates/.github/agents/frontend-coder.md +5 -5
- package/templates/.github/agents/infra-coder.md +341 -341
- package/templates/.github/agents/reviewer.md +6 -6
- package/templates/.github/agents/security-reviewer.md +153 -153
- package/templates/.github/copilot-instructions.md +272 -262
- 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 -223
- package/templates/.github/skills/sf-design/SKILL.md +161 -216
- package/templates/.github/skills/sf-dev/SKILL.md +204 -351
- package/templates/.github/skills/sf-discovery/SKILL.md +415 -414
- package/templates/.github/skills/sf-extract/SKILL.md +225 -249
- package/templates/.github/skills/sf-load/SKILL.md +296 -295
- package/templates/.github/skills/sf-mcp/SKILL.md +386 -385
- package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -100
- package/templates/.github/skills/sf-plan/SKILL.md +152 -128
- package/templates/.github/skills/sf-publish/SKILL.md +144 -143
- package/templates/.github/skills/sf-session-finish/SKILL.md +93 -120
- package/templates/.github/skills/sf-start/SKILL.md +192 -145
- 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 -286
- package/templates/.github/templates/feature/Progresso.template.md +141 -141
- package/templates/.github/templates/feature/TRD.template.md +358 -0
- package/templates/.github/templates/feature/context.template.md +89 -48
- package/templates/.github/templates/feature/extract-log.template.md +49 -39
- 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 -59
- package/templates/.github/templates/specs/contracts.template.md +147 -141
- package/templates/.github/templates/specs/scenarios.template.md +125 -117
- package/templates/.github/templates/specs/tasks.template.md +65 -63
- package/templates/_gitignore +35 -35
- package/templates/sfw.config.yml.example +147 -147
- package/templates/.github/templates/feature/backlog-extraido.template.md +0 -156
- package/templates/.github/templates/feature/sdd.template.md +0 -559
|
@@ -1,141 +1,141 @@
|
|
|
1
|
-
# Progresso — {{FEATURE}}
|
|
2
|
-
|
|
3
|
-
> Visão consolidada do andamento da feature.
|
|
4
|
-
> Organizado por **fases de entrega** — cada fase é um entregável independente.
|
|
5
|
-
> Atualizado automaticamente pelo /sf-dev a cada task concluída.
|
|
6
|
-
>
|
|
7
|
-
> **Este arquivo rastreia FASES DE ENTREGA, não o pipeline do SFW.**
|
|
8
|
-
> O estado do pipeline (extract_done, design_done, plan_done, dev_in_progress, dev_done, done)
|
|
9
|
-
> vive em `.context.md`. Aqui rastreamos: "as fases de entrega do PRD §11 já foram implementadas?"
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## Status das Fases: `não iniciado`
|
|
14
|
-
|
|
15
|
-
<!-- não iniciado → em desenvolvimento → em revisão → concluído → arquivado
|
|
16
|
-
(vocabulário PRÓPRIO deste arquivo — não confundir com status da pipeline em .context.md) -->
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
<!--
|
|
21
|
-
=============================================================================
|
|
22
|
-
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
23
|
-
=============================================================================
|
|
24
|
-
|
|
25
|
-
COMO GERAR ESTE ARQUIVO:
|
|
26
|
-
|
|
27
|
-
1. Ler PRD §11 (Fases de Entrega) para definir as fases
|
|
28
|
-
2. Ler TODOS os specs/{nome}/tasks.md da feature
|
|
29
|
-
3. Para cada FASE DE ENTREGA, listar as áreas e contagem de tasks
|
|
30
|
-
4. A visão primária é POR FASE, não por área
|
|
31
|
-
|
|
32
|
-
COMO ATUALIZAR:
|
|
33
|
-
|
|
34
|
-
- O /sf-dev atualiza após cada task concluída
|
|
35
|
-
- Status por fase: ⬜ pendente → 🔄 em andamento → ✅ concluída
|
|
36
|
-
- Fase concluída = todas tasks de todas áreas daquela fase estão [x]
|
|
37
|
-
- Ao concluir uma fase: registrar no Histórico + abrir PR
|
|
38
|
-
|
|
39
|
-
=============================================================================
|
|
40
|
-
-->
|
|
41
|
-
|
|
42
|
-
## Fases de Entrega
|
|
43
|
-
|
|
44
|
-
| Fase | Nome | Prioridade | Entregável | Status | Tasks |
|
|
45
|
-
|------|------|-----------|------------|--------|-------|
|
|
46
|
-
| 1 | {{Nome}} | P1 | {{Entregável}} | ⬜ pendente | 0/{{N}} |
|
|
47
|
-
| 2 | {{Nome}} | P1 | {{Entregável}} | ⬜ pendente | 0/{{N}} |
|
|
48
|
-
| 3 | {{Nome}} | P2 | {{Entregável}} | ⬜ pendente | 0/{{N}} |
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## Fase 1 — {{Nome}} [P1]
|
|
53
|
-
|
|
54
|
-
> **Entregável**: {{O que o usuário pode usar}}
|
|
55
|
-
> **Critério de done**: {{Testes E2E que devem passar}}
|
|
56
|
-
> **Branch**: `feature/{{FEATURE}}_fase1`
|
|
57
|
-
> **PR**: (a ser criado)
|
|
58
|
-
|
|
59
|
-
### Tasks por área
|
|
60
|
-
|
|
61
|
-
#### {{AREA_1}} ({{N}} tasks)
|
|
62
|
-
|
|
63
|
-
| Task | Descrição | Tamanho | Repo | Status |
|
|
64
|
-
|------|-----------|---------|------|--------|
|
|
65
|
-
| AREA-001 | | S/M/L | {{repo}} | ⬜ |
|
|
66
|
-
|
|
67
|
-
#### {{AREA_2}} ({{N}} tasks)
|
|
68
|
-
|
|
69
|
-
| Task | Descrição | Tamanho | Repo | Status |
|
|
70
|
-
|------|-----------|---------|------|--------|
|
|
71
|
-
| AREA-001 | | S/M/L | {{repo}} | ⬜ |
|
|
72
|
-
|
|
73
|
-
### Resumo Fase 1
|
|
74
|
-
|
|
75
|
-
| Área | Total | Feitas | % |
|
|
76
|
-
|------|-------|--------|---|
|
|
77
|
-
| {{AREA_1}} | {{N}} | 0 | 0% |
|
|
78
|
-
| {{AREA_2}} | {{N}} | 0 | 0% |
|
|
79
|
-
| **Total Fase 1** | **{{N}}** | **0** | **0%** |
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## Fase 2 — {{Nome}} [P1]
|
|
84
|
-
|
|
85
|
-
> **Entregável**: {{...}}
|
|
86
|
-
> **Depende de**: Fase 1 concluída
|
|
87
|
-
|
|
88
|
-
<!-- Repetir mesma estrutura -->
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Totais Gerais
|
|
93
|
-
|
|
94
|
-
| Fase | Total | Feitas | % |
|
|
95
|
-
|------|-------|--------|---|
|
|
96
|
-
| Fase 1 | {{N}} | 0 | 0% |
|
|
97
|
-
| Fase 2 | {{N}} | 0 | 0% |
|
|
98
|
-
| **Total** | **{{N}}** | **0** | **0%** |
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## Ordem de Execução
|
|
103
|
-
|
|
104
|
-
```
|
|
105
|
-
Fase 1:
|
|
106
|
-
1. INFRA (setup de repos/ambiente)
|
|
107
|
-
2. DB (schema/migrations)
|
|
108
|
-
3. BACK (endpoints) ← pode paralelizar com FRONT após DB
|
|
109
|
-
4. FRONT (telas)
|
|
110
|
-
→ PR Fase 1 + testes manuais + merge
|
|
111
|
-
|
|
112
|
-
Fase 2:
|
|
113
|
-
1. DB (novas tabelas/migrations)
|
|
114
|
-
2. BACK (endpoints + regras)
|
|
115
|
-
3. FRONT (telas + integração)
|
|
116
|
-
→ PR Fase 2 + testes manuais + merge
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## Histórico
|
|
122
|
-
|
|
123
|
-
| Data | Evento | Detalhes |
|
|
124
|
-
|------|--------|----------|
|
|
125
|
-
| | Feature criada | PRD
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## Pós-conclusão (por fase)
|
|
130
|
-
|
|
131
|
-
- [ ] PR aberto com template detalhado
|
|
132
|
-
- [ ] Ambiente local rodando para testes manuais
|
|
133
|
-
- [ ] Testes automatizados passando (unit + integration + security)
|
|
134
|
-
- [ ] Usuário aprovou e fez merge
|
|
135
|
-
|
|
136
|
-
## Pós-conclusão (feature completa)
|
|
137
|
-
|
|
138
|
-
- [ ] Todas fases concluídas e mergeadas
|
|
139
|
-
- [ ]
|
|
140
|
-
- [ ] Atualizar `workspace/Output/progresso.md` (visão global)
|
|
141
|
-
- [ ] Atualizar `.ai/memory/napkin.md` se houver aprendizado relevante
|
|
1
|
+
# Progresso — {{FEATURE}}
|
|
2
|
+
|
|
3
|
+
> Visão consolidada do andamento da feature.
|
|
4
|
+
> Organizado por **fases de entrega** — cada fase é um entregável independente.
|
|
5
|
+
> Atualizado automaticamente pelo /sf-dev a cada task concluída.
|
|
6
|
+
>
|
|
7
|
+
> **Este arquivo rastreia FASES DE ENTREGA, não o pipeline do SFW.**
|
|
8
|
+
> O estado do pipeline (extract_done, design_done, plan_done, dev_in_progress, dev_done, done)
|
|
9
|
+
> vive em `.context.md`. Aqui rastreamos: "as fases de entrega do PRD §11 já foram implementadas?"
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Status das Fases: `não iniciado`
|
|
14
|
+
|
|
15
|
+
<!-- não iniciado → em desenvolvimento → em revisão → concluído → arquivado
|
|
16
|
+
(vocabulário PRÓPRIO deste arquivo — não confundir com status da pipeline em .context.md) -->
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
<!--
|
|
21
|
+
=============================================================================
|
|
22
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
23
|
+
=============================================================================
|
|
24
|
+
|
|
25
|
+
COMO GERAR ESTE ARQUIVO:
|
|
26
|
+
|
|
27
|
+
1. Ler PRD §11 (Fases de Entrega) para definir as fases
|
|
28
|
+
2. Ler TODOS os specs/{nome}/tasks.md da feature
|
|
29
|
+
3. Para cada FASE DE ENTREGA, listar as áreas e contagem de tasks
|
|
30
|
+
4. A visão primária é POR FASE, não por área
|
|
31
|
+
|
|
32
|
+
COMO ATUALIZAR:
|
|
33
|
+
|
|
34
|
+
- O /sf-dev atualiza após cada task concluída
|
|
35
|
+
- Status por fase: ⬜ pendente → 🔄 em andamento → ✅ concluída
|
|
36
|
+
- Fase concluída = todas tasks de todas áreas daquela fase estão [x]
|
|
37
|
+
- Ao concluir uma fase: registrar no Histórico + abrir PR
|
|
38
|
+
|
|
39
|
+
=============================================================================
|
|
40
|
+
-->
|
|
41
|
+
|
|
42
|
+
## Fases de Entrega
|
|
43
|
+
|
|
44
|
+
| Fase | Nome | Prioridade | Entregável | Status | Tasks |
|
|
45
|
+
|------|------|-----------|------------|--------|-------|
|
|
46
|
+
| 1 | {{Nome}} | P1 | {{Entregável}} | ⬜ pendente | 0/{{N}} |
|
|
47
|
+
| 2 | {{Nome}} | P1 | {{Entregável}} | ⬜ pendente | 0/{{N}} |
|
|
48
|
+
| 3 | {{Nome}} | P2 | {{Entregável}} | ⬜ pendente | 0/{{N}} |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Fase 1 — {{Nome}} [P1]
|
|
53
|
+
|
|
54
|
+
> **Entregável**: {{O que o usuário pode usar}}
|
|
55
|
+
> **Critério de done**: {{Testes E2E que devem passar}}
|
|
56
|
+
> **Branch**: `feature/{{FEATURE}}_fase1`
|
|
57
|
+
> **PR**: (a ser criado)
|
|
58
|
+
|
|
59
|
+
### Tasks por área
|
|
60
|
+
|
|
61
|
+
#### {{AREA_1}} ({{N}} tasks)
|
|
62
|
+
|
|
63
|
+
| Task | Descrição | Tamanho | Repo | Status |
|
|
64
|
+
|------|-----------|---------|------|--------|
|
|
65
|
+
| AREA-001 | | S/M/L | {{repo}} | ⬜ |
|
|
66
|
+
|
|
67
|
+
#### {{AREA_2}} ({{N}} tasks)
|
|
68
|
+
|
|
69
|
+
| Task | Descrição | Tamanho | Repo | Status |
|
|
70
|
+
|------|-----------|---------|------|--------|
|
|
71
|
+
| AREA-001 | | S/M/L | {{repo}} | ⬜ |
|
|
72
|
+
|
|
73
|
+
### Resumo Fase 1
|
|
74
|
+
|
|
75
|
+
| Área | Total | Feitas | % |
|
|
76
|
+
|------|-------|--------|---|
|
|
77
|
+
| {{AREA_1}} | {{N}} | 0 | 0% |
|
|
78
|
+
| {{AREA_2}} | {{N}} | 0 | 0% |
|
|
79
|
+
| **Total Fase 1** | **{{N}}** | **0** | **0%** |
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Fase 2 — {{Nome}} [P1]
|
|
84
|
+
|
|
85
|
+
> **Entregável**: {{...}}
|
|
86
|
+
> **Depende de**: Fase 1 concluída
|
|
87
|
+
|
|
88
|
+
<!-- Repetir mesma estrutura -->
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Totais Gerais
|
|
93
|
+
|
|
94
|
+
| Fase | Total | Feitas | % |
|
|
95
|
+
|------|-------|--------|---|
|
|
96
|
+
| Fase 1 | {{N}} | 0 | 0% |
|
|
97
|
+
| Fase 2 | {{N}} | 0 | 0% |
|
|
98
|
+
| **Total** | **{{N}}** | **0** | **0%** |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Ordem de Execução
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
Fase 1:
|
|
106
|
+
1. INFRA (setup de repos/ambiente)
|
|
107
|
+
2. DB (schema/migrations)
|
|
108
|
+
3. BACK (endpoints) ← pode paralelizar com FRONT após DB
|
|
109
|
+
4. FRONT (telas)
|
|
110
|
+
→ PR Fase 1 + testes manuais + merge
|
|
111
|
+
|
|
112
|
+
Fase 2:
|
|
113
|
+
1. DB (novas tabelas/migrations)
|
|
114
|
+
2. BACK (endpoints + regras)
|
|
115
|
+
3. FRONT (telas + integração)
|
|
116
|
+
→ PR Fase 2 + testes manuais + merge
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Histórico
|
|
122
|
+
|
|
123
|
+
| Data | Evento | Detalhes |
|
|
124
|
+
|------|--------|----------|
|
|
125
|
+
| | Feature criada | PRD e/ou TRD aprovados, specs/ gerado |
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Pós-conclusão (por fase)
|
|
130
|
+
|
|
131
|
+
- [ ] PR aberto com template detalhado
|
|
132
|
+
- [ ] Ambiente local rodando para testes manuais
|
|
133
|
+
- [ ] Testes automatizados passando (unit + integration + security)
|
|
134
|
+
- [ ] Usuário aprovou e fez merge
|
|
135
|
+
|
|
136
|
+
## Pós-conclusão (feature completa)
|
|
137
|
+
|
|
138
|
+
- [ ] Todas fases concluídas e mergeadas
|
|
139
|
+
- [ ] Rodar /sf-merge-docs (diff semântico PRD+TRD ↔ docs/) atualizou `docs/`
|
|
140
|
+
- [ ] Atualizar `workspace/Output/progresso.md` (visão global)
|
|
141
|
+
- [ ] Atualizar `.ai/memory/napkin.md` se houver aprendizado relevante
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
# TRD — {{NOME}}
|
|
2
|
+
## Technical Requirements Document
|
|
3
|
+
|
|
4
|
+
> **Artefato gerado pela IA** a partir do processamento de insumos técnicos em `workspace/Input/{{NOME}}/`.
|
|
5
|
+
> Este é um dos dois docs source do pipeline SFW (peer do PRD).
|
|
6
|
+
> O TRD é aprovado pelo **dev / tech lead** — contém todas as decisões técnicas da feature.
|
|
7
|
+
> Depois de aprovado, alimenta `/sf-merge-docs` (docs/ cross-feature) e `/sf-design` (specs/).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Meta
|
|
12
|
+
|
|
13
|
+
| Campo | Valor |
|
|
14
|
+
|-------|-------|
|
|
15
|
+
| Scope | `{{NOME}}` |
|
|
16
|
+
| Status | `em extração` → `aguardando aprovação (dev)` → `aprovado` |
|
|
17
|
+
| Insumos processados | {{LISTA_INSUMOS}} |
|
|
18
|
+
| Gerado em | |
|
|
19
|
+
| Aprovado em | |
|
|
20
|
+
| Aprovado por | {{nome do dev}} |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
<!--
|
|
25
|
+
=============================================================================
|
|
26
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
27
|
+
=============================================================================
|
|
28
|
+
|
|
29
|
+
QUANDO USAR: Gerado pelo /sf-extract (chamado via /sf-start).
|
|
30
|
+
QUEM GERA: Agent Tech-Analyzer (Opus) a partir dos outputs dos Readers (Sonnet).
|
|
31
|
+
|
|
32
|
+
PAR COM PRD: o TRD é peer do PRD. Ambos podem coexistir (caso mais comum),
|
|
33
|
+
ou o scope pode ter só um dos dois:
|
|
34
|
+
- Scope puro-produto (raro): só PRD, sem TRD
|
|
35
|
+
- Scope puro-técnico (bootstrap de infra, mudança de stack): só TRD, sem PRD
|
|
36
|
+
- Scope misto (maioria): ambos
|
|
37
|
+
|
|
38
|
+
REGRA DE OURO: o Analyzer decide qual(is) gerar baseado nos insumos. Não existe
|
|
39
|
+
"TRD empty" — se insumos não trazem conteúdo técnico, simplesmente não gera TRD.
|
|
40
|
+
Filtragem é responsabilidade do Analyzer + rastreada em §11 Rastreabilidade.
|
|
41
|
+
|
|
42
|
+
ZERO OVERLAP COM PRD:
|
|
43
|
+
- Jornadas de usuário, atores, RNs de negócio, UI → PRD
|
|
44
|
+
- Stack, schema, endpoints, validações de schema, deploy, ADRs → TRD
|
|
45
|
+
- Integrações externas: PRD descreve POR QUÊ; TRD descreve COMO
|
|
46
|
+
- Validações: PRD descreve regras de domínio; TRD descreve validações de formato
|
|
47
|
+
|
|
48
|
+
COMO GERAR:
|
|
49
|
+
1. Readers (Sonnet) leem cada arquivo do Input/ individualmente e catalogam por seção
|
|
50
|
+
2. Tech-Analyzer (Opus) recebe outputs e:
|
|
51
|
+
a. Consolida conteúdo técnico em visão unificada
|
|
52
|
+
b. Organiza por área (§Sistema + §Backend + §Frontend + §DB + §Infra)
|
|
53
|
+
c. Cruza com `docs/` (se existir) pra evitar decisões contraditórias
|
|
54
|
+
d. Identifica ambiguidades técnicas (ex: "qual DB?", "sync ou async?")
|
|
55
|
+
3. Consultar `docs/` ANTES de marcar ambiguidade — se `docs/architecture.md` já
|
|
56
|
+
define stack, não perguntar de novo. Marcar "resolvido em docs/X §Y"
|
|
57
|
+
4. Registrar DE QUAL insumo veio cada informação (rastreabilidade §11)
|
|
58
|
+
|
|
59
|
+
GATES POR ÁREA:
|
|
60
|
+
Cada seção §Área tem GATE: SIM/NÃO.
|
|
61
|
+
- GATE=SIM: feature toca essa área → preencher completo
|
|
62
|
+
- GATE=NÃO: feature não toca → escrever "N/A — feature não toca esta área" e pular
|
|
63
|
+
Em first-run (bootstrap), §Sistema é SEMPRE GATE=SIM (baseline completo).
|
|
64
|
+
|
|
65
|
+
ARQUIVOS DE INFRA:
|
|
66
|
+
TRD §Infra inclui docker-compose, Dockerfile, CI/CD scripts, env vars esperadas.
|
|
67
|
+
Mas não inclui arquivo de infra em si — só a DECISÃO. Arquivos reais viram tasks
|
|
68
|
+
no /sf-plan.
|
|
69
|
+
|
|
70
|
+
RELAÇÃO COM ADRs:
|
|
71
|
+
§9 Decisões Técnicas tem ADR-NNN com justificativa e alternativas. Esses ADRs
|
|
72
|
+
são sincronizados em docs/decisions.md via /sf-merge-docs após aprovação.
|
|
73
|
+
|
|
74
|
+
RE-GERAÇÃO:
|
|
75
|
+
- Merge ADITIVO com TRD existente (novos insumos não apagam decisões já aprovadas)
|
|
76
|
+
- Seções modificadas marcadas com <!-- ATUALIZADO: re-extração ISO_DATE -->
|
|
77
|
+
- IDs de ADR continuam sequência existente
|
|
78
|
+
- Se user quiser recomeçar do zero: deletar TRD.md + .extract-log.md manualmente
|
|
79
|
+
|
|
80
|
+
=============================================================================
|
|
81
|
+
-->
|
|
82
|
+
|
|
83
|
+
## 1. §Sistema
|
|
84
|
+
|
|
85
|
+
> **GATE**: SIM / NÃO
|
|
86
|
+
> Baseline técnico da feature. Em first-run, preenche-se completo (é a base
|
|
87
|
+
> de todo o projeto). Em features subsequentes, preenche APENAS o que MUDA.
|
|
88
|
+
|
|
89
|
+
### 1.1 Stack
|
|
90
|
+
|
|
91
|
+
| Camada | Tecnologia | Versão | Justificativa breve |
|
|
92
|
+
|--------|-----------|--------|---------------------|
|
|
93
|
+
| | | | |
|
|
94
|
+
|
|
95
|
+
### 1.2 Arquitetura (C4 Nível 2)
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
<!-- Representação textual dos containers e suas conexões -->
|
|
99
|
+
<!-- Formato: [Container] --protocolo--> [Container] -->
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
| Container | Tecnologia | Responsabilidade | Porta | Comunicação |
|
|
103
|
+
|-----------|-----------|-----------------|-------|-------------|
|
|
104
|
+
| | | | | |
|
|
105
|
+
|
|
106
|
+
### 1.3 Ambientes
|
|
107
|
+
|
|
108
|
+
| Ambiente | URL | Banco | Branch |
|
|
109
|
+
|----------|-----|-------|--------|
|
|
110
|
+
| Local | | | qualquer |
|
|
111
|
+
| Staging | | | develop |
|
|
112
|
+
| Produção | | | main |
|
|
113
|
+
|
|
114
|
+
### 1.4 Deploy baseline
|
|
115
|
+
|
|
116
|
+
| Aspecto | Decisão |
|
|
117
|
+
|---------|---------|
|
|
118
|
+
| Plataforma | |
|
|
119
|
+
| Estratégia | rolling / blue-green / canary |
|
|
120
|
+
| Build | |
|
|
121
|
+
|
|
122
|
+
### 1.5 Segurança baseline
|
|
123
|
+
|
|
124
|
+
- Autenticação: <!-- JWT/OAuth2/Session --> (detalhes em §7)
|
|
125
|
+
- CORS: <!-- config geral -->
|
|
126
|
+
- TLS: <!-- versão mínima -->
|
|
127
|
+
- Secrets: <!-- onde e como -->
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 2. §Área-Backend
|
|
132
|
+
|
|
133
|
+
> **GATE**: SIM / NÃO
|
|
134
|
+
|
|
135
|
+
### 2.1 Endpoints
|
|
136
|
+
|
|
137
|
+
| Método | Rota | Auth | Responsabilidade |
|
|
138
|
+
|--------|------|------|------------------|
|
|
139
|
+
| | | | |
|
|
140
|
+
|
|
141
|
+
### 2.2 Services / Camadas
|
|
142
|
+
|
|
143
|
+
| Service | Responsabilidade | Depende de |
|
|
144
|
+
|---------|------------------|------------|
|
|
145
|
+
| | | |
|
|
146
|
+
|
|
147
|
+
### 2.3 Validações de entrada (schema)
|
|
148
|
+
|
|
149
|
+
> Formato/tipo/obrigatoriedade de campos — antes da lógica de negócio.
|
|
150
|
+
|
|
151
|
+
| Endpoint | Campo | Tipo | Obrigatório | Restrição | Erro |
|
|
152
|
+
|----------|-------|------|-------------|-----------|------|
|
|
153
|
+
| | | | | | |
|
|
154
|
+
|
|
155
|
+
### 2.4 Libs e dependências principais
|
|
156
|
+
|
|
157
|
+
| Pacote | Versão | Para quê |
|
|
158
|
+
|--------|--------|----------|
|
|
159
|
+
| | | |
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 3. §Área-Frontend
|
|
164
|
+
|
|
165
|
+
> **GATE**: SIM / NÃO
|
|
166
|
+
|
|
167
|
+
### 3.1 Rotas
|
|
168
|
+
|
|
169
|
+
| Rota | Tela | Guard | Descrição |
|
|
170
|
+
|------|------|-------|-----------|
|
|
171
|
+
| | | | |
|
|
172
|
+
|
|
173
|
+
### 3.2 Componentes principais
|
|
174
|
+
|
|
175
|
+
| Componente | Responsabilidade | Props principais |
|
|
176
|
+
|------------|------------------|------------------|
|
|
177
|
+
| | | |
|
|
178
|
+
|
|
179
|
+
### 3.3 State management
|
|
180
|
+
|
|
181
|
+
| Aspecto | Decisão |
|
|
182
|
+
|---------|---------|
|
|
183
|
+
| Server state | <!-- TanStack Query / SWR / RTK Query --> |
|
|
184
|
+
| Client state | <!-- Context / Zustand / Redux --> |
|
|
185
|
+
| Forms | <!-- React Hook Form / Formik --> |
|
|
186
|
+
|
|
187
|
+
### 3.4 Design system
|
|
188
|
+
|
|
189
|
+
- <!-- Tailwind / MUI / Fusion / custom -->
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 4. §Área-DB
|
|
194
|
+
|
|
195
|
+
> **GATE**: SIM / NÃO
|
|
196
|
+
|
|
197
|
+
### 4.1 Schema
|
|
198
|
+
|
|
199
|
+
```sql
|
|
200
|
+
-- Entidades desta feature ou alterações em tabelas existentes
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 4.2 Índices e constraints
|
|
204
|
+
|
|
205
|
+
| Nome | Tabela | Colunas | Tipo | Justificativa |
|
|
206
|
+
|------|--------|---------|------|---------------|
|
|
207
|
+
| | | | btree / unique / gin / EXCLUDE | |
|
|
208
|
+
|
|
209
|
+
### 4.3 Migrations
|
|
210
|
+
|
|
211
|
+
| # | Arquivo | Descrição | Rollback? |
|
|
212
|
+
|---|---------|-----------|-----------|
|
|
213
|
+
| 001 | | | Sim/Não |
|
|
214
|
+
|
|
215
|
+
### 4.4 Convenções (se diferem de docs/domain.md)
|
|
216
|
+
|
|
217
|
+
- <!-- Apenas o que é particular a esta feature -->
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## 5. §Área-Infra
|
|
222
|
+
|
|
223
|
+
> **GATE**: SIM / NÃO
|
|
224
|
+
|
|
225
|
+
### 5.1 Containers
|
|
226
|
+
|
|
227
|
+
- <!-- docker-compose.dev (só dependências: postgres, redis, etc.) -->
|
|
228
|
+
- <!-- Dockerfiles pra CI/prod se aplicável -->
|
|
229
|
+
|
|
230
|
+
### 5.2 CI/CD
|
|
231
|
+
|
|
232
|
+
| Etapa | Ferramenta | Trigger |
|
|
233
|
+
|-------|-----------|---------|
|
|
234
|
+
| Lint | | push |
|
|
235
|
+
| Test | | push |
|
|
236
|
+
| Build | | push em main/develop |
|
|
237
|
+
| Deploy staging | | push em develop |
|
|
238
|
+
| Deploy prod | | tag / manual |
|
|
239
|
+
|
|
240
|
+
### 5.3 Variáveis de ambiente
|
|
241
|
+
|
|
242
|
+
| Variável | Obrigatória | Ambientes | Exemplo |
|
|
243
|
+
|----------|-------------|-----------|---------|
|
|
244
|
+
| | Sim/Não | | |
|
|
245
|
+
|
|
246
|
+
### 5.4 Monitoramento
|
|
247
|
+
|
|
248
|
+
| Aspecto | Ferramenta | O que monitora |
|
|
249
|
+
|---------|-----------|----------------|
|
|
250
|
+
| Logs | | |
|
|
251
|
+
| Métricas| | |
|
|
252
|
+
| Alertas | | |
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 6. Integrações Externas
|
|
257
|
+
|
|
258
|
+
> Sistemas terceiros consumidos ou notificados. Timeout + Retry + Fallback são OBRIGATÓRIOS.
|
|
259
|
+
|
|
260
|
+
| Sistema | Direção | Protocolo | Timeout | Retry | Fallback |
|
|
261
|
+
|---------|---------|-----------|---------|-------|----------|
|
|
262
|
+
| | envia/recebe/ambos | REST/gRPC/webhook | | | |
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## 7. Segurança Detalhada
|
|
267
|
+
|
|
268
|
+
### 7.1 Autenticação
|
|
269
|
+
|
|
270
|
+
| Aspecto | Implementação |
|
|
271
|
+
|---------|--------------|
|
|
272
|
+
| Método | JWT / OAuth2 / Session |
|
|
273
|
+
| Expiração access | |
|
|
274
|
+
| Refresh token | |
|
|
275
|
+
| Hash de senha | bcrypt rounds N / argon2 |
|
|
276
|
+
|
|
277
|
+
### 7.2 Autorização
|
|
278
|
+
|
|
279
|
+
| Aspecto | Decisão |
|
|
280
|
+
|---------|---------|
|
|
281
|
+
| Tipo | RBAC / ABAC / RBAC+ABAC |
|
|
282
|
+
| Onde é verificado | Middleware / Decorator / Service |
|
|
283
|
+
|
|
284
|
+
#### Papéis e permissões
|
|
285
|
+
|
|
286
|
+
| Papel | Herda de | Permissões desta feature |
|
|
287
|
+
|-------|----------|--------------------------|
|
|
288
|
+
| | | |
|
|
289
|
+
|
|
290
|
+
### 7.3 LGPD / Privacidade (se aplicável)
|
|
291
|
+
|
|
292
|
+
| Dado | Base legal | Retenção | Criptografado? |
|
|
293
|
+
|------|-----------|----------|----------------|
|
|
294
|
+
| | | | |
|
|
295
|
+
|
|
296
|
+
### 7.4 Rate limiting
|
|
297
|
+
|
|
298
|
+
| Categoria | Limite | Janela | Resposta |
|
|
299
|
+
|-----------|--------|--------|----------|
|
|
300
|
+
| | | | 429 + Retry-After |
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## 8. Estratégia de Testes
|
|
305
|
+
|
|
306
|
+
| Nível | Framework | Escopo | Quando roda |
|
|
307
|
+
|-------|-----------|--------|-------------|
|
|
308
|
+
| Unit | | lógica isolada | por task |
|
|
309
|
+
| Integration | | request → DB → response | por fase |
|
|
310
|
+
| E2E | | jornadas completas | por feature |
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## 9. Decisões Técnicas (ADRs)
|
|
315
|
+
|
|
316
|
+
> Cada ADR é imutável após aceita. Sincronizada em docs/decisions.md via /sf-merge-docs.
|
|
317
|
+
|
|
318
|
+
### ADR-001: {{Título}}
|
|
319
|
+
- **Status**: proposta | aceita | substituída por ADR-XXX | descartada
|
|
320
|
+
- **Data**: YYYY-MM-DD
|
|
321
|
+
- **Contexto**: <!-- Por que essa decisão foi necessária? -->
|
|
322
|
+
- **Decisão**: <!-- O que decidimos? -->
|
|
323
|
+
- **Alternativas consideradas**:
|
|
324
|
+
1. <!-- Alternativa A — rejeitada porque... -->
|
|
325
|
+
2. <!-- Alternativa B — rejeitada porque... -->
|
|
326
|
+
- **Consequências**:
|
|
327
|
+
- Positivas: <!-- -->
|
|
328
|
+
- Negativas: <!-- -->
|
|
329
|
+
- Riscos: <!-- -->
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## 10. Ambiguidades Técnicas
|
|
334
|
+
|
|
335
|
+
> ⚠️ **BLOQUEANTE** — `/sf-design` NÃO avança enquanto houver linha com `Resposta`
|
|
336
|
+
> vazia E `Resolvido em docs/` vazio.
|
|
337
|
+
>
|
|
338
|
+
> **Como responder** (ver `.github/skills/sf-extract/SKILL.md` → "Como responder ambiguidades"):
|
|
339
|
+
> preencher a coluna `Resposta` direto nesta tabela e rodar `/sf-design` de novo.
|
|
340
|
+
|
|
341
|
+
| ID | Pergunta | Contexto | Fonte | Consultei docs/? | Resposta | Resolvido em docs/ |
|
|
342
|
+
|----|----------|----------|-------|------------------|----------|--------------------|
|
|
343
|
+
| AMB-TRD-001 | ⚠️ | | | sim / não / ausente | (aguardando) | — |
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## 11. Rastreabilidade
|
|
348
|
+
|
|
349
|
+
> Mapa de qual insumo originou qual seção. Permite auditoria da extração.
|
|
350
|
+
|
|
351
|
+
| Insumo | Tipo | Seções alimentadas |
|
|
352
|
+
|--------|------|--------------------|
|
|
353
|
+
| `{{arquivo}}` | {{tipo}} | §1.1, §1.2, §2.1, §9 (ADR-001) |
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
> **Próximo passo**: Após aprovação do dev (campo `trd_aprovado: true` no
|
|
358
|
+
> `.context.md`), este TRD alimenta `/sf-design` (specs/) + `/sf-merge-docs` (docs/).
|