create-sdd-workflow 0.1.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 (28) hide show
  1. package/AGENTS.md +110 -0
  2. package/README.md +45 -0
  3. package/bin/create-sdd-workflow.js +249 -0
  4. package/manual_workflow_sdd_grillme_tlc.md +472 -0
  5. package/package.json +38 -0
  6. package/skills/iniciar-projeto-sdd/SKILL.md +150 -0
  7. package/skills/iniciar-projeto-sdd/assets/workflow/00-AGENTS-template.md +110 -0
  8. package/skills/iniciar-projeto-sdd/assets/workflow/01-brief-template.md +17 -0
  9. package/skills/iniciar-projeto-sdd/assets/workflow/02-grillme-brief-prompt.md +27 -0
  10. package/skills/iniciar-projeto-sdd/assets/workflow/03-grillme-product-prompt.md +37 -0
  11. package/skills/iniciar-projeto-sdd/assets/workflow/04-prd-template.md +37 -0
  12. package/skills/iniciar-projeto-sdd/assets/workflow/05-prd-compression-prompt.md +33 -0
  13. package/skills/iniciar-projeto-sdd/assets/workflow/06-prespec-prompt.md +52 -0
  14. package/skills/iniciar-projeto-sdd/assets/workflow/07-derive-docs-prompt.md +32 -0
  15. package/skills/iniciar-projeto-sdd/assets/workflow/08-tlc-execution-prompt.md +32 -0
  16. package/skills/iniciar-projeto-sdd/assets/workflow/09-quality-checklists.md +35 -0
  17. package/skills/iniciar-projeto-sdd/references/workflow-summary.md +69 -0
  18. package/skills/iniciar-projeto-sdd/scripts/init_sdd_project.sh +182 -0
  19. package/workflow/00-AGENTS-template.md +110 -0
  20. package/workflow/01-brief-template.md +17 -0
  21. package/workflow/02-grillme-brief-prompt.md +27 -0
  22. package/workflow/03-grillme-product-prompt.md +37 -0
  23. package/workflow/04-prd-template.md +37 -0
  24. package/workflow/05-prd-compression-prompt.md +33 -0
  25. package/workflow/06-prespec-prompt.md +52 -0
  26. package/workflow/07-derive-docs-prompt.md +32 -0
  27. package/workflow/08-tlc-execution-prompt.md +32 -0
  28. package/workflow/09-quality-checklists.md +35 -0
