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.
Files changed (95) hide show
  1. package/.claude/settings.json +21 -45
  2. package/LICENSE +21 -0
  3. package/README.md +51 -21
  4. package/agents/architecture-designer.md +174 -0
  5. package/agents/arquitecto.md +16 -1
  6. package/agents/asesor-datos.md +15 -1
  7. package/agents/critico.md +37 -1
  8. package/agents/desarrollador-backend.md +3 -1
  9. package/agents/desarrollador-frontend.md +3 -1
  10. package/agents/disenador-api.md +13 -1
  11. package/agents/documentador.md +3 -1
  12. package/agents/investigador.md +3 -1
  13. package/agents/operaciones.md +3 -1
  14. package/agents/product-designer.md +232 -0
  15. package/agents/revisor.md +25 -1
  16. package/agents/seguridad.md +5 -1
  17. package/agents/tester.md +3 -1
  18. package/claude-hooks/agent-memory.js +154 -0
  19. package/cli/index.js +1 -2
  20. package/commands/sdd.analizar.md +23 -2
  21. package/commands/sdd.compliance.md +516 -0
  22. package/commands/sdd.configurar.md +33 -0
  23. package/commands/sdd.constitucion.md +198 -23
  24. package/commands/sdd.construir.md +210 -0
  25. package/commands/sdd.dise/303/261ar.md +188 -0
  26. package/commands/sdd.estado.md +68 -1
  27. package/commands/sdd.exportar.md +344 -0
  28. package/commands/sdd.implementar.md +203 -23
  29. package/commands/sdd.interpretar.md +239 -0
  30. package/commands/sdd.md +70 -1
  31. package/commands/sdd.optimizar.md +164 -0
  32. package/commands/sdd.planificar.md +64 -0
  33. package/commands/sdd.verificar.md +10 -0
  34. package/craft/accessibility-baseline.md +216 -0
  35. package/craft/anti-ai-slop.md +158 -0
  36. package/craft/color.md +160 -0
  37. package/craft/typography.md +121 -0
  38. package/design-systems/bold-brutalist/DESIGN.md +239 -0
  39. package/design-systems/editorial-minimal/DESIGN.md +205 -0
  40. package/design-systems/neutral-modern/DESIGN.md +227 -0
  41. package/design-systems/vibrant-consumer/DESIGN.md +257 -0
  42. package/design-systems/warm-editorial/DESIGN.md +221 -0
  43. package/docs/AGENTES.md +4 -1
  44. package/docs/FABRICA.md +164 -115
  45. package/docs/MEMORIA-Y-OBSERVABILIDAD.md +237 -0
  46. package/docs/MODELOS.md +3 -0
  47. package/docs/QUE-PASA-SI-FALLA.md +404 -0
  48. package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
  49. package/package.json +5 -3
  50. package/skills/cache-audit/SKILL.md +163 -0
  51. package/skills/critica-diseno/SKILL.md +193 -0
  52. package/skills/descubrir-idea/SKILL.md +133 -0
  53. package/skills/effort-router/SKILL.md +128 -0
  54. package/skills/elegir-direccion/SKILL.md +184 -0
  55. package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
  56. package/skills/github-connect/INDEX.md +223 -0
  57. package/skills/github-connect/INTEGRATION.md +361 -0
  58. package/skills/github-connect/QUICK-START.md +168 -0
  59. package/skills/github-connect/README.md +414 -0
  60. package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
  61. package/skills/github-connect/SKILL.md +343 -0
  62. package/skills/github-connect/STRUCTURE.txt +252 -0
  63. package/skills/github-connect/example-config.yaml +41 -0
  64. package/skills/github-connect/github-connect.sh +419 -0
  65. package/skills/interpretar-idea/SKILL.md +254 -0
  66. package/skills/memory-compactor/SKILL.md +114 -0
  67. package/skills/modo-guiado/SKILL.md +12 -2
  68. package/skills/observabilidad-consumo/SKILL.md +164 -0
  69. package/skills/token-budget/SKILL.md +154 -0
  70. package/skills/vercel-deploy/00-START-HERE.txt +364 -0
  71. package/skills/vercel-deploy/CHECKLIST.md +205 -0
  72. package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
  73. package/skills/vercel-deploy/FLOW.txt +334 -0
  74. package/skills/vercel-deploy/INDEX.md +276 -0
  75. package/skills/vercel-deploy/INTEGRATION.md +328 -0
  76. package/skills/vercel-deploy/MANIFEST.md +310 -0
  77. package/skills/vercel-deploy/README.md +65 -0
  78. package/skills/vercel-deploy/SKILL.md +356 -0
  79. package/skills/vercel-deploy/deploy.sh +298 -0
  80. package/skills/vercel-deploy/estado.json.example +205 -0
  81. package/skills/vercel-deploy/skill.yaml +323 -0
  82. package/skills/vercel-deploy/vercel-deploy.sh +216 -0
  83. package/skills/wireframe-mvp/SKILL.md +157 -0
  84. package/.claude-plugin/marketplace.json +0 -31
  85. package/.claude-plugin/plugin.json +0 -97
  86. package/docs/EJEMPLO-PRACTICA.md +0 -383
  87. package/docs/EJEMPLOS.md +0 -212
  88. /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
  89. /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
  90. /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
  91. /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
  92. /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
  93. /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
  94. /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
  95. /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
