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,100 +1,152 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
###
|
|
77
|
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
1
|
+
|
|
2
|
+
# /sf-merge-docs $ARGUMENTS
|
|
3
|
+
|
|
4
|
+
Skill atômica pós-dev. Aplica as decisões de **PRD + TRD aprovados** em `docs/` pra manter a síntese cross-feature sincronizada com o estado do sistema.
|
|
5
|
+
`$ARGUMENTS` = nome do scope (ex: `feat_cadastro_cliente`).
|
|
6
|
+
|
|
7
|
+
Chamado automaticamente pelo `/sf-dev` ao final. Re-executável manualmente quando precisa.
|
|
8
|
+
|
|
9
|
+
> **Mudança v3 → v4**: antes aplicava `SDD §11 Delta Specs` (mecanismo OpenSpec).
|
|
10
|
+
> Agora lê **PRD + TRD aprovados diretamente** e infere o delta comparando com
|
|
11
|
+
> o estado atual de `docs/` (diff semântico). SDD não existe mais em v4.
|
|
12
|
+
|
|
13
|
+
## Agente: Integrator (Opus)
|
|
14
|
+
|
|
15
|
+
Em v4 promovido de Sonnet → Opus: diff semântico PRD/TRD ↔ docs/ exige reasoning
|
|
16
|
+
de maior nível que o antigo "aplicar §11 explícito". Meticuloso com consistência.
|
|
17
|
+
Merge idempotente — re-aplicar os mesmos docs source não duplica conteúdo.
|
|
18
|
+
|
|
19
|
+
## Pré-condições
|
|
20
|
+
|
|
21
|
+
| # | Validação | Se falhar |
|
|
22
|
+
|---|-----------|-----------|
|
|
23
|
+
| 1 | `$ARGUMENTS` informado | Parar |
|
|
24
|
+
| 2 | `.context.md` com status `dev_done` (uso auto no /sf-dev) OU `design_done` a mais (uso manual) | Se anterior → "Rode /sf-design primeiro" |
|
|
25
|
+
| 3 | Pelo menos PRD.md OU TRD.md existe e está aprovado | Parar — "Nenhum doc source aprovado pra mergear" |
|
|
26
|
+
| 4 | `docs/` populado (veio de first-run anterior) | Parar — "/sf-design com first_run=true é quem cria docs/" |
|
|
27
|
+
|
|
28
|
+
> `/sf-merge-docs` **só se aplica a features**, não a first-run. Em first-run, é o
|
|
29
|
+
> próprio `/sf-design` que cria `docs/` a partir de PRD+TRD — não há o que mergear.
|
|
30
|
+
|
|
31
|
+
## Passos
|
|
32
|
+
|
|
33
|
+
### 1. Snapshot do estado atual de docs/
|
|
34
|
+
|
|
35
|
+
Ler `docs/{architecture,domain,conventions,apiContracts,decisions}.md`.
|
|
36
|
+
Indexar por elementos (tabelas, endpoints, ADRs, papéis, env vars...) pra diff.
|
|
37
|
+
|
|
38
|
+
### 2. Extrair elementos-destino do PRD e TRD aprovados
|
|
39
|
+
|
|
40
|
+
| Fonte (PRD/TRD) | Elemento | Destino em docs/ |
|
|
41
|
+
|-----------------|----------|------------------|
|
|
42
|
+
| TRD §1.1 Stack | Nova tecnologia / versão | `architecture.md` §Stack |
|
|
43
|
+
| TRD §1.2 Arquitetura | Novo container / padrão | `architecture.md` §Containers/Padrões |
|
|
44
|
+
| TRD §1.3 Ambientes | Novo ambiente / mudança | `architecture.md` §Ambientes |
|
|
45
|
+
| TRD §1.4 Deploy | Mudança na estratégia | `architecture.md` §Deploy |
|
|
46
|
+
| TRD §4 §Área-DB | Nova tabela / índice / FK | `domain.md` §Catálogo de Tabelas |
|
|
47
|
+
| TRD §2.1 Endpoints | Novo endpoint | `apiContracts.md` §Catálogo |
|
|
48
|
+
| TRD §7.1 Auth | Mudança em auth | `conventions.md` §Autenticação |
|
|
49
|
+
| TRD §7.2 Autorização | Novo papel / permissão | `conventions.md` §Autorização |
|
|
50
|
+
| TRD §7.3 LGPD | Novo dado pessoal | `conventions.md` §LGPD |
|
|
51
|
+
| TRD §7.4 Rate limit | Nova categoria | `conventions.md` §Rate Limiting |
|
|
52
|
+
| TRD §5.3 Env vars | Nova variável | `conventions.md` §Variáveis de Ambiente |
|
|
53
|
+
| TRD §6 Integrações | Novo sistema externo | `domain.md` §Integrações Externas |
|
|
54
|
+
| TRD §9 ADRs | Nova decisão | `decisions.md` (append-only, imutável) |
|
|
55
|
+
| PRD §2 Atores | Novo papel/persona | `domain.md` §Usuários e Papéis |
|
|
56
|
+
| PRD §5 RNs | Nova regra de negócio | (não vai pra docs/ — fica em specs/{nome}/contracts.md) |
|
|
57
|
+
|
|
58
|
+
> **Regra**: PRD alimenta poucas seções de `docs/` (só atores e alto-nível).
|
|
59
|
+
> O grosso vem do TRD — `docs/` é síntese técnica + negócio cross-feature.
|
|
60
|
+
|
|
61
|
+
### 3. Diff semântico: calcular ADDED / MODIFIED / REMOVED
|
|
62
|
+
|
|
63
|
+
Pra cada elemento-destino extraído (passo 2), comparar com snapshot (passo 1):
|
|
64
|
+
|
|
65
|
+
| Resultado | Condição | Ação |
|
|
66
|
+
|-----------|----------|------|
|
|
67
|
+
| ADDED | Elemento não existe em docs/ | Adicionar na seção apropriada |
|
|
68
|
+
| MODIFIED | Elemento existe mas mudou (nome igual, valor diferente) | Atualizar campos |
|
|
69
|
+
| UNCHANGED | Elemento existe e está igual | Skip (idempotente) |
|
|
70
|
+
| REMOVED | Elemento estava em docs/ mas não aparece em PRD+TRD aprovados | **NÃO remover** — apenas registrar no output como "possivelmente orfão" |
|
|
71
|
+
|
|
72
|
+
> **Conservadorismo em REMOVED**: PRD/TRD falam só da feature atual. Algo que
|
|
73
|
+
> "não aparece" pode ser de outra feature (que continua válida). NUNCA deletar
|
|
74
|
+
> automaticamente. Reportar e deixar remoção manual.
|
|
75
|
+
|
|
76
|
+
### 4. Aplicar ADDED e MODIFIED
|
|
77
|
+
|
|
78
|
+
- Localizar seção apropriada no doc destino
|
|
79
|
+
- Preservar estrutura do template (não quebrar tabelas)
|
|
80
|
+
- ADRs em `decisions.md`: SEMPRE append; ADR com status=aceita é imutável
|
|
81
|
+
- Registrar cada mudança em changelog do doc afetado
|
|
82
|
+
|
|
83
|
+
### 5. Changelog em cada doc afetado
|
|
84
|
+
|
|
85
|
+
Adicionar linha no `## Changelog` do doc:
|
|
86
|
+
|
|
87
|
+
```markdown
|
|
88
|
+
| Data | Feature | Tipo | Descrição |
|
|
89
|
+
|------|---------|------|-----------|
|
|
90
|
+
| {{ISO_DATE}} | $ARGUMENTS | ADDED | Endpoint POST /api/v1/users |
|
|
91
|
+
| {{ISO_DATE}} | $ARGUMENTS | MODIFIED | Matriz de permissões: novo role `manager` |
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 6. Validar consistência cross-doc
|
|
95
|
+
|
|
96
|
+
- Referências quebradas (endpoint do apiContracts referencia tabela que não existe em domain) → reportar
|
|
97
|
+
- Papel novo em conventions mas não aparece em matriz de autorização → reportar
|
|
98
|
+
- ADR substituída mas ainda referenciada → reportar
|
|
99
|
+
|
|
100
|
+
Validação reporta, não bloqueia. Usuário decide se resolve manualmente.
|
|
101
|
+
|
|
102
|
+
### 7. Atualizar status
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
status: "done"
|
|
106
|
+
ultima_skill: "/sf-merge-docs"
|
|
107
|
+
atualizado_em: "{{ISO_DATETIME}}"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 8. Saída obrigatória
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
/sf-merge-docs $ARGUMENTS — completo
|
|
114
|
+
|
|
115
|
+
docs/ sincronizado com PRD + TRD aprovados:
|
|
116
|
+
- docs/architecture.md (2 ADDED, 0 MODIFIED)
|
|
117
|
+
- docs/apiContracts.md (3 ADDED, 1 MODIFIED)
|
|
118
|
+
- docs/conventions.md (0 ADDED, 1 MODIFIED — novo role)
|
|
119
|
+
- docs/decisions.md (1 ADDED — ADR-007)
|
|
120
|
+
- docs/domain.md (0 mudanças)
|
|
121
|
+
|
|
122
|
+
Possivelmente órfãos (NÃO removidos — revisão manual):
|
|
123
|
+
- docs/apiContracts.md: endpoint `/legacy/foo` não aparece em PRD+TRD novos
|
|
124
|
+
(pode ser de outra feature; deletar manualmente se confirmado deprecated)
|
|
125
|
+
|
|
126
|
+
Validação: passed / N issues
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Erros
|
|
130
|
+
|
|
131
|
+
| Erro | Ação |
|
|
132
|
+
|------|------|
|
|
133
|
+
| Status != `dev_done` (auto) nem >= `design_done` (manual) | Parar — pedir rodar /sf-dev ou /sf-design primeiro |
|
|
134
|
+
| `docs/` não existe | Parar — explicar que `/sf-design` em first-run cria docs/ (feature só atualiza) |
|
|
135
|
+
| PRD+TRD sem nada novo vs docs/ | Marcar `done` (legítimo — feature sem impacto cross-feature) |
|
|
136
|
+
| Elemento MODIFIED não encontrado no doc | Converter pra ADDED + reportar (doc estava desatualizado) |
|
|
137
|
+
| Referências quebradas detectadas | Reportar, não bloqueia |
|
|
138
|
+
|
|
139
|
+
## Uso automático (pelo `/sf-dev`)
|
|
140
|
+
|
|
141
|
+
`/sf-dev` chama `/sf-merge-docs` automaticamente ao final de feature (não first-run):
|
|
142
|
+
|
|
143
|
+
- Condição: `status=dev_done` E `first_run=false` E (`prd_aprovado=true` OU `trd_aprovado=true`)
|
|
144
|
+
- Rodado inline, sem nova interação
|
|
145
|
+
- Falha em `/sf-merge-docs` não derruba `/sf-dev` — apenas reporta; user pode re-rodar manualmente
|
|
146
|
+
|
|
147
|
+
## Uso manual
|
|
148
|
+
|
|
149
|
+
Rodar `/sf-merge-docs $ARGUMENTS` quando:
|
|
150
|
+
- `/sf-dev` falhou e você quer sincronizar docs/ com o que já foi aprovado
|
|
151
|
+
- Fez edição direta em PRD/TRD aprovados e quer propagar pra docs/
|
|
152
|
+
- Quer forçar um re-merge (idempotente — não duplica)
|
|
@@ -1,128 +1,152 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
|
15
|
-
|
|
16
|
-
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
-
|
|
128
|
-
|
|
1
|
+
|
|
2
|
+
# /sf-plan $ARGUMENTS
|
|
3
|
+
|
|
4
|
+
Skill atômica de planejamento. Lê **PRD + TRD + specs/{nome}/** e gera
|
|
5
|
+
`specs/{nome}/tasks.md` (arquivo único) + `workspace/Output/{nome}/Progresso.md`.
|
|
6
|
+
`$ARGUMENTS` = nome do scope (ex: `app_barbearia`, `feat_cadastro_cliente`).
|
|
7
|
+
|
|
8
|
+
## Agente: Planner (Opus)
|
|
9
|
+
|
|
10
|
+
Metódico e exaustivo. Cada task auto-contida. Prioriza ordem correta.
|
|
11
|
+
|
|
12
|
+
## Pré-condições
|
|
13
|
+
|
|
14
|
+
| # | Validação | Se falhar |
|
|
15
|
+
|---|-----------|-----------|
|
|
16
|
+
| 1 | $ARGUMENTS informado | Parar |
|
|
17
|
+
| 2 | `.context.md` com status `design_done` | Se anterior → "/sf-design primeiro". Se posterior → "Tasks já geradas" |
|
|
18
|
+
| 3 | Se `prd_existe=true`: PRD.md existe e `prd_aprovado=true` | Parar (não deveria passar pelo /sf-design, mas defensivo) |
|
|
19
|
+
| 4 | Se `trd_existe=true`: TRD.md existe e `trd_aprovado=true` | Parar |
|
|
20
|
+
| 5 | `specs/{nome}/{contracts,scenarios}.md` existem (projeções do /sf-design) | Parar → "/sf-design não gerou projeções — re-rode" |
|
|
21
|
+
|
|
22
|
+
## Passos
|
|
23
|
+
|
|
24
|
+
### 1. Ler contexto
|
|
25
|
+
|
|
26
|
+
- `workspace/Output/{nome}/PRD.md` (se prd_existe) + `TRD.md` (se trd_existe) — fontes
|
|
27
|
+
- `specs/{nome}/{brief,contracts,scenarios}.md` (projeções já geradas pelo /sf-design)
|
|
28
|
+
- `projetos.yaml` + `docs/` (architecture, domain, conventions) + `.github/rules.md`
|
|
29
|
+
- Template `.github/templates/specs/tasks.template.md`
|
|
30
|
+
|
|
31
|
+
### 2. Identificar fases de entrega
|
|
32
|
+
|
|
33
|
+
Ler **PRD §10 (Fases de Entrega)** — cada fase vira um agrupamento de tasks:
|
|
34
|
+
|
|
35
|
+
- Fases são sequenciais: Fase 2 depende de Fase 1 concluída
|
|
36
|
+
- Cada fase tem entregável + critério de done
|
|
37
|
+
- O `/sf-dev` pode rodar por fase: `/sf-dev feat_nome --fase 1`
|
|
38
|
+
|
|
39
|
+
**Se scope não tem PRD** (puro-técnico): toda task vai pra **Fase 1**. Não há
|
|
40
|
+
fases de entrega de produto — é bootstrap/infra em uma leva só.
|
|
41
|
+
|
|
42
|
+
### 3. Identificar áreas (dinâmicas, vêm do TRD)
|
|
43
|
+
|
|
44
|
+
Ler `.context.md → areas_tocadas` (populado pelo /sf-design a partir dos GATEs do TRD).
|
|
45
|
+
|
|
46
|
+
| Seção do TRD | Área |
|
|
47
|
+
|--------------|------|
|
|
48
|
+
| §2 §Área-Backend (GATE=SIM) | BACK |
|
|
49
|
+
| §3 §Área-Frontend (GATE=SIM) | FRONT |
|
|
50
|
+
| §4 §Área-DB (GATE=SIM) | DB |
|
|
51
|
+
| §5 §Área-Infra (GATE=SIM) | INFRA |
|
|
52
|
+
|
|
53
|
+
Áreas com GATE=NÃO não geram tasks nessa área. Se o scope tem apenas PRD (raríssimo
|
|
54
|
+
caso puro-produto sem TRD): área FRONT derivada de PRD §7 Telas.
|
|
55
|
+
|
|
56
|
+
**INFRA em first-run** (detectado via `first_run=true` no .context):
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
- [ ] INFRA-001: Validar ambiente local + setup repos (projetos.yaml)
|
|
60
|
+
- [ ] INFRA-002: Docker-compose dev (só dependências) + Dockerfiles prod
|
|
61
|
+
- [ ] INFRA-003: Hello world — subir stack completa e validar
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
INFRA-001 sempre a PRIMEIRA; INFRA-003 sempre a ÚLTIMA da Fase 1 (validação).
|
|
65
|
+
|
|
66
|
+
### 4. Gerar `specs/{nome}/tasks.md` (arquivo único)
|
|
67
|
+
|
|
68
|
+
Tabela única com coluna `Área` diferenciando:
|
|
69
|
+
|
|
70
|
+
```markdown
|
|
71
|
+
| ID | Área | Fase | Tam | Título | Repo | Arquivos | Depende de | Ref TRD | Ref CA |
|
|
72
|
+
|----|------|------|-----|--------|------|----------|-----------|---------|--------|
|
|
73
|
+
| DB-001 | DB | 1 | S | Migration clientes | api | src/db/migrations/... | — | TRD §4.1 | — |
|
|
74
|
+
| BACK-001 | BACK | 1 | M | Endpoint POST /clientes | api | src/routes/... | DB-001 | TRD §2.1 | CA-001 |
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Regras** (ver `.github/templates/specs/tasks.template.md` pra detalhes):
|
|
78
|
+
|
|
79
|
+
- Cada task é atômica — coder lê `specs/{nome}/` + task, nada mais
|
|
80
|
+
- **Repo obrigatório** — consultar `projetos.yaml`. Caminhos relativos ao repo.
|
|
81
|
+
- Área é COLUNA, não arquivo (DB, BACK, FRONT, INFRA, MOBILE...)
|
|
82
|
+
- Tamanhos: S (≤2h), M (≤4h), L (≤2 dias). L → considerar dividir (INVEST: Small)
|
|
83
|
+
- IDs sequenciais por área, nunca reutilizar
|
|
84
|
+
- Dependências cross-area permitidas
|
|
85
|
+
- `Ref TRD`: seção do TRD (ex: `§2.1`, `§4.2`) — obrigatório quando TRD existe
|
|
86
|
+
- `Ref CA`: ID do CA em `specs/{nome}/scenarios.md` ou `—`
|
|
87
|
+
- Ordenar por Fase → Área → ID (visual)
|
|
88
|
+
|
|
89
|
+
**Tasks L**: preencher bloco "Done When — {TASK-ID}" abaixo da tabela com 3-5
|
|
90
|
+
bullets verificáveis.
|
|
91
|
+
|
|
92
|
+
### 5. Gerar `workspace/Output/{nome}/Progresso.md` (tracking)
|
|
93
|
+
|
|
94
|
+
Progresso.md vive em **workspace/Output** (tracking de execução, não spec).
|
|
95
|
+
|
|
96
|
+
- Resumo Área × Fase com contagem (derivado de `tasks.md`)
|
|
97
|
+
- Ordem de execução com paralelismos
|
|
98
|
+
- Checklist pós-conclusão (já coberto pelo /sf-merge-docs automático no fim do /sf-dev)
|
|
99
|
+
|
|
100
|
+
**Regra**: status das tasks vive SÓ em Progresso.md. `tasks.md` é o plano imutável.
|
|
101
|
+
|
|
102
|
+
### 6. Atualizar `.context.md`
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
status: "plan_done"
|
|
106
|
+
ultima_skill: "/sf-plan"
|
|
107
|
+
atualizado_em: "{{ISO_DATETIME}}"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 7. Publicar Progresso no backend (se `sfw.config.yml` existe)
|
|
111
|
+
|
|
112
|
+
Chamar `/sf-publish $ARGUMENTS Progresso`. Respeita `mode` de cada target.
|
|
113
|
+
|
|
114
|
+
**Nota**: `tasks.md`, `specs/*`, `docs/*`, `projetos.yaml` são **LOCAL ONLY** — `/sf-publish`
|
|
115
|
+
nunca toca neles. Apenas PRD/TRD/Progresso vão pro Confluence.
|
|
116
|
+
|
|
117
|
+
### 8. Saída obrigatória
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
/sf-plan $ARGUMENTS — completo
|
|
121
|
+
|
|
122
|
+
Artefatos locais:
|
|
123
|
+
- specs/$ARGUMENTS/tasks.md ({N} tasks em {F} fases, áreas: [{lista}])
|
|
124
|
+
- workspace/Output/$ARGUMENTS/Progresso.md
|
|
125
|
+
|
|
126
|
+
Publish:
|
|
127
|
+
- {target-name}: Progresso: {{status}}
|
|
128
|
+
OU
|
|
129
|
+
- SKIPPED (no sfw.config.yml)
|
|
130
|
+
|
|
131
|
+
Próximo passo:
|
|
132
|
+
/sf-dev $ARGUMENTS ← implementa tudo
|
|
133
|
+
/sf-dev $ARGUMENTS --fase 1 ← só a primeira fase (RECOMENDADO)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Saídas
|
|
137
|
+
|
|
138
|
+
- `specs/{nome}/tasks.md` — plano (tabela única)
|
|
139
|
+
- `workspace/Output/{nome}/Progresso.md` — tracking
|
|
140
|
+
|
|
141
|
+
## Rastreabilidade
|
|
142
|
+
|
|
143
|
+
Cada task gerada deve ter:
|
|
144
|
+
- **Ref TRD** (se TRD existe): seção do TRD que motivou — garante que nada do TRD
|
|
145
|
+
fica sem task correspondente
|
|
146
|
+
- **Ref CA** (se aplicável): garante que cada CA em `scenarios.md` tem pelo menos
|
|
147
|
+
1 task que o satisfaz
|
|
148
|
+
|
|
149
|
+
Validação final antes de terminar:
|
|
150
|
+
- Todo endpoint do TRD §2.1 tem task BACK correspondente? ✓
|
|
151
|
+
- Toda tabela/migration do TRD §4 tem task DB correspondente? ✓
|
|
152
|
+
- Todo CA em `scenarios.md` tem task Ref CA correspondente (ou justificativa de why not)? ✓
|