sdd-es 2.0.0 → 2.5.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.
- package/.claude/settings.json +21 -45
- package/LICENSE +21 -0
- package/README.md +51 -21
- package/agents/architecture-designer.md +174 -0
- package/agents/arquitecto.md +16 -1
- package/agents/asesor-datos.md +15 -1
- package/agents/critico.md +37 -1
- package/agents/desarrollador-backend.md +3 -1
- package/agents/desarrollador-frontend.md +3 -1
- package/agents/disenador-api.md +13 -1
- package/agents/documentador.md +3 -1
- package/agents/investigador.md +3 -1
- package/agents/operaciones.md +3 -1
- package/agents/product-designer.md +232 -0
- package/agents/revisor.md +25 -1
- package/agents/seguridad.md +5 -1
- package/agents/tester.md +3 -1
- package/claude-hooks/agent-memory.js +154 -0
- package/cli/index.js +1 -2
- package/commands/sdd.analizar.md +23 -2
- package/commands/sdd.compliance.md +516 -0
- package/commands/sdd.configurar.md +33 -0
- package/commands/sdd.constitucion.md +198 -23
- package/commands/sdd.construir.md +210 -0
- package/commands/sdd.dise/303/261ar.md +188 -0
- package/commands/sdd.estado.md +68 -1
- package/commands/sdd.exportar.md +344 -0
- package/commands/sdd.implementar.md +203 -23
- package/commands/sdd.interpretar.md +239 -0
- package/commands/sdd.md +70 -1
- package/commands/sdd.optimizar.md +164 -0
- package/commands/sdd.planificar.md +64 -0
- package/commands/sdd.verificar.md +10 -0
- package/craft/accessibility-baseline.md +216 -0
- package/craft/anti-ai-slop.md +158 -0
- package/craft/color.md +160 -0
- package/craft/typography.md +121 -0
- package/design-systems/bold-brutalist/DESIGN.md +239 -0
- package/design-systems/editorial-minimal/DESIGN.md +205 -0
- package/design-systems/neutral-modern/DESIGN.md +227 -0
- package/design-systems/vibrant-consumer/DESIGN.md +257 -0
- package/design-systems/warm-editorial/DESIGN.md +221 -0
- package/docs/AGENTES.md +4 -1
- package/docs/FABRICA.md +164 -115
- package/docs/MEMORIA-Y-OBSERVABILIDAD.md +237 -0
- package/docs/MODELOS.md +3 -0
- package/docs/QUE-PASA-SI-FALLA.md +404 -0
- package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
- package/package.json +5 -3
- package/skills/cache-audit/SKILL.md +163 -0
- package/skills/critica-diseno/SKILL.md +193 -0
- package/skills/descubrir-idea/SKILL.md +133 -0
- package/skills/effort-router/SKILL.md +128 -0
- package/skills/elegir-direccion/SKILL.md +184 -0
- package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
- package/skills/github-connect/INDEX.md +223 -0
- package/skills/github-connect/INTEGRATION.md +361 -0
- package/skills/github-connect/QUICK-START.md +168 -0
- package/skills/github-connect/README.md +414 -0
- package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
- package/skills/github-connect/SKILL.md +343 -0
- package/skills/github-connect/STRUCTURE.txt +252 -0
- package/skills/github-connect/example-config.yaml +41 -0
- package/skills/github-connect/github-connect.sh +419 -0
- package/skills/interpretar-idea/SKILL.md +254 -0
- package/skills/memory-compactor/SKILL.md +114 -0
- package/skills/modo-guiado/SKILL.md +12 -2
- package/skills/observabilidad-consumo/SKILL.md +164 -0
- package/skills/token-budget/SKILL.md +154 -0
- package/skills/vercel-deploy/00-START-HERE.txt +364 -0
- package/skills/vercel-deploy/CHECKLIST.md +205 -0
- package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
- package/skills/vercel-deploy/FLOW.txt +334 -0
- package/skills/vercel-deploy/INDEX.md +276 -0
- package/skills/vercel-deploy/INTEGRATION.md +328 -0
- package/skills/vercel-deploy/MANIFEST.md +310 -0
- package/skills/vercel-deploy/README.md +65 -0
- package/skills/vercel-deploy/SKILL.md +356 -0
- package/skills/vercel-deploy/deploy.sh +298 -0
- package/skills/vercel-deploy/estado.json.example +205 -0
- package/skills/vercel-deploy/skill.yaml +323 -0
- package/skills/vercel-deploy/vercel-deploy.sh +216 -0
- package/skills/wireframe-mvp/SKILL.md +157 -0
- package/.claude-plugin/marketplace.json +0 -31
- package/.claude-plugin/plugin.json +0 -97
- package/docs/EJEMPLO-PRACTICA.md +0 -383
- package/docs/EJEMPLOS.md +0 -212
- /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
- /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
- /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
- /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
- /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
- /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
- /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
- /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
package/docs/EJEMPLO-PRACTICA.md
DELETED
|
@@ -1,383 +0,0 @@
|
|
|
1
|
-
# Ejemplo Práctico — API de Lista de Tareas desde Cero
|
|
2
|
-
|
|
3
|
-
Este ejemplo recorre el flujo completo de SDD-ES construyendo una API REST de lista de tareas con Node.js + Express + SQLite. No asume ningún código previo.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Contexto del proyecto
|
|
8
|
-
|
|
9
|
-
Tienes una carpeta vacía. Quieres construir una API que permita crear, listar, completar y eliminar tareas.
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
mkdir mi-api-tareas
|
|
13
|
-
cd mi-api-tareas
|
|
14
|
-
git init
|
|
15
|
-
bash /ruta/a/sdd-es/instalar.sh
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Abre Claude Code en `mi-api-tareas`.
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Paso 1 — Constitución
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
/sdd.constitucion
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Claude detecta que el proyecto está vacío y te pregunta por el stack. Respondes:
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
Stack: Node.js con Express
|
|
32
|
-
Base de datos: SQLite (sin ORM, queries directas)
|
|
33
|
-
Tests: Jest
|
|
34
|
-
Calidad: cobertura mínima 80%, funciones ≤40 líneas, sin any en TypeScript
|
|
35
|
-
Sin TypeScript por ahora — JavaScript puro
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Claude genera `.sdd/memoria/constitucion.md` con tus principios.
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## Paso 2 — Primera especificación
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
/sdd.especificar API de lista de tareas — CRUD completo con SQLite
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Claude detecta que es un cambio **mediano** (varios endpoints, BD, tests) y genera la spec:
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
✅ Spec creada: .sdd/especificaciones/2026-06-09-api-lista-tareas/spec.md
|
|
52
|
-
|
|
53
|
-
⚠️ 2 puntos requieren aclaración.
|
|
54
|
-
|
|
55
|
-
PRÓXIMO PASO RECOMENDADO:
|
|
56
|
-
/sdd.aclarar — resolver los [NECESITA_ACLARACION]
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
La spec generada contiene secciones como:
|
|
60
|
-
|
|
61
|
-
```markdown
|
|
62
|
-
## 4. Historias de Usuario
|
|
63
|
-
|
|
64
|
-
### HU-001: Gestión de tareas
|
|
65
|
-
Como usuario de la API
|
|
66
|
-
Quiero crear, listar, completar y eliminar tareas
|
|
67
|
-
Para organizar mi trabajo
|
|
68
|
-
|
|
69
|
-
Criterios de aceptación:
|
|
70
|
-
- [ ] CA-001-01: POST /tareas crea una tarea con título obligatorio (P1)
|
|
71
|
-
- [ ] CA-001-02: GET /tareas devuelve todas las tareas ordenadas por fecha (P1)
|
|
72
|
-
- [ ] CA-001-03: PATCH /tareas/:id/completar marca la tarea como completa (P1)
|
|
73
|
-
- [ ] CA-001-04: DELETE /tareas/:id elimina la tarea (P1)
|
|
74
|
-
- [ ] CA-001-05: POST /tareas sin título devuelve 400 con mensaje de error (P1)
|
|
75
|
-
- [ ] CA-001-06: PATCH /tareas/:id con ID inexistente devuelve 404 (P2)
|
|
76
|
-
|
|
77
|
-
## 8. Fuera de Alcance
|
|
78
|
-
|
|
79
|
-
❌ Autenticación de usuarios
|
|
80
|
-
❌ Múltiples listas por usuario
|
|
81
|
-
❌ Prioridades o etiquetas
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## Paso 3 — Aclarar ambigüedades
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
/sdd.aclarar
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
Claude encuentra 2 puntos sin definir y pregunta:
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
🔴 ACLARACIONES CRÍTICAS
|
|
96
|
-
|
|
97
|
-
1. [Datos] — ¿Las tareas tienen fecha de vencimiento?
|
|
98
|
-
a) Sí, campo opcional `vence_en` (ISO 8601)
|
|
99
|
-
b) No, solo título y estado
|
|
100
|
-
|
|
101
|
-
2. [Formato] — ¿Qué devuelve DELETE /tareas/:id?
|
|
102
|
-
a) 204 sin body
|
|
103
|
-
b) 200 con la tarea eliminada
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
Respondes: `1.b, 2.a`
|
|
107
|
-
|
|
108
|
-
Claude actualiza la spec y elimina los marcadores `[NECESITA_ACLARACION]`.
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## Paso 4 — Plan técnico
|
|
113
|
-
|
|
114
|
-
```
|
|
115
|
-
/sdd.planificar
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
El arquitecto, el asesor de datos y el crítico trabajan en paralelo. Claude genera `.sdd/especificaciones/{ID}/plan.md`:
|
|
119
|
-
|
|
120
|
-
```
|
|
121
|
-
── Constitutional AI Check ─────────────────────────────
|
|
122
|
-
✅ Stack: Express + SQLite — alineado con constitución
|
|
123
|
-
✅ Patrones: módulos ES, funciones ≤40 líneas
|
|
124
|
-
✅ Sin dependencias nuevas más allá de express y better-sqlite3
|
|
125
|
-
─────────────────────────────────────────────────────────
|
|
126
|
-
|
|
127
|
-
📋 Plan técnico generado
|
|
128
|
-
• 6 archivos afectados
|
|
129
|
-
• 2 dependencias nuevas (express, better-sqlite3)
|
|
130
|
-
• 4 decisiones técnicas
|
|
131
|
-
• 1 riesgo identificado
|
|
132
|
-
|
|
133
|
-
⚠️ PUNTOS DESTACADOS:
|
|
134
|
-
• Riesgo medio: SQLite no soporta concurrencia alta — documentado, aceptado
|
|
135
|
-
para el scope actual (API local/dev)
|
|
136
|
-
|
|
137
|
-
POR FAVOR REVISA EL PLAN:
|
|
138
|
-
/sdd.planificar aprobar — continuar al desglose
|
|
139
|
-
/sdd.planificar revisar — discutir cambios
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
Revisas el plan en `.sdd/especificaciones/{ID}/plan.md`. Ves que el arquitecto propuso esta estructura:
|
|
143
|
-
|
|
144
|
-
```
|
|
145
|
-
src/
|
|
146
|
-
db.js ← inicialización de SQLite
|
|
147
|
-
tareas.js ← lógica de negocio
|
|
148
|
-
rutas.js ← endpoints Express
|
|
149
|
-
app.js ← setup de Express
|
|
150
|
-
server.js ← punto de entrada
|
|
151
|
-
tests/
|
|
152
|
-
tareas.test.js
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
/sdd.planificar aprobar
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## Paso 5 — Desglose en tareas
|
|
162
|
-
|
|
163
|
-
```
|
|
164
|
-
/sdd.tareas
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
✅ 8 tareas generadas
|
|
169
|
-
|
|
170
|
-
DISTRIBUCIÓN POR AGENTE:
|
|
171
|
-
• arquitecto: 1 (estructura base)
|
|
172
|
-
• desarrollador-backend: 5 (BD, lógica, rutas)
|
|
173
|
-
• tester: 2 (tests unitarios + integración)
|
|
174
|
-
|
|
175
|
-
COBERTURA:
|
|
176
|
-
• 6/6 CAs cubiertos
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Las tareas generadas en `.sdd/especificaciones/{ID}/tareas.md`:
|
|
180
|
-
|
|
181
|
-
```
|
|
182
|
-
T001 — Inicializar proyecto e instalar dependencias [arquitecto]
|
|
183
|
-
T002 — Crear módulo de BD (db.js + migración inicial) [backend]
|
|
184
|
-
T003 — Tests unitarios de la capa de datos [tester]
|
|
185
|
-
T004 — Implementar lógica de tareas (tareas.js) [backend]
|
|
186
|
-
T005 — Tests unitarios de lógica [tester]
|
|
187
|
-
T006 — Implementar rutas Express (rutas.js) [backend]
|
|
188
|
-
T007 — Setup de app.js y server.js [backend]
|
|
189
|
-
T008 — Tests de integración (API completa) [tester]
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## Paso 6 — Implementación
|
|
195
|
-
|
|
196
|
-
```
|
|
197
|
-
/sdd.implementar
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
Claude muestra el progreso en tiempo real:
|
|
201
|
-
|
|
202
|
-
```
|
|
203
|
-
🔧 T001 — Inicializar proyecto e instalar dependencias
|
|
204
|
-
Agente: arquitecto (modelo: opus)
|
|
205
|
-
Tiempo estimado: S
|
|
206
|
-
|
|
207
|
-
✅ T001 completada — Verificación: PASADA
|
|
208
|
-
|
|
209
|
-
🔧 T002 — Crear módulo de BD
|
|
210
|
-
Agente: desarrollador-backend (modelo: sonnet)
|
|
211
|
-
|
|
212
|
-
── Validación de convenciones: src/db.js (fuentes: constitución, inferido) ──
|
|
213
|
-
✅ Sin violaciones
|
|
214
|
-
────────────────────────────────────────────────────────────────────────────
|
|
215
|
-
|
|
216
|
-
✅ T002 completada — Verificación: PASADA
|
|
217
|
-
|
|
218
|
-
🔧 T003 — Tests unitarios de la capa de datos
|
|
219
|
-
Agente: tester (modelo: sonnet)
|
|
220
|
-
✅ T003 completada
|
|
221
|
-
|
|
222
|
-
[...continúa para T004–T008...]
|
|
223
|
-
|
|
224
|
-
✅ T008 completada
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
El código generado en `src/db.js`:
|
|
228
|
-
|
|
229
|
-
```javascript
|
|
230
|
-
import Database from 'better-sqlite3'
|
|
231
|
-
import { join, dirname } from 'node:path'
|
|
232
|
-
import { fileURLToPath } from 'node:url'
|
|
233
|
-
|
|
234
|
-
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
235
|
-
const DB_PATH = join(__dirname, '..', 'tareas.db')
|
|
236
|
-
|
|
237
|
-
let db
|
|
238
|
-
|
|
239
|
-
export function getDb() {
|
|
240
|
-
if (!db) {
|
|
241
|
-
db = new Database(DB_PATH)
|
|
242
|
-
db.pragma('journal_mode = WAL')
|
|
243
|
-
inicializar(db)
|
|
244
|
-
}
|
|
245
|
-
return db
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
function inicializar(db) {
|
|
249
|
-
db.exec(`
|
|
250
|
-
CREATE TABLE IF NOT EXISTS tareas (
|
|
251
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
252
|
-
titulo TEXT NOT NULL,
|
|
253
|
-
completa INTEGER NOT NULL DEFAULT 0,
|
|
254
|
-
creada_en TEXT NOT NULL DEFAULT (datetime('now'))
|
|
255
|
-
)
|
|
256
|
-
`)
|
|
257
|
-
}
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
Y en `src/tareas.js`:
|
|
261
|
-
|
|
262
|
-
```javascript
|
|
263
|
-
import { getDb } from './db.js'
|
|
264
|
-
|
|
265
|
-
export function listarTareas() {
|
|
266
|
-
return getDb()
|
|
267
|
-
.prepare('SELECT * FROM tareas ORDER BY creada_en DESC')
|
|
268
|
-
.all()
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
export function crearTarea(titulo) {
|
|
272
|
-
if (!titulo || titulo.trim().length === 0) {
|
|
273
|
-
throw new Error('El título es obligatorio')
|
|
274
|
-
}
|
|
275
|
-
const stmt = getDb().prepare('INSERT INTO tareas (titulo) VALUES (?)')
|
|
276
|
-
const result = stmt.run(titulo.trim())
|
|
277
|
-
return getDb().prepare('SELECT * FROM tareas WHERE id = ?').get(result.lastInsertRowid)
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
export function completarTarea(id) {
|
|
281
|
-
const tarea = getDb().prepare('SELECT * FROM tareas WHERE id = ?').get(id)
|
|
282
|
-
if (!tarea) return null
|
|
283
|
-
getDb().prepare('UPDATE tareas SET completa = 1 WHERE id = ?').run(id)
|
|
284
|
-
return { ...tarea, completa: 1 }
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
export function eliminarTarea(id) {
|
|
288
|
-
const result = getDb().prepare('DELETE FROM tareas WHERE id = ?').run(id)
|
|
289
|
-
return result.changes > 0
|
|
290
|
-
}
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
---
|
|
294
|
-
|
|
295
|
-
## Paso 7 — Verificación final
|
|
296
|
-
|
|
297
|
-
Al terminar todas las tareas, Claude invoca automáticamente al revisor y corre los tests:
|
|
298
|
-
|
|
299
|
-
```
|
|
300
|
-
📊 Implementación Completada: 2026-06-09-api-lista-tareas
|
|
301
|
-
|
|
302
|
-
Tareas: 8/8 ✅
|
|
303
|
-
Tests: Jest — 14 pasados, 0 fallidos
|
|
304
|
-
Cobertura: 87% (umbral: 80%) ✅
|
|
305
|
-
Constitución: ✅
|
|
306
|
-
|
|
307
|
-
Revisión del agente revisor:
|
|
308
|
-
✅ Todos los CAs cubiertos por tests
|
|
309
|
-
✅ Funciones ≤40 líneas (máx. encontrada: 18 líneas)
|
|
310
|
-
🟡 Sugerencia: añadir middleware de manejo de errores global (no bloqueante)
|
|
311
|
-
|
|
312
|
-
SIGUIENTES PASOS:
|
|
313
|
-
/sdd.verificar — verificación final contra spec original
|
|
314
|
-
/sdd.snapshot — actualizar SNAPSHOT del producto
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
```
|
|
318
|
-
/sdd.verificar
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
```
|
|
322
|
-
✅ Verificación completada
|
|
323
|
-
|
|
324
|
-
CA-001-01: POST /tareas crea tarea ✅ test: "debería crear tarea con título"
|
|
325
|
-
CA-001-02: GET /tareas devuelve ordenadas ✅ test: "debería listar en orden descendente"
|
|
326
|
-
CA-001-03: PATCH completa la tarea ✅ test: "debería marcar como completa"
|
|
327
|
-
CA-001-04: DELETE elimina la tarea ✅ test: "debería eliminar y devolver 204"
|
|
328
|
-
CA-001-05: POST sin título → 400 ✅ test: "debería devolver 400 sin título"
|
|
329
|
-
CA-001-06: PATCH ID inexistente → 404 ✅ test: "debería devolver 404 si no existe"
|
|
330
|
-
|
|
331
|
-
6/6 criterios de aceptación verificados ✅
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
---
|
|
335
|
-
|
|
336
|
-
## Resultado final
|
|
337
|
-
|
|
338
|
-
```
|
|
339
|
-
mi-api-tareas/
|
|
340
|
-
├── src/
|
|
341
|
-
│ ├── db.js ← BD SQLite
|
|
342
|
-
│ ├── tareas.js ← lógica de negocio
|
|
343
|
-
│ ├── rutas.js ← endpoints Express
|
|
344
|
-
│ ├── app.js ← setup Express
|
|
345
|
-
│ └── server.js ← punto de entrada
|
|
346
|
-
├── tests/
|
|
347
|
-
│ └── tareas.test.js ← 14 tests, 87% cobertura
|
|
348
|
-
├── package.json
|
|
349
|
-
├── tareas.db ← BD generada en primera ejecución
|
|
350
|
-
└── .sdd/
|
|
351
|
-
├── memoria/constitucion.md
|
|
352
|
-
├── especificaciones/2026-06-09-api-lista-tareas/
|
|
353
|
-
│ ├── spec.md
|
|
354
|
-
│ ├── plan.md
|
|
355
|
-
│ ├── tareas.md
|
|
356
|
-
│ └── checklist-spec.md
|
|
357
|
-
└── SNAPSHOT.md
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
**Lo que SDD-ES garantizó:**
|
|
361
|
-
- Cada línea de código está trazada a un criterio de aceptación
|
|
362
|
-
- El revisor verificó independientemente del implementador
|
|
363
|
-
- La constitución se cumplió en cada decisión técnica
|
|
364
|
-
- Los tests no son decorativos — cada CA tiene su test
|
|
365
|
-
|
|
366
|
-
---
|
|
367
|
-
|
|
368
|
-
## Próxima feature
|
|
369
|
-
|
|
370
|
-
```
|
|
371
|
-
/sdd.especificar añadir prioridad a las tareas (alta/media/baja)
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
El sistema detecta que hay una spec anterior completada, carga el contexto del proyecto (constitución + snapshot) y empieza desde cero — sin repetir preguntas ya respondidas.
|
|
375
|
-
|
|
376
|
-
---
|
|
377
|
-
|
|
378
|
-
## Ver también
|
|
379
|
-
|
|
380
|
-
- [FLUJO.md](FLUJO.md) — diagrama completo del flujo
|
|
381
|
-
- [AGENTES.md](AGENTES.md) — qué hace cada agente
|
|
382
|
-
- [PERSONALIZACION.md](PERSONALIZACION.md) — ajustar modelos, activar/desactivar agentes
|
|
383
|
-
- [FILOSOFIA.md](FILOSOFIA.md) — por qué SDD con IA
|
package/docs/EJEMPLOS.md
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
# Ejemplos Completos de Uso
|
|
2
|
-
|
|
3
|
-
## Ejemplo 1: Proyecto nuevo en blanco
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
# 1. Instalar plugin
|
|
7
|
-
cd mi-proyecto
|
|
8
|
-
bash sdd-es/instalar.sh
|
|
9
|
-
|
|
10
|
-
# 2. Inicializar
|
|
11
|
-
claude
|
|
12
|
-
> /sdd.constitucion
|
|
13
|
-
|
|
14
|
-
# Claude detecta package.json con React+Express+PostgreSQL
|
|
15
|
-
# Hace 4-5 preguntas: propósito, audiencia, no-negociables, restricciones
|
|
16
|
-
# Genera .sdd/memoria/constitucion.md v1.0.0
|
|
17
|
-
|
|
18
|
-
> /sdd.configurar
|
|
19
|
-
# Revisas agentes y modelos. Confirmas defaults o ajustas.
|
|
20
|
-
|
|
21
|
-
> /sdd.especificar Quiero agregar autenticación con magic links por email
|
|
22
|
-
# Claude crea .sdd/especificaciones/2026-06-08-auth-magic-links/spec.md
|
|
23
|
-
# Marca 3 puntos con [NECESITA_ACLARACION]
|
|
24
|
-
|
|
25
|
-
> /sdd.aclarar
|
|
26
|
-
# Claude hace preguntas agrupadas:
|
|
27
|
-
# 1. ¿Magic link expira en cuántos minutos? a)5 b)15 c)60
|
|
28
|
-
# 2. ¿Un solo uso o múltiples? a)único b)múltiples
|
|
29
|
-
# 3. ¿Qué pasa si el usuario solicita 5 links seguidos? a)rate limit b)reemplazar último
|
|
30
|
-
# Respondes: 1.b, 2.a, 3.a
|
|
31
|
-
# Spec actualizada
|
|
32
|
-
|
|
33
|
-
> /sdd.checklist
|
|
34
|
-
# Resultado: APROBADA (cobertura 95%)
|
|
35
|
-
|
|
36
|
-
> /sdd.planificar
|
|
37
|
-
# arquitecto: define estructura (auth/, magic-link.service.ts, ...)
|
|
38
|
-
# disenador-api: 2 endpoints: POST /auth/magic-link, GET /auth/verify
|
|
39
|
-
# asesor-datos: tabla magic_links con TTL via cron
|
|
40
|
-
# critico: identifica 3 riesgos (race conditions, email bounce, rate limit bypass)
|
|
41
|
-
# seguridad: recomienda hashear el token antes de guardarlo
|
|
42
|
-
# Plan generado
|
|
43
|
-
|
|
44
|
-
> /sdd.planificar aprobar
|
|
45
|
-
# ✅ Plan aprobado
|
|
46
|
-
|
|
47
|
-
> /sdd.tareas
|
|
48
|
-
# 12 tareas generadas, distribuidas en 6 agentes
|
|
49
|
-
|
|
50
|
-
> /sdd.analizar
|
|
51
|
-
# Verifica que todos los CAs estén cubiertos
|
|
52
|
-
# Resultado: APROBADO
|
|
53
|
-
|
|
54
|
-
> /sdd.implementar
|
|
55
|
-
# Ejecuta T001 (arquitecto, tipos)
|
|
56
|
-
# T002 (asesor-datos, migración)
|
|
57
|
-
# T003 (desarrollador-backend, service)
|
|
58
|
-
# ... 12 tareas con verificación entre cada una
|
|
59
|
-
# Tests pasan
|
|
60
|
-
# Revisor da APROBADO
|
|
61
|
-
|
|
62
|
-
> /sdd.verificar
|
|
63
|
-
# Cruza código contra los 8 CAs
|
|
64
|
-
# Resultado: APROBADA (100%)
|
|
65
|
-
|
|
66
|
-
> /sdd.snapshot
|
|
67
|
-
# Actualiza .sdd/SNAPSHOT.md con la nueva funcionalidad
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Ejemplo 2: Cambio micro
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
> /sdd.especificar Corregir typo en el texto del botón de login
|
|
74
|
-
# Detecta MICRO automáticamente
|
|
75
|
-
# Genera spec mínima + plan mínimo + 1 tarea
|
|
76
|
-
# Pregunta: "¿Ejecutar ahora?" → sí
|
|
77
|
-
# Cambia el texto, marca como completado
|
|
78
|
-
# Total: 30 segundos
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## Ejemplo 3: Feature grande con calidad máxima
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
> /sdd.especificar Migrar de REST a GraphQL manteniendo el endpoint REST en deprecación
|
|
85
|
-
|
|
86
|
-
> /sdd.aclarar
|
|
87
|
-
# 12 puntos de aclaración (gran cambio)
|
|
88
|
-
|
|
89
|
-
> /sdd.checklist
|
|
90
|
-
# Necesita revisión: faltan métricas de éxito medibles
|
|
91
|
-
|
|
92
|
-
> /sdd.aclarar
|
|
93
|
-
# Resuelve los puntos faltantes
|
|
94
|
-
|
|
95
|
-
> /sdd.checklist
|
|
96
|
-
# APROBADA
|
|
97
|
-
|
|
98
|
-
> /sdd.planificar
|
|
99
|
-
# Todos los agentes participan
|
|
100
|
-
# Plan tiene 17 secciones, 25 archivos, 6 ADRs generados
|
|
101
|
-
|
|
102
|
-
> /sdd.planificar revisar
|
|
103
|
-
# Discutes 3 ajustes con el arquitecto
|
|
104
|
-
|
|
105
|
-
> /sdd.planificar aprobar
|
|
106
|
-
|
|
107
|
-
> /sdd.tareas
|
|
108
|
-
# 47 tareas generadas
|
|
109
|
-
|
|
110
|
-
> /sdd.analizar
|
|
111
|
-
# OBSERVACIONES: 2 riesgos sin mitigación
|
|
112
|
-
|
|
113
|
-
# Editar manualmente tareas.md para añadir mitigaciones, o:
|
|
114
|
-
> /sdd.tareas regenerar
|
|
115
|
-
|
|
116
|
-
> /sdd.analizar
|
|
117
|
-
# APROBADO
|
|
118
|
-
|
|
119
|
-
> /sdd.implementar
|
|
120
|
-
# 4 horas de implementación. Tareas en orden por fase.
|
|
121
|
-
|
|
122
|
-
> /sdd.verificar
|
|
123
|
-
> /sdd.snapshot
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## Ejemplo 4: Importar spec de Jira/Notion
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
> /sdd.importar https://mi-org.notion.site/Feature-XYZ
|
|
130
|
-
# Claude fetchea, extrae lo que puede
|
|
131
|
-
# Genera spec con secciones rellenadas
|
|
132
|
-
# Marca 5 puntos con [NECESITA_ACLARACION]
|
|
133
|
-
# Sección 99 documenta qué se importó y qué se perdió
|
|
134
|
-
|
|
135
|
-
> /sdd.aclarar
|
|
136
|
-
# Resuelves los puntos pendientes
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
## Ejemplo 5: Personalización con hook de Git
|
|
140
|
-
|
|
141
|
-
`.sdd/hooks/antes_especificar.sh`:
|
|
142
|
-
```bash
|
|
143
|
-
#!/bin/bash
|
|
144
|
-
# Verifica que estés en main antes de empezar una spec nueva
|
|
145
|
-
RAMA=$(git branch --show-current)
|
|
146
|
-
if [ "$RAMA" != "main" ]; then
|
|
147
|
-
echo "⚠️ No estás en main (estás en $RAMA)"
|
|
148
|
-
echo "¿Continuar de todos modos? (s/N)"
|
|
149
|
-
read RESP
|
|
150
|
-
[ "$RESP" != "s" ] && exit 1
|
|
151
|
-
fi
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
`.sdd/hooks/despues_implementar.sh`:
|
|
155
|
-
```bash
|
|
156
|
-
#!/bin/bash
|
|
157
|
-
# Lint + commit + push automático
|
|
158
|
-
SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json | cut -d'"' -f4)
|
|
159
|
-
|
|
160
|
-
# Lint
|
|
161
|
-
npm run lint --fix
|
|
162
|
-
|
|
163
|
-
# Commit
|
|
164
|
-
git add -A
|
|
165
|
-
git commit -m "feat: implementa ${SPEC_ID}
|
|
166
|
-
|
|
167
|
-
Spec: .sdd/especificaciones/${SPEC_ID}/spec.md
|
|
168
|
-
Plan: .sdd/especificaciones/${SPEC_ID}/plan.md
|
|
169
|
-
|
|
170
|
-
Generado con SDD-ES v2.0.0"
|
|
171
|
-
|
|
172
|
-
# Push opcional
|
|
173
|
-
read -p "¿Push a remoto? (s/N) " PUSH
|
|
174
|
-
[ "$PUSH" == "s" ] && git push origin HEAD
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
## Ejemplo 6: Solo frontend
|
|
178
|
-
|
|
179
|
-
`.sdd/sdd.config.yaml`:
|
|
180
|
-
```yaml
|
|
181
|
-
agentes:
|
|
182
|
-
arquitecto:
|
|
183
|
-
activo: true
|
|
184
|
-
modelo: opus
|
|
185
|
-
desarrollador-frontend:
|
|
186
|
-
activo: true
|
|
187
|
-
modelo: sonnet
|
|
188
|
-
tester:
|
|
189
|
-
activo: true
|
|
190
|
-
modelo: sonnet
|
|
191
|
-
revisor:
|
|
192
|
-
activo: true
|
|
193
|
-
modelo: opus
|
|
194
|
-
|
|
195
|
-
# Desactivar lo que no aplica
|
|
196
|
-
disenador-api:
|
|
197
|
-
activo: false
|
|
198
|
-
desarrollador-backend:
|
|
199
|
-
activo: false
|
|
200
|
-
asesor-datos:
|
|
201
|
-
activo: false
|
|
202
|
-
operaciones:
|
|
203
|
-
activo: false
|
|
204
|
-
critico:
|
|
205
|
-
activo: false
|
|
206
|
-
seguridad:
|
|
207
|
-
activo: false
|
|
208
|
-
documentador:
|
|
209
|
-
activo: false
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
El plugin solo invoca a los activos, ahorrando tokens y tiempo.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|