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.
Files changed (57) hide show
  1. package/README.md +252 -167
  2. package/bin/cli.js +70 -70
  3. package/lib/init.js +92 -92
  4. package/lib/update.js +132 -132
  5. package/package.json +1 -1
  6. package/templates/.ai/memory/napkin.md +68 -68
  7. package/templates/.github/CHANGELOG.md +121 -0
  8. package/templates/.github/adapters/SETUP.md +314 -314
  9. package/templates/.github/adapters/confluence.md +295 -295
  10. package/templates/.github/adapters/errors.md +234 -234
  11. package/templates/.github/adapters/filesystem.md +353 -353
  12. package/templates/.github/adapters/interface.md +301 -301
  13. package/templates/.github/adapters/naming.md +241 -241
  14. package/templates/.github/adapters/registry.md +244 -244
  15. package/templates/.github/agents/backend-coder.md +14 -14
  16. package/templates/.github/agents/db-coder.md +165 -165
  17. package/templates/.github/agents/doc-writer.md +66 -53
  18. package/templates/.github/agents/frontend-coder.md +5 -5
  19. package/templates/.github/agents/infra-coder.md +341 -341
  20. package/templates/.github/agents/reviewer.md +6 -6
  21. package/templates/.github/agents/security-reviewer.md +153 -153
  22. package/templates/.github/copilot-instructions.md +272 -262
  23. package/templates/.github/instructions/docs.instructions.md +147 -145
  24. package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
  25. package/templates/.github/rules.md +229 -229
  26. package/templates/.github/scripts/bootstrap-confluence.js +289 -223
  27. package/templates/.github/skills/sf-design/SKILL.md +161 -216
  28. package/templates/.github/skills/sf-dev/SKILL.md +204 -351
  29. package/templates/.github/skills/sf-discovery/SKILL.md +415 -414
  30. package/templates/.github/skills/sf-extract/SKILL.md +225 -249
  31. package/templates/.github/skills/sf-load/SKILL.md +296 -295
  32. package/templates/.github/skills/sf-mcp/SKILL.md +386 -385
  33. package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -100
  34. package/templates/.github/skills/sf-plan/SKILL.md +152 -128
  35. package/templates/.github/skills/sf-publish/SKILL.md +144 -143
  36. package/templates/.github/skills/sf-session-finish/SKILL.md +93 -120
  37. package/templates/.github/skills/sf-start/SKILL.md +192 -145
  38. package/templates/.github/templates/estrutura/apiContracts.template.md +160 -159
  39. package/templates/.github/templates/estrutura/architecture.template.md +169 -168
  40. package/templates/.github/templates/estrutura/conventions.template.md +214 -212
  41. package/templates/.github/templates/estrutura/decisions.template.md +107 -107
  42. package/templates/.github/templates/estrutura/domain.template.md +161 -160
  43. package/templates/.github/templates/feature/PRD.template.md +279 -286
  44. package/templates/.github/templates/feature/Progresso.template.md +141 -141
  45. package/templates/.github/templates/feature/TRD.template.md +358 -0
  46. package/templates/.github/templates/feature/context.template.md +89 -48
  47. package/templates/.github/templates/feature/extract-log.template.md +49 -39
  48. package/templates/.github/templates/feature/projetos.template.yaml +79 -79
  49. package/templates/.github/templates/global/progresso_global.template.md +59 -57
  50. package/templates/.github/templates/specs/brief.template.md +66 -59
  51. package/templates/.github/templates/specs/contracts.template.md +147 -141
  52. package/templates/.github/templates/specs/scenarios.template.md +125 -117
  53. package/templates/.github/templates/specs/tasks.template.md +65 -63
  54. package/templates/_gitignore +35 -35
  55. package/templates/sfw.config.yml.example +147 -147
  56. package/templates/.github/templates/feature/backlog-extraido.template.md +0 -156
  57. package/templates/.github/templates/feature/sdd.template.md +0 -559