package/AGENTS.md ADDED
@@ -0,0 +1,110 @@
1
+ # AGENTS.md
2
+
3
+ ## Objetivo
4
+
5
+ Este repositório usa um workflow SDD com Grill-me, PreSpec Técnica e TLC Spec-Driven.
6
+
7
+ O agente deve seguir os documentos e templates do diretório `/workflow` antes de gerar documentação ou implementar código.
8
+
9
+ ## Estrutura de documentação
10
+
11
+ - `docs/product/Brief_Inicial.md`: brief curto criado na etapa inicial.
12
+ - `docs/product/PRD_Principal.md`: fonte de verdade de produto.
13
+ - `docs/technical/PreSpec_Tecnica.md`: ponte entre produto e engenharia.
14
+ - `docs/technical/Domain_Model.md`: entidades, regras, status e invariantes.
15
+ - `docs/technical/Architecture.md`: módulos, camadas e decisões técnicas macro.
16
+ - `docs/technical/API_Contracts.md`: contratos conceituais por caso de uso.
17
+ - `docs/technical/Test_Strategy.md`: estratégia de testes e cenários prioritários.
18
+ - `docs/decisions/`: ADRs.
19
+ - `.specs/project/`: contexto persistente do projeto.
20
+ - `.specs/features/`: specs executáveis por fatia vertical.
21
+
22
+ ## Regras de entrevista
23
+
24
+ - Brief inicial: até 3 perguntas, uma por vez, com resposta recomendada.
25
+ - PRD Principal: até 30 blocos, com 3 a 5 perguntas por bloco.
26
+ - Compressão do PRD: até 5 perguntas.
27
+ - PreSpec Técnica: até 10 perguntas.
28
+ - Derivação dos docs técnicos: 0 perguntas por padrão.
29
+ - Specs TLC por fatia: até 5 perguntas, se necessário.
30
+
31
+ ## Comandos do workflow
32
+
33
+ - `/iniciar-projeto-sdd`: criar estrutura e, se houver nome/ideia, gerar rascunho do Brief Inicial.
34
+ - `/continuar-sdd`: continuar a partir do estado registrado em `.specs/project/STATE.md`.
35
+ - Quando houver mais de um próximo caminho, mostrar opções numeradas e aguardar escolha do usuário.
36
+
37
+ Antes de continuar, ler `.specs/project/STATE.md` e `docs/product/Brief_Inicial.md` quando existir.
38
+
39
+ Se houver uma próxima etapa inequívoca no `STATE.md`, continuar automaticamente. Se houver mais de um caminho válido, mostrar opções numeradas e aguardar escolha.
40
+
41
+ Após concluir o Grill-me de produto ou atingir o limite de blocos, gerar automaticamente `docs/product/PRD_Principal.md`.
42
+
43
+ Após gerar o PRD, parar e mostrar opções numeradas antes de iniciar a compressão/revisão.
44
+
45
+ Após concluir a compressão/revisão do PRD, parar e mostrar opções numeradas antes de iniciar a PreSpec Técnica.
46
+
47
+ ## Regras do Brief Inicial
48
+
49
+ O Brief Inicial deve seguir exatamente o template de `workflow/01-brief-template.md`.
50
+
51
+ - Não adicionar seções.
52
+ - Não criar `docs/product/Brief_Inicial.md` vazio durante o setup.
53
+ - O usuário não deve preencher o template manualmente; o Brief Inicial nasce de um Grill-me curto.
54
+ - Se o comando inicial trouxer nome e ideia, usar esses dados como contexto inicial da entrevista do brief.
55
+ - Se faltar nome ou ideia, criar a estrutura e iniciar o Grill-me do Brief Inicial.
56
+ - Criar `.specs/project/STATE.md` desde o setup e atualizar a etapa atual, próxima decisão e log curto após gerar o brief.
57
+ - Não criar `.specs/project/PROJECT.md` nem `.specs/project/ROADMAP.md` no setup; criar apenas na derivação técnica, depois da PreSpec.
58
+ - Não perguntar sobre stack, banco, framework, arquitetura, implementação, deploy ou código.
59
+ - Não fazer perguntas fora do escopo das 8 seções do template.
60
+ - Gerar o Brief Inicial com base nas respostas do Grill-me do brief, usando premissas e dúvidas.
61
+ - Manter o Brief Inicial conservador, sem preencher lacunas relevantes por inferência forte.
62
+ - Fazer no máximo 3 perguntas de brief.
63
+ - Apresentar opções numeradas após criar ou atualizar o Brief Inicial.
64
+ - Se algo puder ser assumido sem grande risco, registrar como premissa na seção mais adequada.
65
+ - Se algo não for essencial agora, registrar em `8. Dúvidas iniciais`.
66
+ - Após criar ou atualizar o Brief Inicial, parar e mostrar opções numeradas antes de iniciar o Grill-me de produto.
67
+
68
+ ## Regras do PRD Principal
69
+
70
+ O PRD Principal deve ser enxuto, autoexplicativo e orientado a produto.
71
+
72
+ Não deve conter:
73
+
74
+ - código;
75
+ - schema de banco;
76
+ - endpoints detalhados;
77
+ - escolha de framework;
78
+ - detalhes de deploy;
79
+ - implementação prematura.
80
+
81
+ ## Regras da PreSpec Técnica
82
+
83
+ A PreSpec Técnica deve traduzir produto em direção técnica conceitual.
84
+
85
+ Ela pode conter entidades conceituais, permissões, regras de domínio, validações, contratos conceituais, riscos técnicos, estratégia inicial de testes e backlog por fatias verticais.
86
+
87
+ Ela não deve escolher stack específica sem decisão explícita.
88
+
89
+ ## Regras de derivação técnica
90
+
91
+ Ao derivar docs técnicos, o agente deve gerar os documentos sem nova entrevista, salvo inconsistência crítica.
92
+
93
+ ## Regras de implementação
94
+
95
+ - Implementar uma fatia vertical por vez.
96
+ - Não alterar escopo sem atualizar documentação.
97
+ - Não criar dependências novas sem justificativa.
98
+ - Criar ou atualizar testes relevantes.
99
+ - Atualizar `.specs/project/STATE.md` ao final de cada etapa.
100
+ - Registrar decisões importantes como ADR.
101
+
102
+ ## Definition of Done
103
+
104
+ Uma etapa só está concluída quando:
105
+
106
+ - o artefato esperado foi criado ou atualizado;
107
+ - o documento segue o template correspondente;
108
+ - decisões em aberto foram registradas;
109
+ - inconsistências foram apontadas;
110
+ - o próximo passo está claro.
package/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # create-sdd-workflow
2
+
3
+ Scaffold an SDD documentation workflow with Brief Inicial, PRD, PreSpec, technical docs, and vertical-slice specs.
4
+
5
+ ## Usage
6
+
7
+ ```sh
8
+ npx create-sdd-workflow
9
+ ```
10
+
11
+ ```sh
12
+ npx create-sdd-workflow ./my-project
13
+ ```
14
+
15
+ ```sh
16
+ npx create-sdd-workflow ./my-project --name "StudyFlow" --idea "An app for study reviews"
17
+ ```
18
+
19
+ The command creates the workflow structure and prepares `.specs/project/STATE.md`.
20
+
21
+ It does not create an empty `docs/product/Brief_Inicial.md`. The Brief Inicial is generated by a short Grill-me interview with up to 3 questions.
22
+
23
+ ## What It Creates
24
+
25
+ ```txt
26
+ workflow/
27
+ docs/
28
+ product/
29
+ technical/
30
+ decisions/
31
+ .specs/
32
+ project/STATE.md
33
+ features/
34
+ AGENTS.md
35
+ ```
36
+
37
+ ## Flow
38
+
39
+ 1. Run `npx create-sdd-workflow`.
40
+ 2. Use the generated `STATE.md` to start the Brief Inicial Grill-me.
41
+ 3. Generate `docs/product/Brief_Inicial.md`.
42
+ 4. Choose from numbered options to enrich the brief, continue to product discovery, or pause.
43
+ 5. Generate the PRD, review it, approve it, then generate PreSpec and technical docs.
44
+
45
+ See `manual_workflow_sdd_grillme_tlc.md` for the full tutorial.
@@ -0,0 +1,249 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+
7
+ const rootDir = path.resolve(__dirname, "..");
8
+ const defaultWorkflowDir = path.join(rootDir, "workflow");
9
+
10
+ function printHelp() {
11
+ console.log(`Usage:
12
+ create-sdd-workflow [directory] [--force] [--name "Name"] [--idea "Initial idea"]
13
+
14
+ Examples:
15
+ npx create-sdd-workflow
16
+ npx create-sdd-workflow ./my-project
17
+ npx create-sdd-workflow ./my-project --name "StudyFlow" --idea "An app for study reviews"
18
+
19
+ Options:
20
+ --force Overwrite existing generated files
21
+ --name Register the project name in STATE.md
22
+ --idea Register the initial idea in STATE.md
23
+ --help, -h Show this help
24
+
25
+ The command creates the workflow structure and prepares the project for the
26
+ Brief Inicial Grill-me. It never creates an empty Brief_Inicial.md.`);
27
+ }
28
+
29
+ function parseArgs(argv) {
30
+ const result = {
31
+ targetDir: ".",
32
+ force: false,
33
+ name: "",
34
+ idea: ""
35
+ };
36
+
37
+ for (let index = 0; index < argv.length; index += 1) {
38
+ const arg = argv[index];
39
+
40
+ if (arg === "--help" || arg === "-h") {
41
+ result.help = true;
42
+ continue;
43
+ }
44
+
45
+ if (arg === "--force") {
46
+ result.force = true;
47
+ continue;
48
+ }
49
+
50
+ if (arg === "--name") {
51
+ result.name = readValue(argv, index, "--name");
52
+ index += 1;
53
+ continue;
54
+ }
55
+
56
+ if (arg === "--idea") {
57
+ result.idea = readValue(argv, index, "--idea");
58
+ index += 1;
59
+ continue;
60
+ }
61
+
62
+ if (arg.startsWith("--")) {
63
+ throw new Error(`Unknown option: ${arg}`);
64
+ }
65
+
66
+ if (result.targetDir === ".") {
67
+ result.targetDir = arg;
68
+ continue;
69
+ }
70
+
71
+ throw new Error(`Unexpected argument: ${arg}`);
72
+ }
73
+
74
+ return result;
75
+ }
76
+
77
+ function readValue(argv, index, optionName) {
78
+ const value = argv[index + 1];
79
+ if (!value || value.startsWith("--")) {
80
+ throw new Error(`Missing value for ${optionName}`);
81
+ }
82
+ return value;
83
+ }
84
+
85
+ function ensureDir(dir) {
86
+ fs.mkdirSync(dir, { recursive: true });
87
+ }
88
+
89
+ function writeFile(filePath, content, force) {
90
+ if (fs.existsSync(filePath) && !force) {
91
+ console.log(`preserved: ${filePath}`);
92
+ return;
93
+ }
94
+
95
+ ensureDir(path.dirname(filePath));
96
+ fs.writeFileSync(filePath, content);
97
+ console.log(`created: ${filePath}`);
98
+ }
99
+
100
+ function copyFile(source, destination, force) {
101
+ if (fs.existsSync(destination) && !force) {
102
+ console.log(`preserved: ${destination}`);
103
+ return;
104
+ }
105
+
106
+ ensureDir(path.dirname(destination));
107
+ fs.copyFileSync(source, destination);
108
+ console.log(`created: ${destination}`);
109
+ }
110
+
111
+ function copyWorkflow(workflowSource, targetDir, force) {
112
+ if (!fs.existsSync(path.join(workflowSource, "00-AGENTS-template.md"))) {
113
+ throw new Error(`Missing workflow templates at: ${workflowSource}`);
114
+ }
115
+
116
+ for (const entry of fs.readdirSync(workflowSource)) {
117
+ if (entry.endsWith(".md")) {
118
+ copyFile(
119
+ path.join(workflowSource, entry),
120
+ path.join(targetDir, "workflow", entry),
121
+ force
122
+ );
123
+ }
124
+ }
125
+
126
+ copyFile(
127
+ path.join(workflowSource, "00-AGENTS-template.md"),
128
+ path.join(targetDir, "AGENTS.md"),
129
+ force
130
+ );
131
+ }
132
+
133
+ function touch(filePath) {
134
+ ensureDir(path.dirname(filePath));
135
+ fs.closeSync(fs.openSync(filePath, "a"));
136
+ }
137
+
138
+ function todayIso() {
139
+ return new Date().toISOString().slice(0, 10);
140
+ }
141
+
142
+ function buildState({ name, idea }) {
143
+ const today = todayIso();
144
+
145
+ if (name && idea) {
146
+ return `# Estado do Projeto
147
+
148
+ ## Etapa atual
149
+
150
+ Setup do workflow criado. Dados iniciais recebidos para o Grill-me do Brief.
151
+
152
+ ## Último artefato
153
+
154
+ Nenhum artefato de produto criado ainda.
155
+
156
+ ## Próxima decisão
157
+
158
+ Continuar o Grill-me do Brief Inicial para gerar \`docs/product/Brief_Inicial.md\`.
159
+
160
+ ## Dados iniciais
161
+
162
+ - Nome: ${name}
163
+ - Ideia: ${idea}
164
+
165
+ ## Log curto
166
+
167
+ - ${today} — Setup do workflow criado.
168
+ - ${today} — Dados iniciais registrados para o Grill-me do Brief.
169
+
170
+ ## Observações
171
+
172
+ - O Brief Inicial não deve ser criado vazio.
173
+ - O usuário não deve preencher o template manualmente.
174
+ - O Brief Inicial deve ser gerado por um Grill-me curto, com até 3 perguntas.
175
+ - Após gerar o Brief Inicial, o fluxo deve mostrar opções numeradas.
176
+ `;
177
+ }
178
+
179
+ return `# Estado do Projeto
180
+
181
+ ## Etapa atual
182
+
183
+ Setup do workflow criado.
184
+
185
+ ## Último artefato
186
+
187
+ Nenhum artefato de produto criado ainda.
188
+
189
+ ## Próxima decisão
190
+
191
+ Continuar o Grill-me do Brief Inicial para coletar nome, ideia e lacunas essenciais antes de gerar \`docs/product/Brief_Inicial.md\`.
192
+
193
+ ## Log curto
194
+
195
+ - ${today} — Setup do workflow criado.
196
+
197
+ ## Observações
198
+
199
+ - O Brief Inicial não deve ser criado vazio.
200
+ - O usuário não deve preencher o template manualmente.
201
+ - O Brief Inicial deve ser gerado por um Grill-me curto, com até 3 perguntas.
202
+ - Após gerar o Brief Inicial, o fluxo deve mostrar opções numeradas.
203
+ `;
204
+ }
205
+
206
+ function main() {
207
+ const options = parseArgs(process.argv.slice(2));
208
+
209
+ if (options.help) {
210
+ printHelp();
211
+ return;
212
+ }
213
+
214
+ const targetDir = path.resolve(process.cwd(), options.targetDir);
215
+ const workflowSource = process.env.SDD_WORKFLOW_TEMPLATE_DIR
216
+ ? path.resolve(process.env.SDD_WORKFLOW_TEMPLATE_DIR)
217
+ : defaultWorkflowDir;
218
+
219
+ ensureDir(path.join(targetDir, "workflow"));
220
+ ensureDir(path.join(targetDir, "docs", "product"));
221
+ ensureDir(path.join(targetDir, "docs", "technical"));
222
+ ensureDir(path.join(targetDir, "docs", "decisions"));
223
+ ensureDir(path.join(targetDir, ".specs", "project"));
224
+ ensureDir(path.join(targetDir, ".specs", "features"));
225
+
226
+ copyWorkflow(workflowSource, targetDir, options.force);
227
+
228
+ touch(path.join(targetDir, "docs", "product", ".gitkeep"));
229
+ touch(path.join(targetDir, "docs", "technical", ".gitkeep"));
230
+ touch(path.join(targetDir, "docs", "decisions", ".gitkeep"));
231
+ touch(path.join(targetDir, ".specs", "features", ".gitkeep"));
232
+
233
+ writeFile(
234
+ path.join(targetDir, ".specs", "project", "STATE.md"),
235
+ buildState(options),
236
+ options.force
237
+ );
238
+
239
+ console.log("observação: docs/product/Brief_Inicial.md será gerado pelo Grill-me do Brief");
240
+ console.log("próximo passo: conduza até 3 perguntas para gerar o Brief Inicial");
241
+ console.log(`setup SDD concluído em: ${targetDir}`);
242
+ }
243
+
244
+ try {
245
+ main();
246
+ } catch (error) {
247
+ console.error(`error: ${error.message}`);
248
+ process.exit(1);
249
+ }