@@ -42,11 +42,94 @@ cat .sdd/memoria/constitucion.md
42
42
  | `fase A` | **Por fase**: solo las tareas de la Fase A |
43
43
  | `revisar` | **Revisión**: invocar revisor sobre tareas completadas |
44
44
 
45
- ## PASO 3 — Crear TODO list para visualización
45
+ ## PASO 3 — Gate Humano (aprobación antes de ejecutar)
46
+
47
+ Antes de tocar cualquier archivo, muestra este resumen al usuario y espera confirmación:
48
+
49
+ ```
50
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
51
+ 🏗️ PLAN DE IMPLEMENTACIÓN — {SPEC_ID}
52
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
53
+
54
+ 📋 Tareas en cola: [N] tareas
55
+ 🤖 Agentes que activarán: [lista única de agentes]
56
+ 📁 Archivos a modificar: [lista de rutas, deducida de tareas.md]
57
+ ⏱️ Tiempo estimado: [S: <15min / M: 15-45min / L: >45min]
58
+ 💡 Modo de ejecución: [PTC paralelo / Secuencial]
59
+
60
+ ⚡ Nivel de esfuerzo recomendado: [según agentes activos]
61
+ • Si hay agentes OPUS (arquitecto/critico/seguridad/asesor-datos):
62
+ Escribe `/effort xhigh` en Claude Code antes de responder sí.
63
+ • Si solo hay agentes SONNET: `/effort medium` (o el default está bien)
64
+ • Si solo hay agentes HAIKU: `/effort low`
65
+ Puedes ignorar esto si ya lo configuraste o si prefieres el default.
66
+
67
+ ¿Procedo con la implementación?
68
+ → Responde **sí** para comenzar
69
+ → Responde **editar** para ajustar tareas antes
70
+ → Responde **cancelar** para salir
71
+ ```
72
+
73
+ **Bypass automático** (no pide confirmación) cuando:
74
+ - La variable de entorno `SDD_AUTO=1` está definida
75
+ - El argumento incluye la palabra `forzar` (ej: `/sdd.implementar forzar`)
76
+ - El modo es `continuar` (ya hubo confirmación previa)
77
+
78
+ Si el usuario responde `editar` → detente y ofrece abrir `tareas.md` con un editor.
79
+ Si responde `cancelar` → detente con mensaje: "Implementación cancelada. Cuando quieras continuar: `/sdd.implementar`"
80
+
81
+ ## PASO 3.5 — Crear TODO list para visualización
46
82
 
47
83
  Usa `TodoWrite` para mostrar el progreso en tiempo real al usuario. Crea un TODO por tarea pendiente.
48
84
 
49
- ## PASO 3.5Planificación PTC (Programmatic Tool Calling)
85
+ ## PASO 4Model routing (asignación de modelo por agente)
86
+
87
+ Antes de despachar cada agente, aplica esta tabla de routing. El modelo correcto se inyecta en el prompt del agente:
88
+
89
+ ```
90
+ ROUTING DE MODELOS:
91
+
92
+ Grupo OPUS (decisiones de alto impacto, razonamiento extendido):
93
+ → arquitecto, critico, seguridad, asesor-datos
94
+ → Modelo: claude-opus-4-8
95
+
96
+ Grupo SONNET (implementación estándar, análisis medio):
97
+ → desarrollador-backend, desarrollador-frontend, tester
98
+ → desarrollador-mobile, operaciones, disenador-api, revisor
99
+ → Modelo: claude-sonnet-4-6
100
+
101
+ Grupo HAIKU (búsqueda, resumen, tareas de baja complejidad):
102
+ → investigador, documentador
103
+ → Modelo: claude-haiku-4-5-20251001
104
+
105
+ Override: si userConfig.modelo_principal está definido en plugin.json,
106
+ aplícalo solo al Grupo OPUS (respeta preferencia del usuario para
107
+ decisiones críticas sin afectar el costo de tareas rutinarias).
108
+ ```
109
+
110
+ ## PASO 4.5 — Planificación PTC (Programmatic Tool Calling) + revisión paralela
111
+
112
+ Antes de ejecutar, clasifica las tareas seleccionadas según la skill `orquestacion-ptc`.
113
+
114
+ **Revisión paralela post-implementación (B3):** Al terminar todas las tareas de implementación, si la spec toca áreas sensibles (auth, datos, APIs externas, seguridad), despacha revisor + crítico + seguridad en paralelo con PTC — los tres reciben el mismo diff y sus reportes se agregan en el reporte final. Esto es más barato que invocarlos secuencialmente.
115
+
116
+ ```javascript
117
+ // PTC revisión paralela (solo si la spec toca áreas sensibles)
118
+ const revisores = [
119
+ { agente: "revisor", prompt: promptRevision(diff, spec, plan) },
120
+ { agente: "critico", prompt: promptCritico(diff, spec, plan) },
121
+ { agente: "seguridad", prompt: promptSeguridad(diff, spec) },
122
+ ];
123
+ const reportes = await Promise.all(
124
+ revisores.map(r => Task(r.agente, r.prompt))
125
+ );
126
+ // Agregar solo veredictos + hallazgos bloqueantes
127
+ return reportes.map((r, i) => ({
128
+ agente: revisores[i].agente,
129
+ veredicto: r.veredicto, // APROBADO | OBSERVACIONES | RECHAZADO
130
+ bloqueantes: r.bloqueantes, // array de strings, vacío si no hay
131
+ }));
132
+ ```
50
133
 