@@ -1,63 +1,65 @@
1
- # Tasks — {{NOME}}
2
-
3
- > Plano de implementação: todas as tasks em tabela única com coluna Área.
4
- > Gerado pelo /sf-plan a partir do SDD + specs/{{NOME}}/. NUNCA editado manualmente.
5
-
6
- ---
7
-
8
- <!--
9
- =============================================================================
10
- INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
- =============================================================================
12
-
13
- ORIGEM: /sf-plan — deriva de sdd.md + contracts.md + scenarios.md
14
- ATUALIZAÇÃO: /sf-plan re-roda se SDD/contracts/scenarios mudarem.
15
-
16
- STATUS: vive em workspace/Output/{{NOME}}/Progresso.md — NÃO aqui.
17
- Tasks são só a definição do que precisa ser feito, não o estado atual.
18
-
19
- CAMPOS OBRIGATÓRIOS (toda task):
20
- - ID: {ÁREA}-NNN sequencial por área (DB-001, BACK-001, FRONT-001, INFRA-001)
21
- - Área: derivada do SDD — dinâmica, não fixa. Só as áreas que esta feature toca.
22
- - Fase: número da fase de entrega (do PRD §11). 1 fase = 1 entregável = 1 PR.
23
- Em bootstrap (PRD empty): toda task vai pra Fase 1 (setup inicial).
24
- - Tam: S (≤2h) | M (≤4h) | L (≤2 dias)
25
- - Título: verbo imperativo + objeto ("Criar migration tabela pedidos")
26
- - Repo: nome do serviço em projetos.yaml (api, web, worker...)
27
- - Arquivos: paths relativos ao repo que serão criados/modificados
28
- - Depende: IDs de tasks que precisam estar concluídas antes. Cross-área OK.
29
- - Ref SDD: seção do SDD que originou a task (ex: "§4.2", "§Área-BACK"). Obrigatório.
30
- - Ref CA: ID do CA em scenarios.md que esta task satisfaz. Opcional
31
- (INFRA/DOC costumam não ter; BACK/FRONT normalmente têm).
32
-
33
- PARA TASKS TAMANHO L:
34
- - Preencher bloco "Done When — {TASK-ID}" logo abaixo da tabela
35
- - L sugere: considerar dividir em 2 tasks M (INVEST: Small)
36
- - Reviewer usa "Done When" como checklist antes de aprovar
37
-
38
- REGRAS:
39
- - IDs estáveis — nunca renumerar após commit
40
- - Toda task com Ref CA deve ter teste correspondente (unit ou integration)
41
- - Mesma fase = podem rodar em paralelo dentro da área
42
- - Fases são SEQUENCIAIS entre si
43
- - Áreas são dinâmicas preencher apenas as tocadas pela feature
44
-
45
- =============================================================================
46
- -->
47
-
48
- ## Tasks
49
-
50
- | ID | Área | Fase | Tam | Título | Repo | Arquivos | Depende de | Ref SDD | Ref CA |
51
- |----|------|------|-----|--------|------|----------|-----------|---------|--------|
52
- | | | | | | | | | | |
53
-
54
- ## Done When Tasks L
55
-
56
- <!-- 1 bloco por task L. Remover esta seção inteira se não houver tasks L.
57
- 3-5 bullets verificáveis. Cada bullet deve ser observável objetivamente. -->
58
-
59
- ### {TASK-ID}
60
-
61
- - [ ]
62
- - [ ]
63
- - [ ]
1
+ # Tasks — {{NOME}}
2
+
3
+ > Plano de implementação: todas as tasks em tabela única com coluna Área.
4
+ > Gerado pelo /sf-plan a partir de PRD + TRD + specs/{{NOME}}/. NUNCA editado manualmente.
5
+
6
+ ---
7
+
8
+ <!--
9
+ =============================================================================
10
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
+ =============================================================================
12
+
13
+ ORIGEM: /sf-plan — deriva de PRD.md + TRD.md + contracts.md + scenarios.md
14
+ ATUALIZAÇÃO: /sf-plan re-roda se PRD/TRD/contracts/scenarios mudarem.
15
+
16
+ STATUS: vive em workspace/Output/{{NOME}}/Progresso.md — NÃO aqui.
17
+ Tasks são só a definição do que precisa ser feito, não o estado atual.
18
+
19
+ CAMPOS OBRIGATÓRIOS (toda task):
20
+ - ID: {ÁREA}-NNN sequencial por área (DB-001, BACK-001, FRONT-001, INFRA-001)
21
+ - Área: derivada dos GATEs do TRD §2-§5 — dinâmica, as áreas tocadas.
22
+ - Fase: número da fase de entrega (do PRD §10). 1 fase = 1 entregável = 1 PR.
23
+ Se scope não tem PRD (puro-técnico): toda task vai pra Fase 1.
24
+ - Tam: S (≤2h) | M (≤4h) | L (≤2 dias)
25
+ - Título: verbo imperativo + objeto ("Criar migration tabela pedidos")
26
+ - Repo: nome do serviço em projetos.yaml (api, web, worker...)
27
+ - Arquivos: paths relativos ao repo que serão criados/modificados
28
+ - Depende: IDs de tasks que precisam estar concluídas antes. Cross-área OK.
29
+ - Ref TRD: seção do TRD que originou a task (ex: "§2.1", "§4.1"). Obrigatório
30
+ quando existe TRD (quase sempre scopes puro-produto são raros).
31
+ - Ref CA: ID do CA em scenarios.md que esta task satisfaz. Opcional
32
+ (INFRA costuma não ter; BACK/FRONT normalmente têm).
33
+
34
+ PARA TASKS TAMANHO L:
35
+ - Preencher bloco "Done When {TASK-ID}" logo abaixo da tabela
36
+ - L sugere: considerar dividir em 2 tasks M (INVEST: Small)
37
+ - Reviewer usa "Done When" como checklist antes de aprovar
38
+
39
+ REGRAS:
40
+ - IDs estáveis nunca renumerar após commit
41
+ - Toda task com Ref CA deve ter teste correspondente (unit ou integration)
42
+ - Mesma fase = podem rodar em paralelo dentro da área
43
+ - Fases são SEQUENCIAIS entre si
44
+ - Áreas são dinâmicas — preencher apenas as tocadas pela feature
45
+ - Fase vem do PRD §10; task sem PRD correspondente (infra pura) usa Fase 1
46
+
47
+ =============================================================================
48
+ -->
49
+
50
+ ## Tasks
51
+
52
+ | ID | Área | Fase | Tam | Título | Repo | Arquivos | Depende de | Ref TRD | Ref CA |
53
+ |----|------|------|-----|--------|------|----------|-----------|---------|--------|
54
+ | | | | | | | | — | | |
55
+
56
+ ## Done When Tasks L
57
+
58
+ <!-- 1 bloco por task L. Remover esta seção inteira se não houver tasks L.
59
+ 3-5 bullets verificáveis. Cada bullet deve ser observável objetivamente. -->
60
+
61
+ ### {TASK-ID}
62
+
63
+ - [ ]
64
+ - [ ]
65
+ - [ ]
@@ -1,35 +1,35 @@
1
- # Insumos brutos do usuário — conteúdo nunca vai pro repositório
2
- # A pasta workspace/Input/ existe no repo (via .gitkeep), mas seu conteúdo é ignorado
3
- workspace/Input/**
4
- !workspace/Input/.gitkeep
5
- !workspace/Input/**/.gitkeep
6
-
7
- # Memory pessoal (opcional — commit napkin.md se quiser compartilhar com o time)
8
- # .ai/memory/napkin.md
9
-
10
- # Repositórios de serviços (clonados/criados pelo workflow — cada um tem seu próprio .git)
11
- projetos/
12
-
13
- # MCP config — contém credenciais hardcoded (Confluence token, etc.)
14
- .mcp.json
15
-
16
- # Logs internos do workflow (append-only, gerados pelos commands)
17
- .ai/load-log.md
18
- .ai/publish-log.md
19
-
20
- # IDEs
21
- .vscode/
22
- .idea/
23
-
24
- # OS
25
- .DS_Store
26
- Thumbs.db
27
-
28
- # Node
29
- node_modules/
30
- dist/
31
-
32
- # Env
33
- .env
34
- .env.*
35
- !.env.example
1
+ # Insumos brutos do usuário — conteúdo nunca vai pro repositório
2
+ # A pasta workspace/Input/ existe no repo (via .gitkeep), mas seu conteúdo é ignorado
3
+ workspace/Input/**
4
+ !workspace/Input/.gitkeep
5
+ !workspace/Input/**/.gitkeep
6
+
7
+ # Memory pessoal (opcional — commit napkin.md se quiser compartilhar com o time)
8
+ # .ai/memory/napkin.md
9
+
10
+ # Repositórios de serviços (clonados/criados pelo workflow — cada um tem seu próprio .git)
11
+ projetos/
12
+
13
+ # MCP config — contém credenciais hardcoded (Confluence token, etc.)
14
+ .mcp.json
15
+
16
+ # Logs internos do workflow (append-only, gerados pelos commands)
17
+ .ai/load-log.md
18
+ .ai/publish-log.md
19
+
20
+ # IDEs
21
+ .vscode/
22
+ .idea/
23
+
24
+ # OS
25
+ .DS_Store
26
+ Thumbs.db
27
+
28
+ # Node
29
+ node_modules/
30
+ dist/
31
+
32
+ # Env
33
+ .env
34
+ .env.*
35
+ !.env.example
@@ -1,147 +1,147 @@
1
- # ============================================================================
2
- # sfw.config.yml — Manifesto do projeto SFW
3
- # ============================================================================
4
- # Este arquivo define COMO o pipeline SFW fala com o mundo externo:
5
- # - De onde vêm os insumos do PM/PO (input)
6
- # - Pra onde vão os artefatos gerados (output.targets[])
7
- # - Como os nomes dos itens são formados (naming)
8
- #
9
- # É commitável (zero segredos). Credenciais ficam em .mcp.json gitignored
10
- # ou variáveis de ambiente exportadas ANTES de abrir o Claude Code.
11
- #
12
- # Gerado pelo CLI: `spec-first-claude init --name=X`
13
- #
14
- # Referências:
15
- # - Interface do adapter: .github/adapters/interface.md
16
- # - Adapters disponíveis: .github/adapters/registry.md
17
- # - Templating de nomes: .github/adapters/naming.md
18
- # - Erros: .github/adapters/errors.md
19
- # ============================================================================
20
-
21
- # ----------------------------------------------------------------------------
22
- # project — identidade do projeto
23
- # ----------------------------------------------------------------------------
24
- project:
25
- name: "Meu Projeto"
26
- # Page ID raiz do projeto no Confluence (o framework conhece o projeto inteiro)
27
- # root_page_id: "65708"
28
-
29
- # ----------------------------------------------------------------------------
30
- # naming — templates de nome (aplicados pela engine em .github/adapters/naming.md)
31
- # ----------------------------------------------------------------------------
32
- # Placeholders suportados: {scope}, {type}
33
- # {scope} = nome do item no Input (ex: "app_barbearia", "feat_login")
34
- # {type} = tipo do artefato (ex: "PRD", "SDD", "Progresso")
35
- # Qualquer outro placeholder → ValidationError no load do manifest.
36
- #
37
- # O usuário nomeia livremente os items no Input — o agent NÃO impõe naming.
38
- # Estes templates controlam apenas o que o agent GERA no Output.
39
- naming:
40
- # Subpasta (ou page-mãe) criada no Output por scope
41
- # Ex: "out_app_barbearia", "out_feat_login"
42
- output_container: "out_{scope}"
43
-
44
- # Nome do artefato DENTRO do container
45
- # No Confluence: {scope} no nome evita colisão de títulos no space
46
- # No filesystem: pode simplificar pra "{type}" (sem redundância de scope)
47
- output_artifact: "{scope} - {type}"
48
-
49
- # ----------------------------------------------------------------------------
50
- # input — de onde vêm os insumos do PM/PO (single source no MVP)
51
- # ----------------------------------------------------------------------------
52
- # /load {scope} usa esta seção pra puxar o conteúdo pro filesystem local.
53
- # Dev nunca edita o backend de input — só lê. PM owns este espaço.
54
- #
55
- # O agent faz listChildren(parent_page_id) e busca o scope pelo nome.
56
- # Se o scope não existir no backend, /load falha com erro explícito.
57
- input:
58
- # Chave do adapter no registry. MVP: "confluence" | "filesystem"
59
- adapter: confluence
60
-
61
- # Config passada pro adapter.validateConfig(). Campos obrigatórios/opcionais
62
- # são documentados no arquivo do adapter (ex: .github/adapters/confluence.md).
63
- config:
64
- space_key: ST
65
- parent_page_id: "360668" # page-mãe que contém os scopes no Input
66
- recursive: true # desce na árvore de scopes
67
- include_attachments: true # baixa PNGs, PDFs, planilhas
68
-
69
- # Cache local onde /load materializa os insumos
70
- cache:
71
- local_dir: "workspace/Input/"
72
- log: ".ai/load-log.md" # append-only: id, version, sha256, timestamp
73
- incremental: true # hash-based re-load (NOVO/MODIFICADO/INALTERADO)
74
-
75
- # ----------------------------------------------------------------------------
76
- # output — pra onde os artefatos vão (MVP: 1 target, multi-target em P2)
77
- # ----------------------------------------------------------------------------
78
- # Cada target recebe um subset de artefatos via `publishes`.
79
- # Auto-publish é disparado pelas skills (/extract, /design, /plan).
80
- # Agent owns este espaço. PM só aplica label `sfw-approved` pra aprovar.
81
- #
82
- # Premissa: 1 space = 1 projeto (no Confluence). Multi-projeto no mesmo
83
- # space causa colisão de títulos — constraint do Confluence, não do SFW.
84
- # Se necessário, o user diferencia no Input (nomes únicos) e o Output
85
- # herda a unicidade via {scope} no naming.
86
- output:
87
- targets:
88
-
89
- # --- Target 1: Confluence (espelho de aprovação pro time) ---------------
90
- - name: confluence-mirror
91
-
92
- adapter: confluence
93
-
94
- config:
95
- space_key: ST
96
- parent_page_id: "294931" # page-mãe do Output no Confluence
97
-
98
- # Whitelist de tipos que este target recebe.
99
- # Tipos válidos: PRD, SDD, Progresso
100
- # (tasks.md, docs/, projetos.yaml, specs/ ficam LOCAL ONLY —
101
- # ver §9.9 "Boundary publish vs local")
102
- publishes: [PRD, SDD, Progresso]
103
-
104
- # auto — skill dispara publish automaticamente no fim
105
- # manual — skill gera artefato local e pergunta se quer publicar
106
- # off — target ignorado (offline-first natural)
107
- mode: auto
108
-
109
- # Estratégia de conflict detection:
110
- # version — compara version do backend com publish-log antes de update
111
- # hash — compara sha256 do conteúdo remoto com snapshot local
112
- # none — sobrescreve cego (NÃO recomendado; perde drift humano)
113
- conflict_detection: version
114
-
115
- # Mecanismo de aprovação do artefato publicado:
116
- # label — PM aplica label na página Confluence pra marcar aprovado
117
- # none — sem aprovação formal (pipeline segue sem checar)
118
- approval_mechanism: label
119
- approval_label: "sfw-approved"
120
-
121
- # --- Target 2: Filesystem mirror (opcional — time offline/backup) -------
122
- # Descomente pra ativar. Útil pra testes E2E com FilesystemAdapter como
123
- # mock natural — zero lib de mock, zero stub.
124
- #
125
- # - name: local-mirror
126
- # adapter: filesystem
127
- # config:
128
- # root_path: "./mirror"
129
- # glob: "**/*.md"
130
- # publishes: [PRD, SDD, Progresso]
131
- # mode: auto
132
- # conflict_detection: hash
133
- # approval_mechanism: none
134
-
135
- # ----------------------------------------------------------------------------
136
- # context_pages — páginas extras que o framework pode consultar (opcional)
137
- # ----------------------------------------------------------------------------
138
- # O /mcp descobre a árvore do projeto e sugere pages que podem ser úteis
139
- # como contexto durante /extract e /design (referências, decisões, etc.)
140
- #
141
- # context_pages:
142
- # - id: "557057"
143
- # title: "Referências"
144
- # use_in: [extract, design]
145
- # - id: "425998"
146
- # title: "Decisões"
147
- # use_in: [design]
1
+ # ============================================================================
2
+ # sfw.config.yml — Manifesto do projeto SFW
3
+ # ============================================================================
4
+ # Este arquivo define COMO o pipeline SFW fala com o mundo externo:
5
+ # - De onde vêm os insumos do PM/PO (input)
6
+ # - Pra onde vão os artefatos gerados (output.targets[])
7
+ # - Como os nomes dos itens são formados (naming)
8
+ #
9
+ # É commitável (zero segredos). Credenciais ficam em .mcp.json gitignored
10
+ # ou variáveis de ambiente exportadas ANTES de abrir o Claude Code.
11
+ #
12
+ # Gerado pelo CLI: `spec-first-claude init --name=X`
13
+ #
14
+ # Referências:
15
+ # - Interface do adapter: .github/adapters/interface.md
16
+ # - Adapters disponíveis: .github/adapters/registry.md
17
+ # - Templating de nomes: .github/adapters/naming.md
18
+ # - Erros: .github/adapters/errors.md
19
+ # ============================================================================
20
+
21
+ # ----------------------------------------------------------------------------
22
+ # project — identidade do projeto
23
+ # ----------------------------------------------------------------------------
24
+ project:
25
+ name: "Meu Projeto"
26
+ # Page ID raiz do projeto no Confluence (o framework conhece o projeto inteiro)
27
+ # root_page_id: "65708"
28
+
29
+ # ----------------------------------------------------------------------------
30
+ # naming — templates de nome (aplicados pela engine em .github/adapters/naming.md)
31
+ # ----------------------------------------------------------------------------
32
+ # Placeholders suportados: {scope}, {type}
33
+ # {scope} = nome do item no Input (ex: "app_barbearia", "feat_login")
34
+ # {type} = tipo do artefato (ex: "PRD", "TRD", "Progresso")
35
+ # Qualquer outro placeholder → ValidationError no load do manifest.
36
+ #
37
+ # O usuário nomeia livremente os items no Input — o agent NÃO impõe naming.
38
+ # Estes templates controlam apenas o que o agent GERA no Output.
39
+ naming:
40
+ # Subpasta (ou page-mãe) criada no Output por scope
41
+ # Ex: "out_app_barbearia", "out_feat_login"
42
+ output_container: "out_{scope}"
43
+
44
+ # Nome do artefato DENTRO do container
45
+ # No Confluence: {scope} no nome evita colisão de títulos no space
46
+ # No filesystem: pode simplificar pra "{type}" (sem redundância de scope)
47
+ output_artifact: "{scope} - {type}"
48
+
49
+ # ----------------------------------------------------------------------------
50
+ # input — de onde vêm os insumos do PM/PO (single source no MVP)
51
+ # ----------------------------------------------------------------------------
52
+ # /load {scope} usa esta seção pra puxar o conteúdo pro filesystem local.
53
+ # Dev nunca edita o backend de input — só lê. PM owns este espaço.
54
+ #
55
+ # O agent faz listChildren(parent_page_id) e busca o scope pelo nome.
56
+ # Se o scope não existir no backend, /load falha com erro explícito.
57
+ input:
58
+ # Chave do adapter no registry. MVP: "confluence" | "filesystem"
59
+ adapter: confluence
60
+
61
+ # Config passada pro adapter.validateConfig(). Campos obrigatórios/opcionais
62
+ # são documentados no arquivo do adapter (ex: .github/adapters/confluence.md).
63
+ config:
64
+ space_key: ST
65
+ parent_page_id: "360668" # page-mãe que contém os scopes no Input
66
+ recursive: true # desce na árvore de scopes
67
+ include_attachments: true # baixa PNGs, PDFs, planilhas
68
+
69
+ # Cache local onde /load materializa os insumos
70
+ cache:
71
+ local_dir: "workspace/Input/"
72
+ log: ".ai/load-log.md" # append-only: id, version, sha256, timestamp
73
+ incremental: true # hash-based re-load (NOVO/MODIFICADO/INALTERADO)
74
+
75
+ # ----------------------------------------------------------------------------
76
+ # output — pra onde os artefatos vão (MVP: 1 target, multi-target em P2)
77
+ # ----------------------------------------------------------------------------
78
+ # Cada target recebe um subset de artefatos via `publishes`.
79
+ # Auto-publish é disparado pelas skills (/extract, /design, /plan).
80
+ # Agent owns este espaço. PM só aplica label `sfw-approved` pra aprovar.
81
+ #
82
+ # Premissa: 1 space = 1 projeto (no Confluence). Multi-projeto no mesmo
83
+ # space causa colisão de títulos — constraint do Confluence, não do SFW.
84
+ # Se necessário, o user diferencia no Input (nomes únicos) e o Output
85
+ # herda a unicidade via {scope} no naming.
86
+ output:
87
+ targets:
88
+
89
+ # --- Target 1: Confluence (espelho de aprovação pro time) ---------------
90
+ - name: confluence-mirror
91
+
92
+ adapter: confluence
93
+
94
+ config:
95
+ space_key: ST
96
+ parent_page_id: "294931" # page-mãe do Output no Confluence
97
+
98
+ # Whitelist de tipos que este target recebe.
99
+ # Tipos válidos: PRD, TRD, Progresso
100
+ # (tasks.md, docs/, projetos.yaml, specs/ ficam LOCAL ONLY —
101
+ # ver §9.9 "Boundary publish vs local")
102
+ publishes: [PRD, TRD, Progresso]
103
+
104
+ # auto — skill dispara publish automaticamente no fim
105
+ # manual — skill gera artefato local e pergunta se quer publicar
106
+ # off — target ignorado (offline-first natural)
107
+ mode: auto
108
+
109
+ # Estratégia de conflict detection:
110
+ # version — compara version do backend com publish-log antes de update
111
+ # hash — compara sha256 do conteúdo remoto com snapshot local
112
+ # none — sobrescreve cego (NÃO recomendado; perde drift humano)
113
+ conflict_detection: version
114
+
115
+ # Mecanismo de aprovação do artefato publicado:
116
+ # label — PM aplica label na página Confluence pra marcar aprovado
117
+ # none — sem aprovação formal (pipeline segue sem checar)
118
+ approval_mechanism: label
119
+ approval_label: "sfw-approved"
120
+
121
+ # --- Target 2: Filesystem mirror (opcional — time offline/backup) -------
122
+ # Descomente pra ativar. Útil pra testes E2E com FilesystemAdapter como
123
+ # mock natural — zero lib de mock, zero stub.
124
+ #
125
+ # - name: local-mirror
126
+ # adapter: filesystem
127
+ # config:
128
+ # root_path: "./mirror"
129
+ # glob: "**/*.md"
130
+ # publishes: [PRD, TRD, Progresso]
131
+ # mode: auto
132
+ # conflict_detection: hash
133
+ # approval_mechanism: none
134
+
135
+ # ----------------------------------------------------------------------------
136
+ # context_pages — páginas extras que o framework pode consultar (opcional)
137
+ # ----------------------------------------------------------------------------
138
+ # O /mcp descobre a árvore do projeto e sugere pages que podem ser úteis
139
+ # como contexto durante /extract e /design (referências, decisões, etc.)
140
+ #
141
+ # context_pages:
142
+ # - id: "557057"
143
+ # title: "Referências"
144
+ # use_in: [extract, design]
145
+ # - id: "425998"
146
+ # title: "Decisões"
147
+ # use_in: [design]
@@ -1,156 +0,0 @@
1
- # Roadmap de Produto — {{NOME}}
2
-
3
- <!--
4
- =============================================================================
5
- INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
6
- =============================================================================
7
-
8
- QUANDO USAR: Gerado pelo /sf-extract em scopes com first-run=true (bootstrap de projeto)
9
- quando insumos trazem mais produto do que cabe no PRD principal — outras features
10
- futuras que foram mencionadas mas não são o foco deste scope.
11
-
12
- COMO GERAR:
13
- 1. Durante a extração, o Analyzer separa:
14
- - Conteúdo do scope atual → PRD
15
- - Produto adicional mencionado mas fora do scope atual → backlog (aqui)
16
- 2. Em vez de listar features soltas, ORGANIZAR em fases de entrega:
17
- a. Identificar entidades/funcionalidades nos insumos
18
- b. Mapear dependências entre elas (ex: agendamento depende de cadastro)
19
- c. Agrupar em fases por dependência + complexidade
20
- d. Definir entregável por fase (o que o usuário pode usar ao final)
21
- e. Priorizar: P1 (base/core), P2 (operacional), P3 (crescimento)
22
- 3. Para cada item, rastrear o arquivo fonte
23
- 4. Sugerir UMA feature única com nome descritivo (ex: feat_mvp, feat_produto)
24
-
25
- PRINCÍPIO: Entregáveis contínuos — cada fase entrega valor e pode ir pra produção.
26
- Nunca "tudo ou nada". Pequeno e constante.
27
-
28
- CRITÉRIOS DE FASEAMENTO:
29
- - Fase 1 sempre = cadastros base / fundação (sem isso nada funciona)
30
- - Cada fase depende das anteriores (sequencial)
31
- - Cada fase tem entregável testável pelo usuário
32
- - Máximo 4-5 fases (se precisa de mais, agrupar melhor)
33
-
34
- USO POSTERIOR:
35
- - O usuário roda `/sf-start <nome>` pra cada feature do backlog que decidir construir
36
- - O /sf-extract dessa feature gera PRD com as fases já sugeridas aqui como referência
37
- - O /sf-plan organiza tasks por fase de entrega × área
38
-
39
- =============================================================================
40
- -->
41
-
42
- > Roadmap faseado de produto extraído dos insumos do setup.
43
- > Organizado por fases de entrega incrementais — cada fase entrega valor e pode ir pra produção.
44
- > Fonte de verdade para criação de features via `/feature`.
45
-
46
- ---
47
-
48
- ## Feature sugerida: `{{FEATURE_NAME}}`
49
-
50
- > {{Descrição em 1-2 frases do produto completo}}
51
-
52
- ---
53
-
54
- ## Fase 1 — {{Nome}} [P1 — Fundação]
55
-
56
- > **Entregável**: {{O que o usuário pode fazer/ver ao final desta fase}}
57
- > **Critério de done**: {{Como validar que a fase está pronta}}
58
-
59
- ### Funcionalidades
60
-
61
- | # | Funcionalidade | Tipo | Descrição | Fonte |
62
- |---|---------------|------|-----------|-------|
63
- | 1 | | CRUD / Feature / Config | | {{arquivo}} |
64
-
65
- ### Entidades envolvidas
66
-
67
- | Entidade | Campos principais | Fonte |
68
- |----------|-------------------|-------|
69
- | | | |
70
-
71
- ### Regras de negócio
72
-
73
- | ID | Regra | Fonte |
74
- |----|-------|-------|
75
- | RN-001 | | {{arquivo}} |
76
-
77
- ### Jornadas de usuário
78
-
79
- | # | Jornada | Atores | Fonte |
80
- |---|---------|--------|-------|
81
- | 1 | | | |
82
-
83
- ---
84
-
85
- ## Fase 2 — {{Nome}} [P1 — Core Business]
86
-
87
- > **Entregável**: {{O que o usuário pode fazer/ver ao final desta fase}}
88
- > **Critério de done**: {{Como validar}}
89
- > **Depende de**: Fase 1
90
-
91
- ### Funcionalidades
92
-
93
- | # | Funcionalidade | Tipo | Descrição | Fonte |
94
- |---|---------------|------|-----------|-------|
95
- | 1 | | | | |
96
-
97
- ### Entidades envolvidas
98
-
99
- | Entidade | Campos principais | Fonte |
100
- |----------|-------------------|-------|
101
- | | | |
102
-
103
- ### Regras de negócio
104
-
105
- | ID | Regra | Fonte |
106
- |----|-------|-------|
107
- | RN-NNN | | |
108
-
109
- ### Jornadas de usuário
110
-
111
- | # | Jornada | Atores | Fonte |
112
- |---|---------|--------|-------|
113
- | 1 | | | |
114
-
115
- ---
116
-
117
- ## Fase 3 — {{Nome}} [P2 — Operacional]
118
-
119
- > **Entregável**: {{...}}
120
- > **Critério de done**: {{...}}
121
- > **Depende de**: Fase 2
122
-
123
- <!-- Repetir estrutura -->
124
-
125
- ---
126
-
127
- ## Fase 4 — {{Nome}} [P3 — Crescimento]
128
-
129
- > **Entregável**: {{...}}
130
- > **Critério de done**: {{...}}
131
- > **Depende de**: Fase 3
132
-
133
- <!-- Repetir estrutura -->
134
-
135
- ---
136
-
137
- ## Visão geral das fases
138
-
139
- | Fase | Nome | Prioridade | Entregável | Depende de |
140
- |------|------|-----------|------------|------------|
141
- | 1 | | P1 | | — |
142
- | 2 | | P1 | | Fase 1 |
143
- | 3 | | P2 | | Fase 2 |
144
- | 4 | | P3 | | Fase 3 |
145
-
146
- ## Telas/fluxos identificados (por fase)
147
-
148
- | # | Tela/Fluxo | Fase | Fonte |
149
- |---|-----------|------|-------|
150
- | 1 | | | |
151
-
152
- ---
153
-
154
- > **Próximo passo**: Criar a feature com `/feature {{FEATURE_NAME}}`
155
- > O /sf-extract vai gerar o PRD usando este roadmap como referência.
156
- > O /sf-plan vai organizar tasks por fase de entrega × área.