sedd 0.1.4 → 0.1.6
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 +59 -10
- package/commands/sedd.clarify.md +54 -1
- package/commands/sedd.dashboard.md +24 -126
- package/commands/sedd.implement.md +139 -4
- package/dist/cli/index.js +17 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +0 -2
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/update.d.ts +7 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +390 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/version-check.d.ts +9 -0
- package/dist/cli/version-check.d.ts.map +1 -0
- package/dist/cli/version-check.js +48 -0
- package/dist/cli/version-check.js.map +1 -0
- package/hooks/README.md +20 -0
- package/hooks/check-roadmap.js +33 -8
- package/hooks/check-roadmap.ps1 +71 -6
- package/package.json +1 -1
- package/templates/acceptance-template.md +39 -2
package/README.md
CHANGED
|
@@ -60,9 +60,9 @@ Tasks:
|
|
|
60
60
|
|
|
61
61
|
## Expectation-First Workflow
|
|
62
62
|
|
|
63
|
-
### 1. Captura Obrigatória
|
|
63
|
+
### 1. Captura Obrigatória (DEVE / NÃO DEVE)
|
|
64
64
|
|
|
65
|
-
Ao usar `/sedd.specify` ou `/sedd.clarify`, a AI pergunta
|
|
65
|
+
Ao usar `/sedd.specify` ou `/sedd.clarify`, a AI pergunta:
|
|
66
66
|
|
|
67
67
|
```
|
|
68
68
|
🎯 Qual é sua EXPECTATIVA para esta feature?
|
|
@@ -70,6 +70,16 @@ Ao usar `/sedd.specify` ou `/sedd.clarify`, a AI pergunta primeiro:
|
|
|
70
70
|
O que você espera ver funcionando quando estiver pronto?
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
+
E depois detalha com regras claras:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
**O que DEVE acontecer?** (requisitos obrigatórios)
|
|
77
|
+
> Criar domínio no monolito, usar padrão repository
|
|
78
|
+
|
|
79
|
+
**O que NÃO DEVE acontecer?** (restrições/proibições)
|
|
80
|
+
> NÃO criar endpoint em serviço X, NÃO usar API externa
|
|
81
|
+
```
|
|
82
|
+
|
|
73
83
|
### 2. Score de Alinhamento
|
|
74
84
|
|
|
75
85
|
Ao gerar tasks, SEDD calcula cobertura:
|
|
@@ -99,7 +109,24 @@ SEDD gera `acceptance.md` baseado na expectativa:
|
|
|
99
109
|
- [ ] AC-004: Theme persists across sessions
|
|
100
110
|
```
|
|
101
111
|
|
|
102
|
-
### 4.
|
|
112
|
+
### 4. Validação Por Task (NÃO DEVE)
|
|
113
|
+
|
|
114
|
+
Antes de marcar qualquer task como concluída, SEDD valida contra restrições:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
⚠️ VALIDAÇÃO - Task T001-003
|
|
118
|
+
|
|
119
|
+
Arquivos modificados:
|
|
120
|
+
- services/x/endpoints/new.ts ← ⛔ VIOLA "NÃO criar endpoint em serviço X"
|
|
121
|
+
- src/domains/novo/index.ts ← ✅ OK
|
|
122
|
+
|
|
123
|
+
❌ Task viola restrição. Opções:
|
|
124
|
+
1. Reverter e refazer
|
|
125
|
+
2. Ajustar expectativa
|
|
126
|
+
3. Continuar (marcar como desvio)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### 5. Checkpoints Durante Implementação
|
|
103
130
|
|
|
104
131
|
A cada 3 tasks, SEDD verifica alinhamento:
|
|
105
132
|
|
|
@@ -112,18 +139,22 @@ Sua expectativa:
|
|
|
112
139
|
Isso ainda está alinhado? [Y/n/ajustar]
|
|
113
140
|
```
|
|
114
141
|
|
|
115
|
-
###
|
|
142
|
+
### 6. Validação Final (DEVE + NÃO DEVE)
|
|
116
143
|
|
|
117
144
|
Ao completar migration, valida contra acceptance criteria:
|
|
118
145
|
|
|
119
146
|
```
|
|
120
147
|
🏁 Migration 001 Completa!
|
|
121
148
|
|
|
122
|
-
|
|
149
|
+
━━━ CRITÉRIOS POSITIVOS (DEVE) ━━━
|
|
123
150
|
- [x] AC-001: User can toggle ✓
|
|
124
151
|
- [x] AC-002: Toggle in settings ✓
|
|
125
152
|
- [ ] AC-003: Persist after refresh ✗
|
|
126
153
|
|
|
154
|
+
━━━ CRITÉRIOS NEGATIVOS (NÃO DEVE) ━━━
|
|
155
|
+
- [x] AC-N01: Nenhum arquivo em services/x/ ✓
|
|
156
|
+
- [x] AC-N02: Nenhuma API externa ✓
|
|
157
|
+
|
|
127
158
|
Criar migration de follow-up? [Y/n]
|
|
128
159
|
```
|
|
129
160
|
|
|
@@ -137,6 +168,7 @@ Criar migration de follow-up? [Y/n]
|
|
|
137
168
|
| `sedd specify <id> <name>` | Criar nova feature spec |
|
|
138
169
|
| `sedd clarify` | Criar migration com decisões |
|
|
139
170
|
| `sedd status` | Ver status atual |
|
|
171
|
+
| `sedd update` | Atualizar templates e migrar features existentes |
|
|
140
172
|
|
|
141
173
|
## Slash Commands (AI)
|
|
142
174
|
|
|
@@ -146,6 +178,7 @@ Criar migration de follow-up? [Y/n]
|
|
|
146
178
|
| `/sedd.clarify` | Clarificar e gerar tasks com score |
|
|
147
179
|
| `/sedd.implement` | Executar tasks com checkpoints |
|
|
148
180
|
| `/sedd.implement --all` | Executar tudo sem parar |
|
|
181
|
+
| `/sedd.dashboard` | Ver status atual de migrations e tasks |
|
|
149
182
|
|
|
150
183
|
---
|
|
151
184
|
|
|
@@ -154,22 +187,34 @@ Criar migration de follow-up? [Y/n]
|
|
|
154
187
|
```
|
|
155
188
|
.sedd/001-user-auth/
|
|
156
189
|
├── spec.md # Especificação + Expectativa
|
|
157
|
-
├── _meta.json # Metadados + expectation
|
|
190
|
+
├── _meta.json # Metadados + expectation estruturada
|
|
158
191
|
│
|
|
159
192
|
├── 001_timestamp/ # Migration 1
|
|
160
|
-
│ ├── clarify.md # Discussão
|
|
193
|
+
│ ├── clarify.md # Discussão + DEVE/NÃO DEVE
|
|
161
194
|
│ ├── decisions.md # Decisões
|
|
162
195
|
│ ├── tasks.md # Tasks T001-XXX
|
|
163
|
-
│ └── acceptance.md # Critérios
|
|
196
|
+
│ └── acceptance.md # Critérios positivos e negativos
|
|
164
197
|
│
|
|
165
|
-
└── progress.md # Progresso + checkpoints
|
|
198
|
+
└── progress.md # Progresso + checkpoints + desvios
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Estrutura de Expectativa em _meta.json
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"expectation": {
|
|
206
|
+
"summary": "User can toggle dark mode",
|
|
207
|
+
"must": ["Criar toggle", "Persistir no banco"],
|
|
208
|
+
"mustNot": ["Criar endpoint em serviço X", "Usar localStorage"]
|
|
209
|
+
}
|
|
210
|
+
}
|
|
166
211
|
```
|
|
167
212
|
|
|
168
213
|
---
|
|
169
214
|
|
|
170
215
|
## Hooks Inteligentes
|
|
171
216
|
|
|
172
|
-
O hook `check-roadmap.js` sempre mostra:
|
|
217
|
+
O hook `check-roadmap.js` sempre mostra expectativas E restrições:
|
|
173
218
|
|
|
174
219
|
```xml
|
|
175
220
|
<sedd-context>
|
|
@@ -178,6 +223,10 @@ Branch: 024-feature | Migration: 001 | Progress: 3/10 🟢 ~85%
|
|
|
178
223
|
🎯 FEATURE: User can customize theme
|
|
179
224
|
📍 MIGRATION 001: Toggle dark mode with persistence
|
|
180
225
|
|
|
226
|
+
⛔ NÃO DEVE:
|
|
227
|
+
- ❌ Criar endpoint no serviço X
|
|
228
|
+
- ❌ Usar localStorage
|
|
229
|
+
|
|
181
230
|
Pending tasks:
|
|
182
231
|
- T001-004: Add to settings page
|
|
183
232
|
- T001-005: API endpoint
|
package/commands/sedd.clarify.md
CHANGED
|
@@ -68,6 +68,49 @@ Save in `clarify.md` under `## Expected Outcome` section (NO TOPO).
|
|
|
68
68
|
|
|
69
69
|
**NÃO PROSSIGA** sem a expectativa do usuário.
|
|
70
70
|
|
|
71
|
+
### Step 1.5: Detail MUST and MUST NOT (STRUCTURED EXPECTATION)
|
|
72
|
+
|
|
73
|
+
Após capturar o resumo da expectativa, detalhar com regras claras:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Agora vamos detalhar sua expectativa:
|
|
77
|
+
|
|
78
|
+
**O que DEVE acontecer?** (requisitos obrigatórios)
|
|
79
|
+
Exemplo: "Criar domínio no monolito", "Usar padrão repository"
|
|
80
|
+
> [usuário lista]
|
|
81
|
+
|
|
82
|
+
**O que NÃO DEVE acontecer?** (restrições/proibições)
|
|
83
|
+
Exemplo: "NÃO criar endpoint em serviço X", "NÃO usar API externa"
|
|
84
|
+
> [usuário lista]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Se usuário não tiver restrições, aceitar resposta vazia para `mustNot`.
|
|
88
|
+
|
|
89
|
+
Save in `clarify.md` under `## Expectation Details`:
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
## Expectation Details
|
|
93
|
+
|
|
94
|
+
### DEVE fazer:
|
|
95
|
+
- Criar novo domínio no monolito
|
|
96
|
+
- Usar padrão repository existente
|
|
97
|
+
|
|
98
|
+
### NÃO DEVE fazer:
|
|
99
|
+
- ❌ Criar endpoint no serviço X
|
|
100
|
+
- ❌ Usar API externa
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Estrutura para _meta.json** (será salvo no Step 8):
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"expectation": {
|
|
107
|
+
"summary": "texto livre do usuário",
|
|
108
|
+
"must": ["item1", "item2"],
|
|
109
|
+
"mustNot": ["item1", "item2"]
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
71
114
|
### Step 2: Load Context
|
|
72
115
|
|
|
73
116
|
Read from feature root:
|
|
@@ -430,7 +473,17 @@ Como você imagina a persistência funcionando?
|
|
|
430
473
|
"tasksTotal": 5,
|
|
431
474
|
"tasksCompleted": 0,
|
|
432
475
|
"createdAt": "2026-01-11T10:30:45Z",
|
|
433
|
-
"expectation":
|
|
476
|
+
"expectation": {
|
|
477
|
+
"summary": "User can toggle dark mode and have it persist",
|
|
478
|
+
"must": [
|
|
479
|
+
"Criar toggle de dark mode",
|
|
480
|
+
"Persistir preferência no banco"
|
|
481
|
+
],
|
|
482
|
+
"mustNot": [
|
|
483
|
+
"Criar endpoint no serviço X",
|
|
484
|
+
"Usar localStorage (usar banco)"
|
|
485
|
+
]
|
|
486
|
+
}
|
|
434
487
|
}
|
|
435
488
|
}
|
|
436
489
|
}
|
|
@@ -1,145 +1,43 @@
|
|
|
1
|
-
# /sedd.dashboard -
|
|
1
|
+
# /sedd.dashboard - Status das Clarificações
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
|
-
|
|
4
|
+
Mostrar o status atual de migrations, tasks e progresso da feature.
|
|
5
5
|
|
|
6
6
|
## Trigger
|
|
7
|
-
- `/sedd.dashboard`
|
|
8
|
-
- `/sedd.dashboard -m 001` - Focus on specific migration
|
|
7
|
+
- `/sedd.dashboard` - Ver status completo
|
|
9
8
|
|
|
10
|
-
##
|
|
9
|
+
## Output
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
O comando exibe:
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
| MIGRATIONS | TASKS (3/5 completed) |
|
|
19
|
-
| ----------------- | ------------------------------------------ |
|
|
20
|
-
| > 001 [in-progress] | [x] T001-001 Create ThemeContext |
|
|
21
|
-
| 002 [pending] | [x] T001-002 Update database schema |
|
|
22
|
-
| 003 [pending] | [ ] T001-003 Create toggle component < |
|
|
23
|
-
| | [ ] T001-004 Add to settings page |
|
|
24
|
-
| | [ ] T001-005 API endpoint |
|
|
25
|
-
+---------------------+--------------------------------------------+
|
|
26
|
-
| PREVIEW: clarify.md |
|
|
27
|
-
| ---------------------------------------------------------------- |
|
|
28
|
-
| ## Expected Outcome |
|
|
29
|
-
| > User can toggle dark mode and have it persist |
|
|
30
|
-
| |
|
|
31
|
-
| ## Questions & Answers |
|
|
32
|
-
| ### Q1: Where to store preference? |
|
|
33
|
-
| **Answer:** In user account database... |
|
|
34
|
-
+------------------------------------------------------------------+
|
|
35
|
-
| [================== ] 60% (3/5 tasks) [?] Help | [q] Quit |
|
|
36
|
-
+------------------------------------------------------------------+
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Keyboard Shortcuts
|
|
40
|
-
|
|
41
|
-
| Key | Action |
|
|
42
|
-
|-----|--------|
|
|
43
|
-
| `j/k` or `arrows` | Navigate up/down |
|
|
44
|
-
| `Tab` | Switch panel (migrations → tasks → preview) |
|
|
45
|
-
| `Enter` | Select migration / Focus task |
|
|
46
|
-
| `Space` | Toggle task completion |
|
|
47
|
-
| `e` | Edit selected file in $EDITOR |
|
|
48
|
-
| `r` | Refresh data |
|
|
49
|
-
| `1-4` | Switch preview file (1=spec, 2=clarify, 3=tasks, 4=decisions) |
|
|
50
|
-
| `?` | Toggle help overlay |
|
|
51
|
-
| `q` | Quit dashboard |
|
|
52
|
-
|
|
53
|
-
### Panels
|
|
54
|
-
|
|
55
|
-
1. **Migrations Panel** - Left sidebar showing all migrations
|
|
56
|
-
- Status indicators: `>` in-progress, `*` completed, ` ` pending
|
|
57
|
-
- Navigate and select to filter tasks
|
|
58
|
-
|
|
59
|
-
2. **Tasks Panel** - Center area showing tasks
|
|
60
|
-
- Filtered by selected migration
|
|
61
|
-
- Toggle completion with Space
|
|
62
|
-
- Progress counter
|
|
63
|
-
|
|
64
|
-
3. **Preview Panel** - Right area showing file content
|
|
65
|
-
- Markdown syntax highlighting
|
|
66
|
-
- Switch between spec.md, clarify.md, tasks.md, decisions.md
|
|
67
|
-
|
|
68
|
-
### Status Bar
|
|
69
|
-
|
|
70
|
-
Shows overall progress with:
|
|
71
|
-
- Progress bar visualization
|
|
72
|
-
- Percentage complete
|
|
73
|
-
- Task count
|
|
74
|
-
- Quick help hints
|
|
75
|
-
|
|
76
|
-
## CLI Usage
|
|
13
|
+
- Feature atual (branch/nome)
|
|
14
|
+
- Migration em progresso
|
|
15
|
+
- Lista de tasks com status (pending/completed)
|
|
16
|
+
- Progresso geral (X/Y tasks)
|
|
77
17
|
|
|
78
|
-
|
|
79
|
-
# Open dashboard
|
|
80
|
-
sedd dashboard
|
|
18
|
+
### Exemplo
|
|
81
19
|
|
|
82
|
-
# Short alias
|
|
83
|
-
sedd d
|
|
84
|
-
|
|
85
|
-
# Focus on specific migration
|
|
86
|
-
sedd dashboard -m 001
|
|
87
|
-
sedd d -m 002
|
|
88
20
|
```
|
|
21
|
+
📊 Dashboard - 024-user-auth
|
|
89
22
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
- Must be on a feature branch (###-feature-name)
|
|
93
|
-
- Feature must have _meta.json (run /sedd.specify first)
|
|
94
|
-
- Terminal must support ANSI colors
|
|
23
|
+
Migration: 001 (in-progress)
|
|
24
|
+
Expectation: User can login with email/password
|
|
95
25
|
|
|
96
|
-
|
|
26
|
+
Tasks:
|
|
27
|
+
[x] T001-001 Create user model
|
|
28
|
+
[x] T001-002 Add password hashing
|
|
29
|
+
[ ] T001-003 Create login endpoint
|
|
30
|
+
[ ] T001-004 Add session management
|
|
97
31
|
|
|
98
|
-
|
|
99
|
-
- **Ink** - React for CLIs
|
|
100
|
-
- **ink-spinner** - Loading indicators
|
|
101
|
-
- **React** - Component architecture
|
|
102
|
-
|
|
103
|
-
Install with:
|
|
104
|
-
```bash
|
|
105
|
-
npm install
|
|
32
|
+
Progress: 2/4 (50%)
|
|
106
33
|
```
|
|
107
34
|
|
|
108
|
-
##
|
|
109
|
-
|
|
110
|
-
When pressing `e`, the dashboard:
|
|
111
|
-
1. Pauses rendering
|
|
112
|
-
2. Opens file in `$EDITOR` (defaults to vim)
|
|
113
|
-
3. After saving and closing, refreshes data
|
|
114
|
-
|
|
115
|
-
Supported editors:
|
|
116
|
-
- vim/nvim
|
|
117
|
-
- nano
|
|
118
|
-
- code (VS Code)
|
|
119
|
-
- Any editor in $EDITOR env var
|
|
120
|
-
|
|
121
|
-
## Task Toggle
|
|
122
|
-
|
|
123
|
-
Pressing `Space` on a task:
|
|
124
|
-
1. Reads tasks.md file
|
|
125
|
-
2. Toggles `[ ]` ↔ `[x]`
|
|
126
|
-
3. Writes back to file
|
|
127
|
-
4. Refreshes display
|
|
35
|
+
## Requirements
|
|
128
36
|
|
|
129
|
-
|
|
37
|
+
- Estar em branch de feature (###-feature-name)
|
|
38
|
+
- Feature deve ter _meta.json
|
|
130
39
|
|
|
131
40
|
## Rules
|
|
132
41
|
|
|
133
|
-
-
|
|
134
|
-
-
|
|
135
|
-
- Never executes code
|
|
136
|
-
- Safe to use during implementation
|
|
137
|
-
|
|
138
|
-
## Error States
|
|
139
|
-
|
|
140
|
-
| Error | Solution |
|
|
141
|
-
|-------|----------|
|
|
142
|
-
| "Not on a feature branch" | Checkout a feature branch (###-name) |
|
|
143
|
-
| "Feature directory not found" | Run /sedd.specify first |
|
|
144
|
-
| "_meta.json not found" | Initialize feature with /sedd.specify |
|
|
145
|
-
| "TUI dependencies not installed" | Run `npm install` in packages/sedd |
|
|
42
|
+
- Comando read-only, não modifica arquivos
|
|
43
|
+
- Mostra estado atual do filesystem
|
|
@@ -137,6 +137,134 @@ For each task in order:
|
|
|
137
137
|
|
|
138
138
|
5. **Verify sync** - All three files must show same completed count
|
|
139
139
|
|
|
140
|
+
### Step 5.6: Validate Against Expectations (CRITICAL - Before Marking Done)
|
|
141
|
+
|
|
142
|
+
**ANTES de marcar qualquer task como concluída**, validar contra as restrições `mustNot`.
|
|
143
|
+
|
|
144
|
+
#### 5.6.1 Carregar Restrições
|
|
145
|
+
|
|
146
|
+
Ler `_meta.json` e extrair `expectation.mustNot[]` da migration atual.
|
|
147
|
+
|
|
148
|
+
#### 5.6.2 Listar Arquivos Modificados
|
|
149
|
+
|
|
150
|
+
Identificar todos os arquivos criados ou modificados durante a task:
|
|
151
|
+
- Novos arquivos criados
|
|
152
|
+
- Arquivos editados
|
|
153
|
+
- Imports adicionados
|
|
154
|
+
|
|
155
|
+
#### 5.6.3 Validar Contra mustNot
|
|
156
|
+
|
|
157
|
+
Para cada item em `mustNot`, verificar se algum arquivo/código viola a restrição.
|
|
158
|
+
|
|
159
|
+
**Exemplo de validação:**
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
mustNot: ["Criar endpoint no serviço X"]
|
|
163
|
+
Arquivos modificados:
|
|
164
|
+
- services/x/endpoints/new.ts ← POTENCIAL VIOLAÇÃO
|
|
165
|
+
- src/domains/novo/index.ts ← OK
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
#### 5.6.4 Se Violação Detectada
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
⚠️ VALIDAÇÃO DE EXPECTATIVA - Task T001-003
|
|
172
|
+
|
|
173
|
+
Arquivos modificados nesta task:
|
|
174
|
+
- services/x/endpoints/new.ts ← ⛔ VIOLA "NÃO criar endpoint em serviço X"
|
|
175
|
+
- src/domains/novo/index.ts ← ✅ OK
|
|
176
|
+
|
|
177
|
+
❌ Task viola restrição da expectativa.
|
|
178
|
+
|
|
179
|
+
**Opções:**
|
|
180
|
+
1. Reverter alterações e refazer a task de forma diferente
|
|
181
|
+
2. Ajustar expectativa (remover esta restrição)
|
|
182
|
+
3. Continuar mesmo assim (será marcado como desvio)
|
|
183
|
+
|
|
184
|
+
O que deseja fazer? [1/2/3]
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Respostas:**
|
|
188
|
+
|
|
189
|
+
**Se "1" (Reverter):**
|
|
190
|
+
- Reverter as alterações feitas
|
|
191
|
+
- Voltar para início da task
|
|
192
|
+
- Sugerir abordagem alternativa
|
|
193
|
+
|
|
194
|
+
**Se "2" (Ajustar expectativa):**
|
|
195
|
+
```
|
|
196
|
+
Removendo restrição: "NÃO criar endpoint em serviço X"
|
|
197
|
+
|
|
198
|
+
⚠️ Isso será registrado em _meta.json como ajuste de expectativa.
|
|
199
|
+
Motivo do ajuste (opcional):
|
|
200
|
+
> [usuário fornece motivo]
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Atualizar `_meta.json`:
|
|
204
|
+
```json
|
|
205
|
+
{
|
|
206
|
+
"expectation": {
|
|
207
|
+
"mustNot": ["Usar API externa"],
|
|
208
|
+
"adjustments": [{
|
|
209
|
+
"type": "removed_mustNot",
|
|
210
|
+
"item": "Criar endpoint no serviço X",
|
|
211
|
+
"reason": "Necessário por limitação técnica",
|
|
212
|
+
"taskId": "T001-003",
|
|
213
|
+
"timestamp": "2026-01-11T14:30:00Z"
|
|
214
|
+
}]
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Se "3" (Continuar como desvio):**
|
|
220
|
+
```
|
|
221
|
+
⚠️ Registrando desvio...
|
|
222
|
+
|
|
223
|
+
Task T001-003 marcada como "completed_with_deviation".
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Atualizar `progress.md`:
|
|
227
|
+
```markdown
|
|
228
|
+
- [x] T001-003 [14:00 → 14:30] ⚠️ DESVIO: Criou endpoint em serviço X
|
|
229
|
+
- Motivo: [registrar motivo se fornecido]
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Atualizar `_meta.json`:
|
|
233
|
+
```json
|
|
234
|
+
{
|
|
235
|
+
"migrations": {
|
|
236
|
+
"001": {
|
|
237
|
+
"deviations": [{
|
|
238
|
+
"taskId": "T001-003",
|
|
239
|
+
"violation": "Criar endpoint no serviço X",
|
|
240
|
+
"reason": "...",
|
|
241
|
+
"timestamp": "2026-01-11T14:30:00Z"
|
|
242
|
+
}]
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
#### 5.6.5 Se Nenhuma Violação
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
✅ Validação OK - Nenhuma restrição violada
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Prosseguir normalmente com a marcação da task.
|
|
255
|
+
|
|
256
|
+
#### 5.6.6 Validação Automática de Padrões Comuns
|
|
257
|
+
|
|
258
|
+
Para detectar violações automaticamente, verificar padrões:
|
|
259
|
+
|
|
260
|
+
| Restrição | Padrão de Detecção |
|
|
261
|
+
|-----------|-------------------|
|
|
262
|
+
| "NÃO criar em services/x/" | Arquivo criado em `services/x/**` |
|
|
263
|
+
| "NÃO usar API externa" | Import de `axios`, `fetch` para URLs externas |
|
|
264
|
+
| "NÃO usar localStorage" | Código contém `localStorage.` |
|
|
265
|
+
| "NÃO criar novo endpoint" | Arquivo em `**/endpoints/**` ou `**/routes/**` |
|
|
266
|
+
| "NÃO modificar schema" | Alteração em `**/schema.prisma` ou migrations |
|
|
267
|
+
|
|
140
268
|
### Step 5.5: Expectation Checkpoint (NEW)
|
|
141
269
|
|
|
142
270
|
A cada 3 tasks completadas, pausar e verificar alinhamento com expectativa.
|
|
@@ -233,6 +361,7 @@ Quando todas as tasks de uma migration forem completadas, validar usando accepta
|
|
|
233
361
|
#### 7.1 Carregar Acceptance Criteria
|
|
234
362
|
|
|
235
363
|
Se `{migration}/acceptance.md` existe, carregar os critérios.
|
|
364
|
+
Também carregar `expectation.must[]` e `expectation.mustNot[]` de `_meta.json`.
|
|
236
365
|
|
|
237
366
|
#### 7.2 Prompt de Verificação
|
|
238
367
|
|
|
@@ -242,18 +371,24 @@ Se `{migration}/acceptance.md` existe, carregar os critérios.
|
|
|
242
371
|
**Todas {N} tasks finalizadas.**
|
|
243
372
|
|
|
244
373
|
**Sua expectativa era:**
|
|
245
|
-
> {expectation}
|
|
374
|
+
> {expectation.summary}
|
|
246
375
|
|
|
247
|
-
|
|
376
|
+
━━━ CRITÉRIOS POSITIVOS (DEVE) ━━━
|
|
248
377
|
- [ ] AC-001: User can access dark mode toggle
|
|
249
378
|
- [ ] AC-002: Toggle changes theme immediately
|
|
250
379
|
- [ ] AC-003: Theme persists after refresh
|
|
251
|
-
|
|
380
|
+
|
|
381
|
+
━━━ CRITÉRIOS NEGATIVOS (NÃO DEVE) ━━━
|
|
382
|
+
- [ ] AC-N01: Nenhum arquivo criado em services/x/
|
|
383
|
+
- [ ] AC-N02: Nenhuma chamada a API externa
|
|
384
|
+
- [ ] AC-N03: Não usa localStorage
|
|
252
385
|
|
|
253
386
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
254
387
|
|
|
255
388
|
Por favor verifique cada critério. Quais foram atendidos?
|
|
256
|
-
|
|
389
|
+
|
|
390
|
+
**Positivos (DEVE):** all, none, ou IDs como "1,2"
|
|
391
|
+
**Negativos (NÃO DEVE):** all, none, ou IDs como "N1,N2"
|
|
257
392
|
```
|
|
258
393
|
|
|
259
394
|
#### 7.3 Processar Resposta
|
package/dist/cli/index.js
CHANGED
|
@@ -16,6 +16,8 @@ import { migrate } from './migrate.js';
|
|
|
16
16
|
import { specify } from './specify.js';
|
|
17
17
|
import { clarify } from './clarify.js';
|
|
18
18
|
import { addTasks, completeTask } from './tasks.js';
|
|
19
|
+
import { update } from './update.js';
|
|
20
|
+
import { checkForUpdates, showUpdateNotification, getInstalledVersion } from './version-check.js';
|
|
19
21
|
const SEDD_DIR = '.sedd';
|
|
20
22
|
function getFeatures(seddPath) {
|
|
21
23
|
if (!existsSync(seddPath))
|
|
@@ -101,6 +103,7 @@ function showWelcome() {
|
|
|
101
103
|
${chalk.cyan('sedd specify <id> <name>')} Create new feature spec
|
|
102
104
|
${chalk.cyan('sedd clarify')} Create clarify/tasks/decisions
|
|
103
105
|
${chalk.cyan('sedd status')} Show project status
|
|
106
|
+
${chalk.cyan('sedd update')} Update templates/commands/hooks
|
|
104
107
|
${chalk.cyan('sedd --help')} Show all commands
|
|
105
108
|
`);
|
|
106
109
|
}
|
|
@@ -110,7 +113,14 @@ async function main() {
|
|
|
110
113
|
program
|
|
111
114
|
.name('sedd')
|
|
112
115
|
.description('SEDD - Spec & Expectation Driven Development')
|
|
113
|
-
.version(
|
|
116
|
+
.version(getInstalledVersion());
|
|
117
|
+
// Non-blocking version check before any command
|
|
118
|
+
program.hook('preAction', async () => {
|
|
119
|
+
const versionInfo = await checkForUpdates();
|
|
120
|
+
if (versionInfo?.needsUpdate) {
|
|
121
|
+
showUpdateNotification(versionInfo);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
114
124
|
program
|
|
115
125
|
.command('init')
|
|
116
126
|
.description('Initialize SEDD in current project')
|
|
@@ -161,6 +171,12 @@ async function main() {
|
|
|
161
171
|
.description('Mark a task as completed')
|
|
162
172
|
.argument('<task-id>', 'Task ID (e.g., "T001-001")')
|
|
163
173
|
.action(completeTask);
|
|
174
|
+
program
|
|
175
|
+
.command('update')
|
|
176
|
+
.description('Update SEDD templates, commands, hooks and scripts')
|
|
177
|
+
.option('-f, --force', 'Skip confirmation prompt')
|
|
178
|
+
.option('-b, --backup', 'Create backup before updating')
|
|
179
|
+
.action(update);
|
|
164
180
|
// No arguments - show welcome
|
|
165
181
|
if (args.length === 0) {
|
|
166
182
|
showWelcome();
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,WAAW;AACX,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAOA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAOA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0HvE"}
|
package/dist/cli/status.js
CHANGED
|
@@ -19,7 +19,6 @@ export async function status(options = {}) {
|
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
21
|
let currentFeature = null;
|
|
22
|
-
// Try to detect feature from current branch
|
|
23
22
|
if (git.hasGit()) {
|
|
24
23
|
const branch = git.getCurrentBranch();
|
|
25
24
|
if (git.isFeatureBranch(branch)) {
|
|
@@ -29,7 +28,6 @@ export async function status(options = {}) {
|
|
|
29
28
|
}
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
|
-
// Fallback: get most recent feature
|
|
33
31
|
if (!currentFeature) {
|
|
34
32
|
const features = readdirSync(specsDir, { withFileTypes: true })
|
|
35
33
|
.filter((d) => d.isDirectory() && /^\d{3}-/.test(d.name))
|
package/dist/cli/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM/C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAyB,EAAE;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,QAAQ,6CAA6C,CAAC,CAAC,CAAC;QACpG,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,cAAc,GAAkB,IAAI,CAAC;IAEzC,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"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"}
|