51
134
  Antes de ejecutar, clasifica las tareas seleccionadas según la skill `orquestacion-ptc`:
52
135
 
@@ -95,11 +178,11 @@ Tras el bloque PTC, **procesa las tareas del siguiente nivel del grafo** de form
95
178
 
96
179
  ---
97
180
 
98
- ## PASO 4 — Ciclo por tarea
181
+ ## PASO 5 — Ciclo por tarea
99
182
 
100
183
  Para CADA tarea seleccionada, ejecuta este ciclo:
101
184
 
102
- ### 4.1 — Verificar precondiciones
185
+ ### 5.1 — Verificar precondiciones
103
186
 
104
187
  ```bash
105
188
  # La tarea no debe estar completada/bloqueada
@@ -109,7 +192,7 @@ Para CADA tarea seleccionada, ejecuta este ciclo:
109
192
  Si una dependencia no está completa:
110
193
  > ⏸️ T00X depende de T00Y (no completada). Cambio el orden y ejecuto T00Y primero.
111
194
 
112
- ### 4.2 — Anunciar inicio
195
+ ### 5.2 — Anunciar inicio
113
196
 
114
197
  ```
115
198
  🔧 T00X — [Nombre]
@@ -121,13 +204,13 @@ Si una dependencia no está completa:
121
204
 
122
205
  Marca la tarea como `en_progreso` en `.estado-tareas.json` y actualiza el TodoWrite.
123
206
 
124
- ### 4.3 — Hook por tarea (opcional)
207
+ ### 5.3 — Hook por tarea (opcional)
125
208
 
126
209
  ```bash
127
210
  [ -f ".sdd/hooks/antes_cada_tarea.sh" ] && bash .sdd/hooks/antes_cada_tarea.sh "$TAREA_ID"
128
211
  ```
129
212
 
130
- ### 4.4 — Activar MCP de Figma si la tarea es de UI/frontend
213
+ ### 5.4 — Activar MCP de Figma si la tarea es de UI/frontend
131
214
 
132
215
  **Antes de delegar al agente frontend**, verifica si la tarea es de tipo UI:
133
216
 
@@ -154,7 +237,7 @@ SI el agente NO es frontend → salta este paso
154
237
 
155
238
  > **Sin PAT / sin Figma:** Si `FIGMA_PAT` no está definido o la conexión falla, continúa sin el MCP — no bloquea la implementación.
156
239
 
157
- ### 4.5 — Constitutional AI pre-check
240
+ ### 5.5 — Constitutional AI pre-check
158
241
 
159
242
  Antes de delegar al agente, extrae las restricciones de constitución relevantes para la tarea:
160
243
 
@@ -173,7 +256,7 @@ esac
173
256
 
174
257
  Inyecta el resultado en el contexto del agente como **restricciones explícitas**, no como contexto de fondo.
175
258
 
176
- ### 4.6 — Delegar al agente
259
+ ### 5.6 — Delegar al agente
177
260
 
178
261
  Usa la herramienta `Task` para invocar al agente asignado. El agente recibe:
179
262
 
@@ -194,7 +277,7 @@ El agente debe:
194
277
  6. Devolver lista de archivos modificados
195
278
  7. **NUNCA modificar `package.json` ni instalar paquetes** salvo que la spec lo indique de forma explícita — usar exclusivamente las dependencias ya presentes en el proyecto
196
279
 
197
- ### 4.6 — Checkpoint de salida por tarea
280
+ ### 5.7 — Checkpoint de salida + Evaluator-Optimizer
198
281
 
199
282
  Antes de marcar la tarea como completada, verifica en dos niveles:
200
283
 
@@ -219,6 +302,35 @@ Antes de marcar la tarea como completada, verifica en dos niveles:
219
302
  # Python: python -m pytest [directorio_afectado] -q
