sedd 0.1.8 → 0.1.9
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/commands/sedd.clarify.md +63 -21
- package/commands/sedd.specify.md +5 -1
- package/dist/cli/specify.d.ts.map +1 -1
- package/dist/cli/specify.js +15 -0
- package/dist/cli/specify.js.map +1 -1
- package/package.json +1 -1
package/commands/sedd.clarify.md
CHANGED
|
@@ -51,26 +51,67 @@ User runs `/sedd.clarify`
|
|
|
51
51
|
- Every migration has tasks.md (generated at the end)
|
|
52
52
|
- Tasks reference this migration ID
|
|
53
53
|
|
|
54
|
+
⚠️ **ANNOTATE EVERYTHING - TUDO VIRA TASK**
|
|
55
|
+
- Cada ponto do usuario → anotar como fonte de task
|
|
56
|
+
- Cada sugestao da AI aceita → anotar como fonte de task
|
|
57
|
+
- Cada decisao tomada → anotar implicacoes como fontes de task
|
|
58
|
+
- Cada edge case levantado → anotar como fonte de task
|
|
59
|
+
- Formato: **[TASK_SOURCE:{tipo}]** antes de cada ponto anotado
|
|
60
|
+
- Tipos: user-req, ai-suggestion, decision, edge-case, constraint
|
|
61
|
+
|
|
54
62
|
## Workflow
|
|
55
63
|
|
|
56
|
-
### Step 1:
|
|
64
|
+
### Step 1: Load Context PRIMEIRO
|
|
57
65
|
|
|
58
|
-
|
|
66
|
+
Read from feature root:
|
|
67
|
+
- spec.md (especialmente `## Expectation` e user stories)
|
|
68
|
+
- interfaces.ts (entidades)
|
|
69
|
+
- _meta.json (expectation do specify)
|
|
70
|
+
- Previous migrations (if any)
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
🎯 Qual é sua EXPECTATIVA para esta clarificação?
|
|
72
|
+
### Step 1.5: Suggest Expectations (PROACTIVE)
|
|
62
73
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
74
|
+
Com base no contexto carregado, AI DEVE:
|
|
75
|
+
|
|
76
|
+
1. Apresentar a expectativa original da spec:
|
|
77
|
+
> "Expectativa original (da spec): {quote}"
|
|
78
|
+
|
|
79
|
+
2. SUGERIR expectativas adicionais para esta migration baseado em:
|
|
80
|
+
- User stories nao cobertas por migrations anteriores
|
|
81
|
+
- Edge cases identificados nas interfaces
|
|
82
|
+
- Dependencias entre entidades
|
|
83
|
+
- Potenciais problemas de performance/seguranca
|
|
84
|
+
- Gaps entre a expectativa original e o que ja foi implementado
|
|
85
|
+
|
|
86
|
+
3. Apresentar assim:
|
|
87
|
+
```
|
|
88
|
+
Com base na spec e no que ja temos, sugiro para esta migration:
|
|
89
|
+
|
|
90
|
+
DEVE:
|
|
91
|
+
- [sugestao 1 baseada na spec]
|
|
92
|
+
- [sugestao 2 baseada em edge case]
|
|
93
|
+
- [sugestao 3 baseada em dependencia]
|
|
94
|
+
|
|
95
|
+
NAO DEVE:
|
|
96
|
+
- [restricao identificada]
|
|
97
|
+
|
|
98
|
+
Potenciais que identifiquei:
|
|
99
|
+
- [concern 1]
|
|
100
|
+
- [concern 2]
|
|
101
|
+
|
|
102
|
+
Quer acrescentar algo? Quer que eu veja outro potencial?
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
4. Aguardar usuario confirmar, ajustar, ou adicionar
|
|
106
|
+
5. SO ENTAO consolidar expectativa final (summary + must + mustNot)
|
|
66
107
|
|
|
67
108
|
Save in `clarify.md` under `## Expected Outcome` section (NO TOPO).
|
|
68
109
|
|
|
69
|
-
**NÃO PROSSIGA** sem a expectativa do usuário.
|
|
110
|
+
**NÃO PROSSIGA** sem a expectativa do usuário confirmada.
|
|
70
111
|
|
|
71
|
-
### Step
|
|
112
|
+
### Step 2: Detail MUST and MUST NOT (STRUCTURED EXPECTATION)
|
|
72
113
|
|
|
73
|
-
Após
|
|
114
|
+
Após consolidar as expectativas (originais + sugeridas + usuario), detalhar com regras claras:
|
|
74
115
|
|
|
75
116
|
```
|
|
76
117
|
Agora vamos detalhar sua expectativa:
|
|
@@ -111,13 +152,6 @@ Save in `clarify.md` under `## Expectation Details`:
|
|
|
111
152
|
}
|
|
112
153
|
```
|
|
113
154
|
|
|
114
|
-
### Step 2: Load Context
|
|
115
|
-
|
|
116
|
-
Read from feature root:
|
|
117
|
-
- spec.md (especialmente a seção Expectation original)
|
|
118
|
-
- interfaces.ts
|
|
119
|
-
- Previous migrations (if any)
|
|
120
|
-
|
|
121
155
|
### Step 3: Create New Migration Folder
|
|
122
156
|
|
|
123
157
|
Generate new migration folder:
|
|
@@ -199,9 +233,10 @@ When user provides information (not a command):
|
|
|
199
233
|
"O sistema precisa suportar múltiplos tenants, cada um com suas próprias configurações..."
|
|
200
234
|
|
|
201
235
|
**Key Points Extracted:**
|
|
202
|
-
- Multi-tenant architecture required
|
|
203
|
-
- Per-tenant configuration
|
|
204
|
-
- Isolation
|
|
236
|
+
- **[TASK_SOURCE:user-req]** Multi-tenant architecture required
|
|
237
|
+
- **[TASK_SOURCE:user-req]** Per-tenant configuration
|
|
238
|
+
- **[TASK_SOURCE:ai-suggestion]** Isolation strategy needs definition
|
|
239
|
+
- **[TASK_SOURCE:edge-case]** Cross-tenant data leaks prevention
|
|
205
240
|
|
|
206
241
|
---
|
|
207
242
|
```
|
|
@@ -274,7 +309,14 @@ Proceed to Step 6 (Generate Tasks).
|
|
|
274
309
|
|
|
275
310
|
### Step 6: Generate tasks.md (After All Q&A Complete)
|
|
276
311
|
|
|
277
|
-
|
|
312
|
+
Ao gerar tasks, VARRER clarify.md por TODOS os `[TASK_SOURCE:*]` tags:
|
|
313
|
+
- Cada tag com tipo `user-req` → task obrigatoria
|
|
314
|
+
- Cada tag com tipo `ai-suggestion` (aceita) → task obrigatoria
|
|
315
|
+
- Cada tag com tipo `decision` → task para implementar decisao
|
|
316
|
+
- Cada tag com tipo `edge-case` → task de validacao/protecao
|
|
317
|
+
- Cada tag com tipo `constraint` → task de teste negativo
|
|
318
|
+
|
|
319
|
+
Based on all decisions and TASK_SOURCE tags, create tasks:
|
|
278
320
|
|
|
279
321
|
```markdown
|
|
280
322
|
# Tasks - Migration 001
|
package/commands/sedd.specify.md
CHANGED
|
@@ -20,7 +20,11 @@ User runs `/sedd.specify "feature description"` or `/sedd.specify` (interactive)
|
|
|
20
20
|
|
|
21
21
|
3. **Check for existing feature branch**
|
|
22
22
|
- If on feature branch (###-name): use existing feature
|
|
23
|
-
- If
|
|
23
|
+
- If on master/main or outra branch nao-feature:
|
|
24
|
+
1. Determinar proximo feature ID (buscar maior ###- nas branches + 1)
|
|
25
|
+
2. Criar branch `{id}-{nome}` com `git checkout -b {id}-{nome}`
|
|
26
|
+
3. Confirmar: "Criei a branch {id}-{nome} e ja estou nela"
|
|
27
|
+
4. SO ENTAO prosseguir com criacao da estrutura
|
|
24
28
|
|
|
25
29
|
## Configuration
|
|
26
30
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specify.d.ts","sourceRoot":"","sources":["../../src/cli/specify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"specify.d.ts","sourceRoot":"","sources":["../../src/cli/specify.ts"],"names":[],"mappings":"AAMA,UAAU,cAAc;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyJf"}
|
package/dist/cli/specify.js
CHANGED
|
@@ -2,10 +2,25 @@ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import { loadConfig } from '../types/index.js';
|
|
5
|
+
import { GitOperations } from '../utils/git.js';
|
|
5
6
|
export async function specify(featureId, featureName, options = {}) {
|
|
6
7
|
const cwd = process.cwd();
|
|
7
8
|
const config = loadConfig(cwd);
|
|
8
9
|
const branchName = `${featureId}-${featureName}`;
|
|
10
|
+
const git = new GitOperations(cwd);
|
|
11
|
+
const currentBranch = git.getCurrentBranch();
|
|
12
|
+
if (!git.isFeatureBranch(currentBranch)) {
|
|
13
|
+
console.log(chalk.blue('i'), `On ${currentBranch}, creating feature branch...`);
|
|
14
|
+
const success = git.createBranch(branchName);
|
|
15
|
+
if (!success) {
|
|
16
|
+
console.log(chalk.red('Error: Could not create branch'), branchName);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
console.log(chalk.green('✓'), `Created and switched to branch: ${branchName}`);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(chalk.blue('i'), `Already on feature branch: ${currentBranch}`);
|
|
23
|
+
}
|
|
9
24
|
const featureDir = join(cwd, config.specsDir, branchName);
|
|
10
25
|
if (existsSync(featureDir)) {
|
|
11
26
|
console.log(chalk.yellow(`Feature already exists: ${featureDir}`));
|
package/dist/cli/specify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specify.js","sourceRoot":"","sources":["../../src/cli/specify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"specify.js","sourceRoot":"","sources":["../../src/cli/specify.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED