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.
Files changed (55) 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 +560 -533
  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 +215 -215
  16. package/templates/.github/agents/db-coder.md +165 -165
  17. package/templates/.github/agents/doc-writer.md +66 -66
  18. package/templates/.github/agents/frontend-coder.md +222 -222
  19. package/templates/.github/agents/infra-coder.md +341 -341
  20. package/templates/.github/agents/reviewer.md +99 -99
  21. package/templates/.github/agents/security-reviewer.md +153 -153
  22. package/templates/.github/copilot-instructions.md +272 -272
  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 -289
  27. package/templates/.github/skills/sf-design/SKILL.md +161 -161
  28. package/templates/.github/skills/sf-dev/SKILL.md +204 -204
  29. package/templates/.github/skills/sf-discovery/SKILL.md +415 -415
  30. package/templates/.github/skills/sf-extract/SKILL.md +225 -225
  31. package/templates/.github/skills/sf-load/SKILL.md +296 -296
  32. package/templates/.github/skills/sf-mcp/SKILL.md +386 -386
  33. package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -152
  34. package/templates/.github/skills/sf-plan/SKILL.md +152 -152
  35. package/templates/.github/skills/sf-publish/SKILL.md +144 -144
  36. package/templates/.github/skills/sf-session-finish/SKILL.md +93 -93
  37. package/templates/.github/skills/sf-start/SKILL.md +192 -192
  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 -279
  44. package/templates/.github/templates/feature/Progresso.template.md +141 -141
  45. package/templates/.github/templates/feature/TRD.template.md +358 -358
  46. package/templates/.github/templates/feature/context.template.md +89 -89
  47. package/templates/.github/templates/feature/extract-log.template.md +49 -49
  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 -66
  51. package/templates/.github/templates/specs/contracts.template.md +147 -147
  52. package/templates/.github/templates/specs/scenarios.template.md +125 -125
  53. package/templates/.github/templates/specs/tasks.template.md +65 -65
  54. package/templates/_gitignore +35 -35
  55. package/templates/sfw.config.yml.example +147 -147
@@ -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]