220
303
  ```
221
304
 
305
+ **Nivel 4 — Evaluator-Optimizer (solo para agentes del Grupo OPUS: arquitecto, critico, seguridad, asesor-datos)**
306
+
307
+ Si el agente de la tarea es del Grupo OPUS, activa el ciclo Evaluador-Optimizador:
308
+
309
+ ```
310
+ CICLO EVALUADOR-OPTIMIZADOR (máx. 3 iteraciones):
311
+
312
+ 1. El agente implementador entrega su output (iteración actual)
313
+
314
+ 2. El agente REVISOR evalúa el output contra los CAs de la tarea:
315
+ - Puntúa cada CA de 0 a 10
316
+ - Score final = promedio
317
+ - Umbral de aprobación: 8/10
318
+
319
+ 3. Si score ≥ 8 → PASA directamente (el output es aceptable)
320
+
321
+ 4. Si score < 8 e iteraciones < 3:
322
+ - El revisor devuelve feedback específico al agente implementador
323
+ - El agente implementador mejora el output incorporando el feedback
324
+ - Repetir desde paso 2
325
+
326
+ 5. Si score < 8 tras la 3ª iteración:
327
+ → FALLA con reporte detallado (score, CAs que no pasan, razón)
328
+ → No se hacen más intentos automáticos
329
+
330
+ Importante: el ciclo NO se aplica a agentes del Grupo SONNET ni HAIKU
331
+ para evitar consumo excesivo de tokens en tareas rutinarias.
332
+ ```
333
+
222
334
  Si cualquier nivel falla:
223
335
  1. Marca como `bloqueada` con descripción del fallo
224
336
  2. **NO continúa con tareas dependientes**
@@ -230,7 +342,7 @@ Si cualquier nivel falla:
230
342
  > b) Saltar y continuar (no recomendado)
231
343
  > c) Detener y revisar manualmente
232
344
 
233
- ### 4.7 — Actualizar estado
345
+ ### 5.8 — Actualizar estado
234
346
 
235
347
  ```bash
236
348
  # .estado-tareas.json: T00X → completada
@@ -238,13 +350,13 @@ Si cualquier nivel falla:
238
350
  # .sdd/estado.json: ultima_actualizacion
239
351
  ```
240
352
 
241
- ### 4.8 — Hook post-tarea (opcional)
353
+ ### 5.9 — Hook post-tarea (opcional)
242
354
 
243
355
  ```bash
244
356
  [ -f ".sdd/hooks/despues_cada_tarea.sh" ] && bash .sdd/hooks/despues_cada_tarea.sh "$TAREA_ID"
245
357
  ```
246
358
 
247
- ### 4.9 — Reportar
359
+ ### 5.10 — Reportar
248
360
 
249
361
  ```
250
362
  ✅ T00X completada
@@ -255,13 +367,13 @@ Si cualquier nivel falla:
255
367
 
256
368
  ## VALIDACIÓN DE SALIDA
257
369
 
258
- El checkpoint de salida se aplica por tarea (ver paso 4.6tres niveles: criterio de tarea, artefactos esperados, no regresión). Al final de todas las tareas, la validación global se ejecuta en el PASO 5 mediante el revisor y la suite de tests completa.
370
+ El checkpoint de salida se aplica por tarea (ver paso 5.7cuatro niveles: criterio de tarea, artefactos esperados, no regresión, Evaluator-Optimizer para agentes OPUS). Al final de todas las tareas, la validación global se ejecuta en el PASO 6 mediante el revisor y la suite de tests completa.
259
371
 
260
372
  **Condición de bloqueo**: si cualquier checkpoint individual falla y el usuario no elige continuar explícitamente, la implementación se detiene y no avanza a `/sdd.verificar`.
261
373
 
262
- ## PASO 5 — Al terminar todas las tareas
374
+ ## PASO 6 — Al terminar todas las tareas
263
375
 
264
- ### 5.1 — Invocar revisor
376
+ ### 6.1 — Invocar revisor
265
377
 
266
378
  ```bash
267
379
  # Usar el agente revisor con modelo de su config (recomendado: opus)
@@ -272,7 +384,7 @@ El revisor cruza el código generado contra:
272
384
  - Las decisiones del plan
273
385
  - Los principios de la constitución
274
386
 
275
- ### 5.2 — Invocar tester para correr toda la suite
387
+ ### 6.2 — Invocar tester para correr toda la suite
276
388
 
277
389
  ```bash
278
390
  # Detectar framework de tests automáticamente y correr
@@ -284,11 +396,11 @@ npm test 2>/dev/null || pnpm test 2>/dev/null || yarn test 2>/dev/null || \
284
396
  echo "NO_FRAMEWORK_DETECTADO"
285
397
  ```
286
398
 
287
- ### 5.3 — Invocar seguridad (si la tarea tocaba área sensible)
399
+ ### 6.3 — Invocar seguridad (si la tarea tocaba área sensible)
288
400
 
289
401
  Auditoría automática si la implementación tocó: autenticación, manejo de datos personales, queries dinámicas, APIs externas, manejo de archivos.
290
402
 
291
- ## PASO 6 — Reporte final exhaustivo
403
+ ## PASO 7 — Reporte final exhaustivo
292
404
 
293
405
  ```markdown
294
406
  ## 📊 Implementación Completada: {ID}
@@ -342,7 +454,7 @@ Cubre: {Lista de CAs}
342
454
  ```
343
455
  ```
344
456
 
345
- ## PASO 7 — Actualizar estado global
457
+ ## PASO 8 — Actualizar estado global
346
458
 
347
459
  ```json
348
460
  {
@@ -356,13 +468,81 @@ Cubre: {Lista de CAs}
356
468
  }
357
469
  ```
