sedd 0.1.7 → 0.1.8
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 +130 -0
- package/commands/sedd.estimate.md +231 -0
- package/commands/sedd.validate.md +373 -0
- package/dist/cli/estimate.d.ts +8 -0
- package/dist/cli/estimate.d.ts.map +1 -0
- package/dist/cli/estimate.js +217 -0
- package/dist/cli/estimate.js.map +1 -0
- package/dist/cli/index.js +17 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +7 -4
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/validate.d.ts +9 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +242 -0
- package/dist/cli/validate.js.map +1 -0
- package/package.json +1 -1
- package/templates/estimate-template.md +118 -0
- package/templates/validation-template.md +174 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
# /sedd.validate - Validate Implementation Against Expectation
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Validate that the implementation covers the original expectation, show git diff of changes, and create follow-up tasks if gaps are found.
|
|
6
|
+
|
|
7
|
+
## Trigger
|
|
8
|
+
|
|
9
|
+
- `/sedd.validate` - Validate current migration
|
|
10
|
+
- `/sedd.validate 001` - Validate specific migration
|
|
11
|
+
- `/sedd.validate --auto` - Auto-create tasks for gaps
|
|
12
|
+
|
|
13
|
+
## Pre-flight Checks
|
|
14
|
+
|
|
15
|
+
1. **Load Configuration**
|
|
16
|
+
```
|
|
17
|
+
Read sedd.config.json (or use defaults)
|
|
18
|
+
Default specsDir: .sedd
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
2. **Verify Feature Exists**
|
|
22
|
+
- Must have spec.md with expectation
|
|
23
|
+
- Must have at least one migration
|
|
24
|
+
- Must have tasks.md in migration
|
|
25
|
+
|
|
26
|
+
3. **Check Git Status**
|
|
27
|
+
- Ensure git is available
|
|
28
|
+
- Get list of changed files since migration start
|
|
29
|
+
|
|
30
|
+
## Workflow
|
|
31
|
+
|
|
32
|
+
### Step 1: Load Expectation
|
|
33
|
+
|
|
34
|
+
Read from `_meta.json`:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"expectation": {
|
|
39
|
+
"summary": "User can toggle dark mode and persist across sessions",
|
|
40
|
+
"must": [
|
|
41
|
+
"Criar toggle de dark mode em settings",
|
|
42
|
+
"Persistir preferência no banco"
|
|
43
|
+
],
|
|
44
|
+
"mustNot": [
|
|
45
|
+
"Usar localStorage",
|
|
46
|
+
"Criar endpoint em serviço X"
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Step 2: Load Tasks Status
|
|
53
|
+
|
|
54
|
+
Read `tasks.md` and parse:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Completed: [x] T001-001, [x] T001-002
|
|
58
|
+
Pending: [ ] T001-003, [ ] T001-004
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Step 3: Get Git Diff
|
|
62
|
+
|
|
63
|
+
Execute git commands:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Get files changed in this migration
|
|
67
|
+
git diff --stat {{BASE_COMMIT}}..HEAD
|
|
68
|
+
|
|
69
|
+
# Get detailed diff
|
|
70
|
+
git diff {{BASE_COMMIT}}..HEAD
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Step 4: Analyze Coverage
|
|
74
|
+
|
|
75
|
+
For each expectation item in `must[]`:
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
{
|
|
79
|
+
expectationItem: "Criar toggle de dark mode",
|
|
80
|
+
status: "covered", // covered | partial | gap
|
|
81
|
+
coveredByTasks: ["T001-002", "T001-003"],
|
|
82
|
+
confidence: 90,
|
|
83
|
+
notes: "Implemented in ToggleSwitch.tsx"
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Step 5: Check Violations
|
|
88
|
+
|
|
89
|
+
For each item in `mustNot[]`:
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
// Scan changed files for violations
|
|
93
|
+
const violations = [];
|
|
94
|
+
|
|
95
|
+
for (const file of changedFiles) {
|
|
96
|
+
if (file.includes('services/x/')) {
|
|
97
|
+
violations.push({
|
|
98
|
+
rule: "Não criar endpoint em serviço X",
|
|
99
|
+
violatedBy: file,
|
|
100
|
+
severity: "critical"
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Step 6: Identify Gaps
|
|
107
|
+
|
|
108
|
+
Compare expectation tokens with task descriptions:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
Expectation: "User can toggle dark mode and persist across sessions"
|
|
112
|
+
|
|
113
|
+
Tokens: [toggle, dark, mode, persist, sessions]
|
|
114
|
+
|
|
115
|
+
Tasks coverage:
|
|
116
|
+
✅ toggle → T001-002
|
|
117
|
+
✅ dark → T001-002, T001-003
|
|
118
|
+
✅ mode → T001-002, T001-003
|
|
119
|
+
✅ persist → T001-003
|
|
120
|
+
❌ sessions → NOT FOUND
|
|
121
|
+
|
|
122
|
+
Gap identified: "sessions" not covered
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Step 7: Generate validation.md
|
|
126
|
+
|
|
127
|
+
Create `.sedd/{FEATURE}/{MIGRATION}/validation.md`:
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
# Validação: Migration {{MIGRATION_ID}}
|
|
131
|
+
|
|
132
|
+
> Feature: {{FEATURE_NAME}}
|
|
133
|
+
> Validado em: {{TIMESTAMP}}
|
|
134
|
+
> Status: {{STATUS}}
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Expectativa Original
|
|
139
|
+
|
|
140
|
+
> {{EXPECTATION_SUMMARY}}
|
|
141
|
+
|
|
142
|
+
### DEVE (Must)
|
|
143
|
+
{{#each must}}
|
|
144
|
+
- {{this}}
|
|
145
|
+
{{/each}}
|
|
146
|
+
|
|
147
|
+
### NÃO DEVE (Must Not)
|
|
148
|
+
{{#each mustNot}}
|
|
149
|
+
- {{this}}
|
|
150
|
+
{{/each}}
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Cobertura de Expectativa
|
|
155
|
+
|
|
156
|
+
| Critério | Status | Coberto por | Confiança |
|
|
157
|
+
|----------|--------|-------------|-----------|
|
|
158
|
+
| Toggle dark mode | ✅ Coberto | T001-002 | 95% |
|
|
159
|
+
| Persist preference | ✅ Coberto | T001-003 | 90% |
|
|
160
|
+
| Across sessions | ❌ Gap | - | - |
|
|
161
|
+
|
|
162
|
+
**Cobertura Total: {{COVERAGE}}%**
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
████████████░░░░ 75%
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Violações de Restrições
|
|
171
|
+
|
|
172
|
+
{{#if violations}}
|
|
173
|
+
⚠️ **VIOLAÇÕES ENCONTRADAS:**
|
|
174
|
+
|
|
175
|
+
| Regra | Arquivo | Severidade |
|
|
176
|
+
|-------|---------|------------|
|
|
177
|
+
{{#each violations}}
|
|
178
|
+
| {{rule}} | {{violatedBy}} | {{severity}} |
|
|
179
|
+
{{/each}}
|
|
180
|
+
{{else}}
|
|
181
|
+
✅ Nenhuma violação de restrições encontrada.
|
|
182
|
+
{{/if}}
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Arquivos Alterados
|
|
187
|
+
|
|
188
|
+
| Arquivo | Adições | Remoções | Tipo |
|
|
189
|
+
|---------|---------|----------|------|
|
|
190
|
+
{{#each filesChanged}}
|
|
191
|
+
| {{filePath}} | +{{linesAdded}} | -{{linesRemoved}} | {{type}} |
|
|
192
|
+
{{/each}}
|
|
193
|
+
|
|
194
|
+
**Total:** {{totalFiles}} arquivos, +{{totalAdded}} -{{totalRemoved}} linhas
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Git Diff Summary
|
|
199
|
+
|
|
200
|
+
```diff
|
|
201
|
+
{{GIT_DIFF_SUMMARY}}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
<details>
|
|
205
|
+
<summary>Ver diff completo</summary>
|
|
206
|
+
|
|
207
|
+
```diff
|
|
208
|
+
{{FULL_DIFF}}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
</details>
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Gaps Identificados
|
|
216
|
+
|
|
217
|
+
{{#if gaps}}
|
|
218
|
+
Os seguintes gaps foram identificados entre expectativa e implementação:
|
|
219
|
+
|
|
220
|
+
{{#each gaps}}
|
|
221
|
+
### Gap {{@index}}: {{description}}
|
|
222
|
+
|
|
223
|
+
- **Expectativa:** {{expectationItem}}
|
|
224
|
+
- **Severidade:** {{severity}}
|
|
225
|
+
- **Task Sugerida:** {{suggestedTask.id}} - {{suggestedTask.description}}
|
|
226
|
+
|
|
227
|
+
{{/each}}
|
|
228
|
+
|
|
229
|
+
### Tasks Sugeridas para Gaps
|
|
230
|
+
|
|
231
|
+
{{#each gaps}}
|
|
232
|
+
- [ ] {{suggestedTask.id}} [Follow-up] {{suggestedTask.description}}
|
|
233
|
+
{{/each}}
|
|
234
|
+
{{else}}
|
|
235
|
+
✅ Nenhum gap identificado. Implementação cobre a expectativa.
|
|
236
|
+
{{/if}}
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Tasks Completadas
|
|
241
|
+
|
|
242
|
+
{{#each tasksCompleted}}
|
|
243
|
+
- [x] {{this}}
|
|
244
|
+
{{/each}}
|
|
245
|
+
|
|
246
|
+
## Tasks Pendentes
|
|
247
|
+
|
|
248
|
+
{{#each tasksPending}}
|
|
249
|
+
- [ ] {{this}}
|
|
250
|
+
{{/each}}
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Recomendação
|
|
255
|
+
|
|
256
|
+
{{#if (eq recommendation "complete")}}
|
|
257
|
+
✅ **FEATURE COMPLETA**
|
|
258
|
+
|
|
259
|
+
A implementação cobre todos os critérios da expectativa.
|
|
260
|
+
Próximo passo: Merge para branch principal.
|
|
261
|
+
{{/if}}
|
|
262
|
+
|
|
263
|
+
{{#if (eq recommendation "needs-followup")}}
|
|
264
|
+
⚠️ **REQUER FOLLOW-UP**
|
|
265
|
+
|
|
266
|
+
Gaps identificados requerem tasks adicionais.
|
|
267
|
+
Próximo passo: `/sedd.clarify` para criar nova migration com gaps.
|
|
268
|
+
{{/if}}
|
|
269
|
+
|
|
270
|
+
{{#if (eq recommendation "needs-revision")}}
|
|
271
|
+
❌ **REQUER REVISÃO**
|
|
272
|
+
|
|
273
|
+
Violações de restrições encontradas.
|
|
274
|
+
Próximo passo: Reverter alterações que violam restrições.
|
|
275
|
+
{{/if}}
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Próximos Passos
|
|
280
|
+
|
|
281
|
+
{{#each nextSteps}}
|
|
282
|
+
{{@index}}. {{this}}
|
|
283
|
+
{{/each}}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Step 8: Create Follow-up Tasks (if gaps)
|
|
287
|
+
|
|
288
|
+
If gaps found and `--auto` flag or user confirms:
|
|
289
|
+
|
|
290
|
+
```markdown
|
|
291
|
+
# New tasks added to tasks.md
|
|
292
|
+
|
|
293
|
+
- [ ] T001-NEW-001 [Follow-up] Implement session persistence for theme
|
|
294
|
+
- [ ] T001-NEW-002 [Follow-up] Add session storage fallback
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Step 9: Display Summary
|
|
298
|
+
|
|
299
|
+
```
|
|
300
|
+
🔍 VALIDAÇÃO COMPLETA
|
|
301
|
+
|
|
302
|
+
┌─────────────────────────────────────────────┐
|
|
303
|
+
│ Feature: Dark Mode Toggle │
|
|
304
|
+
│ Migration: 001 │
|
|
305
|
+
├─────────────────────────────────────────────┤
|
|
306
|
+
│ Cobertura: 75% ████████████░░░░ │
|
|
307
|
+
│ Tasks: 3/4 completadas │
|
|
308
|
+
│ Arquivos: 5 alterados (+180, -12) │
|
|
309
|
+
│ Violações: 0 │
|
|
310
|
+
│ Gaps: 1 encontrado │
|
|
311
|
+
└─────────────────────────────────────────────┘
|
|
312
|
+
|
|
313
|
+
📄 Arquivo gerado: .sedd/024-dark-mode/001_.../validation.md
|
|
314
|
+
|
|
315
|
+
⚠️ Gap encontrado: "sessions" não coberto
|
|
316
|
+
|
|
317
|
+
Criar task de follow-up? [Y/n]
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
## Output
|
|
321
|
+
|
|
322
|
+
1. **validation.md** - Relatório completo de validação
|
|
323
|
+
2. **tasks.md** - Atualizado com novas tasks (se gaps)
|
|
324
|
+
3. **_meta.json** - Atualizado com `lastValidation` timestamp
|
|
325
|
+
|
|
326
|
+
## Rules
|
|
327
|
+
|
|
328
|
+
- SEMPRE comparar contra expectativa original
|
|
329
|
+
- SEMPRE mostrar git diff
|
|
330
|
+
- NUNCA marcar como completo se há violações críticas
|
|
331
|
+
- Criar tasks automáticas só com confirmação do usuário
|
|
332
|
+
- Manter histórico de validações
|
|
333
|
+
|
|
334
|
+
## CLI Alternative
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
# Validate current migration
|
|
338
|
+
sedd validate
|
|
339
|
+
|
|
340
|
+
# Validate specific migration
|
|
341
|
+
sedd validate --migration 001
|
|
342
|
+
|
|
343
|
+
# Auto-create tasks for gaps
|
|
344
|
+
sedd validate --auto
|
|
345
|
+
|
|
346
|
+
# Show full diff
|
|
347
|
+
sedd validate --full-diff
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
## Integration with /sedd.clarify
|
|
351
|
+
|
|
352
|
+
After `/sedd.validate` finds gaps:
|
|
353
|
+
|
|
354
|
+
```
|
|
355
|
+
Gaps encontrados. Deseja:
|
|
356
|
+
|
|
357
|
+
1. /sedd.clarify - Criar nova migration para os gaps
|
|
358
|
+
2. Adicionar tasks na migration atual
|
|
359
|
+
3. Ignorar gaps (marcar como known limitations)
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
## Suggested at End of /sedd.implement
|
|
363
|
+
|
|
364
|
+
When `/sedd.implement` completes all tasks:
|
|
365
|
+
|
|
366
|
+
```
|
|
367
|
+
🏁 Todas as tasks concluídas!
|
|
368
|
+
|
|
369
|
+
📍 Próximo passo recomendado:
|
|
370
|
+
/sedd.validate - Validar implementação contra expectativa
|
|
371
|
+
|
|
372
|
+
Executar validação agora? [Y/n]
|
|
373
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimate.d.ts","sourceRoot":"","sources":["../../src/cli/estimate.ts"],"names":[],"mappings":"AAOA,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAyCD,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6N3E"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { GitOperations } from '../utils/git.js';
|
|
5
|
+
import { MigrationManager } from '../core/migration-manager.js';
|
|
6
|
+
import { loadConfig } from '../types/index.js';
|
|
7
|
+
function calculateComplexity(hours) {
|
|
8
|
+
if (hours <= 2)
|
|
9
|
+
return 'XS';
|
|
10
|
+
if (hours <= 4)
|
|
11
|
+
return 'S';
|
|
12
|
+
if (hours <= 8)
|
|
13
|
+
return 'M';
|
|
14
|
+
if (hours <= 16)
|
|
15
|
+
return 'L';
|
|
16
|
+
return 'XL';
|
|
17
|
+
}
|
|
18
|
+
function generateProgressBar(percent, width = 20) {
|
|
19
|
+
const filled = Math.round((percent / 100) * width);
|
|
20
|
+
const empty = width - filled;
|
|
21
|
+
return '█'.repeat(filled) + '░'.repeat(empty);
|
|
22
|
+
}
|
|
23
|
+
export async function estimate(options = {}) {
|
|
24
|
+
const cwd = process.cwd();
|
|
25
|
+
const git = new GitOperations(cwd);
|
|
26
|
+
const config = loadConfig(cwd);
|
|
27
|
+
const specsDir = join(cwd, config.specsDir);
|
|
28
|
+
if (!existsSync(specsDir)) {
|
|
29
|
+
console.log(chalk.yellow(`\n⚠ No ${config.specsDir}/ directory found. Run "sedd init" first.\n`));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Find current feature
|
|
33
|
+
let currentFeature = null;
|
|
34
|
+
if (git.hasGit()) {
|
|
35
|
+
const branch = git.getCurrentBranch();
|
|
36
|
+
if (git.isFeatureBranch(branch)) {
|
|
37
|
+
const featureDir = join(specsDir, branch);
|
|
38
|
+
if (existsSync(featureDir)) {
|
|
39
|
+
currentFeature = branch;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (!currentFeature) {
|
|
44
|
+
const features = readdirSync(specsDir, { withFileTypes: true })
|
|
45
|
+
.filter((d) => d.isDirectory() && /^\d{3}-/.test(d.name))
|
|
46
|
+
.map((d) => d.name)
|
|
47
|
+
.sort()
|
|
48
|
+
.reverse();
|
|
49
|
+
if (features.length > 0) {
|
|
50
|
+
currentFeature = features[0];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!currentFeature) {
|
|
54
|
+
console.log(chalk.yellow('\n⚠ No features found. Use /sedd.specify to create one.\n'));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const featureDir = join(specsDir, currentFeature);
|
|
58
|
+
const mm = new MigrationManager(featureDir);
|
|
59
|
+
const meta = mm.loadMeta();
|
|
60
|
+
if (!meta) {
|
|
61
|
+
console.log(chalk.yellow('⚠ This feature uses the old structure. Run sedd migrate first.'));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Load tasks from current migration
|
|
65
|
+
const breakdown = [];
|
|
66
|
+
let totalHuman = 0;
|
|
67
|
+
let totalAi = 0;
|
|
68
|
+
if (meta.currentMigration) {
|
|
69
|
+
const migration = meta.migrations[meta.currentMigration];
|
|
70
|
+
if (migration) {
|
|
71
|
+
const tasksPath = join(featureDir, migration.folder, 'tasks.md');
|
|
72
|
+
if (existsSync(tasksPath)) {
|
|
73
|
+
const content = readFileSync(tasksPath, 'utf-8');
|
|
74
|
+
const taskLines = content.match(/- \[ \] (T\d{3}-\d{3}) \[([^\]]+)\] (.+)/g) || [];
|
|
75
|
+
for (const line of taskLines) {
|
|
76
|
+
const match = line.match(/- \[ \] (T\d{3}-\d{3}) \[([^\]]+)\] (.+)/);
|
|
77
|
+
if (match) {
|
|
78
|
+
const [, taskId, category, description] = match;
|
|
79
|
+
// Estimate based on category
|
|
80
|
+
let human = 1;
|
|
81
|
+
let ai = 2;
|
|
82
|
+
if (category === 'Foundation') {
|
|
83
|
+
human = 0.5;
|
|
84
|
+
ai = 1.5;
|
|
85
|
+
}
|
|
86
|
+
else if (category.startsWith('US')) {
|
|
87
|
+
human = 1;
|
|
88
|
+
ai = 3;
|
|
89
|
+
}
|
|
90
|
+
else if (category === 'Tests') {
|
|
91
|
+
human = 0.5;
|
|
92
|
+
ai = 2;
|
|
93
|
+
}
|
|
94
|
+
const total = human + ai;
|
|
95
|
+
totalHuman += human;
|
|
96
|
+
totalAi += ai;
|
|
97
|
+
breakdown.push({
|
|
98
|
+
taskId,
|
|
99
|
+
description: description.split('`')[0].trim(),
|
|
100
|
+
humanHours: human,
|
|
101
|
+
aiHours: ai,
|
|
102
|
+
totalHours: total,
|
|
103
|
+
confidence: 75,
|
|
104
|
+
complexity: calculateComplexity(total),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// If no tasks, estimate from spec
|
|
112
|
+
if (breakdown.length === 0) {
|
|
113
|
+
const specPath = join(featureDir, 'spec.md');
|
|
114
|
+
if (existsSync(specPath)) {
|
|
115
|
+
const content = readFileSync(specPath, 'utf-8');
|
|
116
|
+
const userStories = (content.match(/### US\d+:/g) || []).length;
|
|
117
|
+
const requirements = (content.match(/\| FR-\d{3}/g) || []).length;
|
|
118
|
+
// Estimate based on spec content
|
|
119
|
+
const estimatedTasks = Math.max(userStories * 2, requirements);
|
|
120
|
+
totalHuman = estimatedTasks * 1;
|
|
121
|
+
totalAi = estimatedTasks * 2;
|
|
122
|
+
breakdown.push({
|
|
123
|
+
taskId: 'SPEC-EST',
|
|
124
|
+
description: `Estimated from ${userStories} user stories, ${requirements} requirements`,
|
|
125
|
+
humanHours: totalHuman,
|
|
126
|
+
aiHours: totalAi,
|
|
127
|
+
totalHours: totalHuman + totalAi,
|
|
128
|
+
confidence: 60,
|
|
129
|
+
complexity: calculateComplexity(totalHuman + totalAi),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const totalHours = totalHuman + totalAi;
|
|
134
|
+
const avgConfidence = breakdown.length > 0
|
|
135
|
+
? Math.round(breakdown.reduce((sum, b) => sum + b.confidence, 0) / breakdown.length)
|
|
136
|
+
: 0;
|
|
137
|
+
const estimation = {
|
|
138
|
+
featureId: meta.featureId,
|
|
139
|
+
featureName: meta.featureName,
|
|
140
|
+
createdAt: new Date().toISOString(),
|
|
141
|
+
totalHours,
|
|
142
|
+
humanHours: totalHuman,
|
|
143
|
+
aiHours: totalAi,
|
|
144
|
+
complexity: calculateComplexity(totalHours),
|
|
145
|
+
averageConfidence: avgConfidence,
|
|
146
|
+
breakdown,
|
|
147
|
+
contextPath: options.path,
|
|
148
|
+
risks: [],
|
|
149
|
+
assumptions: [
|
|
150
|
+
'AI assistant available for implementation',
|
|
151
|
+
'No major blockers or dependencies',
|
|
152
|
+
'Existing codebase patterns can be followed',
|
|
153
|
+
],
|
|
154
|
+
};
|
|
155
|
+
if (options.json) {
|
|
156
|
+
console.log(JSON.stringify(estimation, null, 2));
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
// Display estimation
|
|
160
|
+
console.log(chalk.blue(`\n📊 Estimativa: ${meta.featureName}\n`));
|
|
161
|
+
const humanPercent = Math.round((totalHuman / totalHours) * 100) || 0;
|
|
162
|
+
const aiPercent = 100 - humanPercent;
|
|
163
|
+
console.log(chalk.bold('Resumo:'));
|
|
164
|
+
console.log(` Total: ${chalk.cyan(totalHours + 'h')}`);
|
|
165
|
+
console.log(` Humano: ${chalk.yellow(totalHuman + 'h')} (${humanPercent}%)`);
|
|
166
|
+
console.log(` AI: ${chalk.green(totalAi + 'h')} (${aiPercent}%)`);
|
|
167
|
+
console.log(` Complexidade: ${chalk.magenta(estimation.complexity)}`);
|
|
168
|
+
console.log(` Confiança: ${chalk.gray(avgConfidence + '%')}`);
|
|
169
|
+
console.log();
|
|
170
|
+
console.log(chalk.bold('Distribuição:'));
|
|
171
|
+
console.log(` Humano: ${generateProgressBar(humanPercent)} ${humanPercent}%`);
|
|
172
|
+
console.log(` AI: ${generateProgressBar(aiPercent)} ${aiPercent}%`);
|
|
173
|
+
console.log();
|
|
174
|
+
if (breakdown.length > 0 && breakdown[0].taskId !== 'SPEC-EST') {
|
|
175
|
+
console.log(chalk.bold('Breakdown por Task:'));
|
|
176
|
+
console.log(chalk.gray(' Task | Humano | AI | Total | Conf'));
|
|
177
|
+
console.log(chalk.gray(' -----------|--------|-------|-------|-----'));
|
|
178
|
+
for (const item of breakdown.slice(0, 10)) {
|
|
179
|
+
console.log(` ${item.taskId} | ${item.humanHours}h | ${item.aiHours}h | ${item.totalHours}h | ${item.confidence}%`);
|
|
180
|
+
}
|
|
181
|
+
if (breakdown.length > 10) {
|
|
182
|
+
console.log(chalk.gray(` ... +${breakdown.length - 10} more`));
|
|
183
|
+
}
|
|
184
|
+
console.log();
|
|
185
|
+
}
|
|
186
|
+
// Save estimate.md
|
|
187
|
+
const estimatePath = join(featureDir, 'estimate.md');
|
|
188
|
+
const estimateMd = `# Estimativa: ${meta.featureName}
|
|
189
|
+
|
|
190
|
+
> Feature ID: ${meta.featureId}
|
|
191
|
+
> Gerado: ${estimation.createdAt}
|
|
192
|
+
> Confiança Média: ${avgConfidence}%
|
|
193
|
+
|
|
194
|
+
## Resumo
|
|
195
|
+
|
|
196
|
+
| Métrica | Valor |
|
|
197
|
+
|---------|-------|
|
|
198
|
+
| **Total** | ${totalHours}h |
|
|
199
|
+
| **Humano** | ${totalHuman}h (${humanPercent}%) |
|
|
200
|
+
| **AI** | ${totalAi}h (${aiPercent}%) |
|
|
201
|
+
| **Complexidade** | ${estimation.complexity} |
|
|
202
|
+
|
|
203
|
+
## Breakdown
|
|
204
|
+
|
|
205
|
+
| Task | Descrição | Humano | AI | Total |
|
|
206
|
+
|------|-----------|--------|-----|-------|
|
|
207
|
+
${breakdown.map((b) => `| ${b.taskId} | ${b.description} | ${b.humanHours}h | ${b.aiHours}h | ${b.totalHours}h |`).join('\n')}
|
|
208
|
+
|
|
209
|
+
## Premissas
|
|
210
|
+
|
|
211
|
+
${estimation.assumptions.map((a) => `- ${a}`).join('\n')}
|
|
212
|
+
`;
|
|
213
|
+
writeFileSync(estimatePath, estimateMd, 'utf-8');
|
|
214
|
+
console.log(chalk.green(`✓ Estimativa salva em: ${estimatePath}`));
|
|
215
|
+
console.log();
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=estimate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../src/cli/estimate.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -17,6 +17,8 @@ import { specify } from './specify.js';
|
|
|
17
17
|
import { clarify } from './clarify.js';
|
|
18
18
|
import { addTasks, completeTask } from './tasks.js';
|
|
19
19
|
import { update } from './update.js';
|
|
20
|
+
import { estimate } from './estimate.js';
|
|
21
|
+
import { validate } from './validate.js';
|
|
20
22
|
import { checkForUpdates, showUpdateNotification, getInstalledVersion } from './version-check.js';
|
|
21
23
|
const SEDD_DIR = '.sedd';
|
|
22
24
|
function getFeatures(seddPath) {
|
|
@@ -177,6 +179,21 @@ async function main() {
|
|
|
177
179
|
.option('-f, --force', 'Skip confirmation prompt')
|
|
178
180
|
.option('-b, --backup', 'Create backup before updating')
|
|
179
181
|
.action(update);
|
|
182
|
+
program
|
|
183
|
+
.command('estimate')
|
|
184
|
+
.description('Generate effort estimation for current feature')
|
|
185
|
+
.option('-p, --path <path>', 'File path to investigate')
|
|
186
|
+
.option('-d, --description <desc>', 'Feature description to estimate')
|
|
187
|
+
.option('-j, --json', 'Output as JSON')
|
|
188
|
+
.action(estimate);
|
|
189
|
+
program
|
|
190
|
+
.command('validate')
|
|
191
|
+
.description('Validate implementation against expectation')
|
|
192
|
+
.option('-m, --migration <id>', 'Specific migration ID to validate')
|
|
193
|
+
.option('-a, --auto', 'Auto-create tasks for gaps')
|
|
194
|
+
.option('--full-diff', 'Show full git diff')
|
|
195
|
+
.option('-j, --json', 'Output as JSON')
|
|
196
|
+
.action(validate);
|
|
180
197
|
// No arguments - show welcome
|
|
181
198
|
if (args.length === 0) {
|
|
182
199
|
showWelcome();
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAaA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAgCD,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAaA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAgCD,wBAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgPzF"}
|