358
470
 
359
- ## PASO 8 — Hook post-ejecución
471
+ ## PASO 9 — Hook post-ejecución
360
472
 
361
473
  ```bash
362
474
  [ -f ".sdd/hooks/despues_implementar.sh" ] && bash .sdd/hooks/despues_implementar.sh
363
475
  ```
364
476
 
365
- ## PASO 9Siguientes pasos
477
+ ## PASO 10Deploy automático (si está configurado)
478
+
479
+ **Solo si perfil == "guiado" Y vercel configurado:**
480
+
481
+ ```bash
482
+ # Verificar si Vercel está configurado
483
+ if grep -q "deploy.platform: vercel" .sdd/sdd.config.yaml; then
484
+ echo ""
485
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
486
+ echo "🚀 DESPLIEGUE AUTOMÁTICO"
487
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
488
+ echo ""
489
+ echo "✅ Tu app está lista para internet."
490
+ echo ""
491
+ echo "CHECKLIST PRE-DEPLOY:"
492
+ echo " ✅ Código construido y verificado"
493
+ echo " ✅ Tests pasando"
494
+ echo " ✅ Sin secretos en el código"
495
+ echo ""
496
+ echo "¿Publico tu app en internet?"
497
+ echo "(Responde: sí / cambio algo / después)"
498
+ echo ""
499
+
500
+ read -p "Tu respuesta: " DEPLOY_CHOICE
501
+
502
+ if [ "$DEPLOY_CHOICE" = "sí" ]; then
503
+ echo ""
504
+ echo "⏳ Publicando en Vercel..."
505
+ echo ""
506
+
507
+ # Invocar skill vercel-deploy
508
+ bash "$(dirname "$0")/../skills/vercel-deploy/vercel-deploy.sh" \
509
+ --spec-id "$SPEC_ID" \
510
+ --profile "guiado"
511
+
512
+ if [ $? -eq 0 ]; then
513
+ echo ""
514
+ echo "✅ ¡Tu app está en internet!"
515
+ echo ""
516
+ # Leer URL del archivo de estado de Vercel
517
+ VERCEL_URL=$(grep "app_url" .sdd/.vercel-deploy.json 2>/dev/null | cut -d'"' -f4)
518
+ if [ -n "$VERCEL_URL" ]; then
519
+ echo " Acceso: $VERCEL_URL"
520
+ echo ""
521
+ echo "Puedes compartir este link con quien quieras."
522
+ fi
523
+ else
524
+ echo ""
525
+ echo "⚠️ Hubo un problema publicando."
526
+ echo ""
527
+ echo "Opciones:"
528
+ echo " 1. Reintentar: /sdd.desplegar"
529
+ echo " 2. Cambiar algo: edita y ejecuta /sdd.implementar continuar"
530
+ echo " 3. Dejar para después: los cambios están en GitHub"
531
+ fi
532
+ elif [ "$DEPLOY_CHOICE" = "cambio algo" ]; then
533
+ echo ""
534
+ echo "✅ Esos cambios se guardarán automáticamente."
535
+ echo "Cuando estés listo, ejecuta: /sdd.implementar continuar"
536
+ else
537
+ echo ""
538
+ echo "✅ Sin problema. Cuando quieras publicar, ejecuta: /sdd.desplegar"
539
+ fi
540
+ fi
541
+ ```
542
+
543
+ ---
544
+
545
+ ## PASO 11 — Siguientes pasos
366
546
 
367
547
  ```
368
548
  🎉 Implementación terminada
@@ -370,7 +550,7 @@ Cubre: {Lista de CAs}
370
550
  SIGUIENTES PASOS RECOMENDADOS:
371
551
  /sdd.verificar — verificación final contra spec original
372
552
  /sdd.snapshot — actualizar SNAPSHOT.md del producto
373
- (commit a tu sistema de control de versiones manualmente)
553
+ /sdd.retro — retrospectiva: qué aprendimos
374
554
 
375
555
  ¿Quieres empezar otra feature?
376
556
  /sdd.especificar [descripción]
@@ -0,0 +1,239 @@
1
+ ---
2
+ description: Punto de entrada de FORGE. Convierte una idea en texto libre a un IR JSON validado. Orquesta discovery + interpreter + validación. Primer comando para cualquier proyecto nuevo.
3
+ allowed-tools: Read, Write, Bash
4
+ ---
5
+
6
+ # /sdd.interpretar — Entrada a FORGE
7
+
8
+ **Uso:**
9
+ ```
10
+ /sdd.interpretar [idea en texto libre]
11
+ ```
12
+
13
+ **Ejemplos:**
14
+ ```
15
+ /sdd.interpretar Quiero una app para que mis clientes reserven citas
16
+ /sdd.interpretar Necesito algo para organizar los pedidos de mi restaurante
17
+ /sdd.interpretar Plataforma de cursos online con pagos y certificados
18
+ /sdd.interpretar confirmar
19
+ /sdd.interpretar corregir "es para múltiples negocios, no solo uno"
20
+ ```
21
+
22
+ ---
23
+
24
+ ## PASO 1 — Detectar modo de invocación
25
+
26
+ ```bash
27
+ ARGS="$*"
28
+ ```
29
+
30
+ Detecta el caso:
31
+
32
+ | Argumento | Modo |
33
+ |-----------|------|
34
+ | `confirmar` o `sí` | Confirmar IR pendiente → guardar |
35
+ | `corregir [qué]` | Corregir campo del IR pendiente |
36
+ | `ver` | Mostrar IR actual en `.sdd/ir.json` |
37
+ | `[texto libre]` | Nueva idea → flujo completo |
38
+ | *(vacío)* | Pedir que escriba su idea |
39
+
40
+ ---
41
+
42
+ ## PASO 2 — Si es texto libre: flujo completo
43
+
44
+ ### 2.1 — Verificar si hay IR anterior
45
+
46
+ ```bash
47
+ if [ -f ".sdd/ir.json" ]; then
48
+ echo "HAY_IR_ANTERIOR"
49
+ cat .sdd/ir.json | grep '"name"' | head -1
50
+ fi
51
+ ```
52
+
53
+ Si hay IR anterior, pregunta:
54
+ ```
55
+ Ya tienes un proyecto en curso: [product.name]
56
+
57
+ ¿Qué quieres hacer?
58
+ 1) Continuar con ese proyecto → escribe /sdd.diseñar
59
+ 2) Actualizar la idea de ese proyecto → escribe /sdd.interpretar corregir [qué]
60
+ 3) Empezar un proyecto nuevo → escribe /sdd.interpretar nuevo [idea]
61
+ ```
62
+
63
+ Si no hay IR anterior, continúa.
64
+
65
+ ### 2.2 — Crear carpeta .sdd/
66
+
67
+ ```bash
68
+ mkdir -p .sdd
69
+ ```
70
+
71
+ ### 2.3 — Invocar skill `descubrir-idea`
72
+
73
+ Activa la skill de discovery. La skill hace las 5 preguntas y guarda `.sdd/descubrimiento.md`.
74
+
75
+ Después de que el usuario responda las 5 preguntas, continúa al paso 2.4.
76
+
77
+ ### 2.4 — Invocar skill `interpretar-idea`
78
+
79
+ Activa la skill con la idea original del usuario + contexto de `.sdd/descubrimiento.md`.
80
+
81
+ La skill genera el IR JSON en 2 fases (razonamiento libre + extracción JSON) y lo muestra al usuario.
82
+
83
+ **Si la skill requiere clarificación** (`confidence < 0.7`): el usuario responde la pregunta, y la skill re-genera el IR. Luego continúa.
84
+
85
+ ---
86
+
87
+ ## PASO 3 — Si es `confirmar` o `sí`
88
+
89
+ ```bash
90
+ # Verificar que hay un IR pendiente de confirmar
91
+ if [ ! -f ".sdd/ir-pendiente.json" ] && [ ! -f ".sdd/ir.json" ]; then
92
+ echo "No hay ningún IR pendiente. Escribe tu idea primero:"
93
+ echo " /sdd.interpretar [tu idea]"
94
+ exit 0
95
+ fi
96
+ ```
97
+
98
+ Guarda el IR:
99
+
100
+ ```bash
101
+ cp .sdd/ir-pendiente.json .sdd/ir.json 2>/dev/null || true
102
+ ```
103
+
104
+ Actualiza `.sdd/estado.json`:
105
+
106
+ ```bash
107
+ # Leer estado actual o crear si no existe
108
+ if [ -f ".sdd/estado.json" ]; then
109
+ # Agregar campo ir_generado: true
110
+ node -e "
111
+ const fs = require('fs');
112
+ const estado = JSON.parse(fs.readFileSync('.sdd/estado.json', 'utf8'));
113
+ estado.ir_generado = true;
114
+ estado.ir_id = JSON.parse(fs.readFileSync('.sdd/ir.json', 'utf8')).id;
115
+ estado.ultima_actualizacion = new Date().toISOString();
116
+ fs.writeFileSync('.sdd/estado.json', JSON.stringify(estado, null, 2));
117
+ " 2>/dev/null || echo "{ \"ir_generado\": true, \"ultima_actualizacion\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\" }" > .sdd/estado.json
118
+ fi
119
+ ```
120
+
121
+ Muestra confirmación y siguiente paso:
122
+
123
+ ```
124
+ ✅ IR guardado en .sdd/ir.json
125
+
126
+ Siguiente paso → Diseño de pantallas y arquitectura:
127
+ /sdd.diseñar
128
+
129
+ O si quieres ir directo al código (diseño automático):
130
+ /sdd.construir
131
+ ```
132
+
133
+ ---
134
+
135
+ ## PASO 4 — Si es `corregir [qué]`
136
+
137
+ Extrae la corrección del argumento. Por ejemplo:
138
+ - `/sdd.interpretar corregir "es para múltiples negocios"` → actualizar `product.target_users` y/o `assumptions`
139
+
140
+ Lee el IR actual:
141
+
142
+ ```bash
143
+ cat .sdd/ir.json 2>/dev/null || cat .sdd/ir-pendiente.json 2>/dev/null
144
+ ```
145
+
146
+ Aplica la corrección al campo correspondiente del IR. Re-valida. Muestra el IR actualizado y pide confirmación de nuevo.
147
+
148
+ ---
149
+
150
+ ## PASO 5 — Si es `ver`
151
+
152
+ ```bash
153
+ cat .sdd/ir.json 2>/dev/null || echo "No hay IR guardado todavía."
154
+ ```
155
+
156
+ Muestra el IR en formato legible (igual que la skill `interpretar-idea`).
157
+
158
+ ---
159
+
160
+ ## PASO 6 — Si argumento vacío
161
+
162
+ ```
163
+ ¿Cuál es tu idea?
164
+
165
+ Cuéntamela en una frase o párrafo. No te preocupes por el formato.
166
+
167
+ Ejemplos:
168
+ /sdd.interpretar Quiero una app para gestionar turnos de mi peluquería
169
+ /sdd.interpretar Sistema para que mis empleados registren sus horas de trabajo
170
+ /sdd.interpretar Marketplace de servicios para freelancers
171
+ ```
172
+
173
+ ---
174
+
175
+ ## Estructura de archivos generados
176
+
177
+ ```
178
+ .sdd/
179
+ descubrimiento.md ← Respuestas del discovery (5 preguntas)
180
+ ir-analysis.md ← Análisis libre de la Fase A del Interpreter
181
+ ir-pendiente.json ← IR generado, esperando confirmación del usuario
182
+ ir.json ← IR confirmado (se crea solo tras "confirmar")
183
+ estado.json ← Estado global del proyecto (ir_generado: true)
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Integración con el pipeline
189
+
190
+ Después de `/sdd.interpretar confirmar`:
191
+
192
+ ```
193
+ /sdd.diseñar → Diseña pantallas, elige dirección visual, genera wireframe
194
+ /sdd.construir → Pipeline completo: diseño + spec + plan + tareas + código
195
+ /sdd.estado → Ver estado actual del proyecto
196
+ ```
197
+
198
+ ---
199
+
200
+ ## Opciones avanzadas
201
+
202
+ ### Modo silencioso (sin discovery)
203
+
204
+ Si el usuario ya dio suficiente contexto en la idea:
205
+
206
+ ```
207
+ /sdd.interpretar --rapido [idea detallada]
208
+ ```
209
+
210
+ Salta el discovery y va directo al Interpreter.
211
+
212
+ ### Actualizar proyecto existente
213
+
214
+ ```
215
+ /sdd.interpretar actualizar "quiero agregar pagos en línea"
216
+ ```
217
+
218
+ 1. Lee IR actual
219
+ 2. Interpreta el cambio
220
+ 3. Fusiona (agrega feature, actualiza assumptions)
221
+ 4. Re-valida y pide confirmación
222
+
223
+ ### Nuevo proyecto (ignorar IR anterior)
224
+
225
+ ```
226
+ /sdd.interpretar nuevo [idea]
227
+ ```
228
+
229
+ Archiva el IR anterior en `.sdd/ir-anterior-[timestamp].json` y empieza desde cero.
230
+
231
+ ---
232
+
233
+ ## Notas de implementación
234
+
235
+ - Este comando es el **único punto de entrada** para usuarios no técnicos
236
+ - El IR es la **fuente de verdad** del proyecto — todo lo demás se deriva de él
237
+ - La skill `descubrir-idea` y la skill `interpretar-idea` son los módulos reales — este comando las orquesta
238
+ - Si el usuario dice "sí" o "confirmar" en cualquier momento durante el flujo, se guarda el IR actual
239
+ - El modelo **nunca inventa** datos del usuario — todo en `assumptions[]` debe ser explícito
package/commands/sdd.md CHANGED
@@ -20,6 +20,24 @@ else
20
20
  fi
21
21
  ```
22
22
 
23
+ ## PASO 1.2 — Detectar modo de output
24
+
25
+ Si el argumento del comando contiene un modo de output (`pm`, `arq`, `dev`), actívalo globalmente para esta sesión:
26
+
27
+ | Argumento | Modo | Descripción |
28
+ |-----------|------|-------------|
29
+ | `pm` o `producto` | **Product Manager** | Lenguaje de negocio, sin código, bullets ejecutivos. Oculta detalles técnicos. |
30
+ | `arq` o `arquitectura` | **Arquitecto** | Diagramas, decisiones técnicas, trade-offs. Para revisiones de diseño. |
31
+ | `dev` o `desarrollo` | **Desarrollador** | Código, diffs, comandos. Modo por defecto. |
32
+
33
+ Ejemplos:
34
+ - `/sdd.estado pm` → dashboard en lenguaje de negocio
35
+ - `/sdd.verificar arq` → reporte técnico con diagramas
36
+ - `/sdd.analizar dev` → análisis con código y rutas de archivo
37
+
38
+ El modo se guarda en `MODO_OUTPUT` y lo usan todos los comandos que producen reportes.
39
+ Si no se especifica, usa `dev` (comportamiento actual).
40
+
23
41
  ## PASO 1.5 — Detectar el perfil y ajustar el modo de conducción
24
42
 
25
43
  Lee el perfil desde el estado o la configuración:
@@ -48,6 +66,11 @@ El usuario invocó este comando con argumentos en lenguaje natural. Mapea su int
48
66
 
49
67
  | Intención del usuario | Comando a ejecutar |
50
68
  |----------------------|--------------------|
69
+ | "tengo una idea", "quiero crear", "quiero construir X desde cero", "dame una app de X" | `/sdd.interpretar [idea]` |
70
+ | "interpreta mi idea", "analiza lo que quiero hacer" | `/sdd.interpretar` |
71
+ | "diseña el producto", "elige el estilo", "quiero ver el wireframe" | `/sdd.diseñar` |
72
+ | "construye todo", "haz el código completo", "pipeline completo" | `/sdd.construir` |
73
+ | "exporta el bundle", "empaqueta el proyecto" | `/sdd.exportar` |
51
74
  | "quiero inicializar", "configurar el proyecto", "empezar" | `/sdd.constitucion` |
52
75
  | "quiero crear una feature", "nueva spec", "voy a hacer X" | `/sdd.especificar [resto]` |
53
76
  | "quiero importar una spec externa" | `/sdd.importar [resto]` |
@@ -75,9 +98,45 @@ El usuario invocó este comando con argumentos en lenguaje natural. Mapea su int
75
98
  | "crea un MCP", "quiero una herramienta para Claude", "genera un servidor MCP" | `/sdd.crear-mcp [resto]` |
76
99
  | "ayuda", "qué puedes hacer" | `/sdd.ayuda` |
77
100
 
101
+ ## PASO 2.5 — Detectar IR sin spec activa (FORGE)
102
+
103
+ Si hay `.sdd/ir.json` pero NO hay spec activa, sugiere el siguiente paso del pipeline de FORGE:
104
+
105
+ ```bash
106
+ HAS_IR=$([ -f ".sdd/ir.json" ] && echo "yes" || echo "no")
107
+ HAS_DESIGN=$([ -f ".sdd/product-design.json" ] && echo "yes" || echo "no")
108
+ SPEC_ACTIVA=$(cat .sdd/estado.json 2>/dev/null | grep -o '"spec_activa": *"[^"]*"' | cut -d'"' -f4)
109
+ ```
110
+
111
+ Si `HAS_IR=yes` y sin spec activa:
112
+
113
+ > Ya tienes una idea interpretada: **[product.name]**.
114
+ >
115
+ > ¿Qué quieres hacer?
116
+ > - `/sdd.diseñar` → elegir estilo visual y generar wireframe
117
+ > - `/sdd.construir` → pipeline completo automático (diseño + código)
118
+ > - `/sdd.exportar` → empaquetar lo que hay ahora
119
+
120
+ ---
121
+
78
122
  ## PASO 3 — Si no está inicializado
79
123
 
80
- Si el proyecto NO está inicializado, no importa qué pidió el usuario responde:
124
+ Si el proyecto NO está inicializado, primero verifica si la intención del usuario es FORGE (idea → MVP):
125
+
126
+ ```bash
127
+ TIENE_IDEA=$(echo "$ARGS" | grep -iE "tengo una idea|quiero crear|quiero construir|quiero una app|necesito|idea" && echo "yes" || echo "no")
128
+ TIENE_INTERPRETAR=$(echo "$ARGS" | grep -iE "interpreta|interpretar" && echo "yes" || echo "no")
129
+ ```
130
+
131
+ **Si la intención es FORGE** (tiene idea, quiere crear algo desde cero):
132
+
133
+ > 👋 Empecemos. No necesitas inicializar nada primero.
134
+ >
135
+ > Cuéntame tu idea y FORGE la convierte en un producto.
136
+
137
+ Llama directamente a `/sdd.interpretar [idea del usuario]`. FORGE crea `.sdd/` automáticamente.
138
+
139
+ **Si la intención NO es FORGE** (quiere usar sdd-lite para una feature de código existente):
81
140
 
82
141
  > 👋 Bienvenido a SDD-ES.
83
142
  >
@@ -87,6 +146,16 @@ Si el proyecto NO está inicializado, no importa qué pidió el usuario — resp
87
146
 
88
147
  Luego llama internamente a `/sdd.constitucion`.
89
148
 
149
+ **Si no hay argumentos** (usuario escribió solo `/sdd` en proyecto no inicializado):
150
+
151
+ > 👋 Bienvenido. ¿Qué quieres hacer?
152
+ >
153
+ > **Tengo una idea y quiero construirla**
154
+ > → `/sdd.interpretar [tu idea]`
155
+ >
156
+ > **Tengo un proyecto de código y quiero especificar features**
157
+ > → `/sdd.constitucion` (configura el proyecto primero)
158
+
90
159
  ## PASO 4 — Si ya está inicializado pero hay una spec activa incompleta
91
160
 
92
161
  Lee `estado.json` y `.estado-tareas.json` de la spec activa.