sdd-es 2.0.0 → 2.6.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 (127) hide show
  1. package/.claude/settings.json +29 -29
  2. package/.claude/settings.local.json +10 -0
  3. package/.claude-plugin/marketplace.json +10 -7
  4. package/.claude-plugin/plugin.json +59 -37
  5. package/.gitignore +20 -0
  6. package/.mcp.json +8 -0
  7. package/LICENSE +21 -0
  8. package/README.md +77 -40
  9. package/agents/architecture-designer.md +211 -0
  10. package/agents/arquitecto.md +16 -1
  11. package/agents/asesor-datos.md +15 -1
  12. package/agents/critico.md +37 -1
  13. package/agents/desarrollador-backend.md +3 -1
  14. package/agents/desarrollador-frontend.md +11 -16
  15. package/agents/disenador-api.md +13 -1
  16. package/agents/documentador.md +3 -1
  17. package/agents/investigador.md +3 -1
  18. package/agents/operaciones.md +3 -1
  19. package/agents/product-designer.md +268 -0
  20. package/agents/revisor.md +25 -1
  21. package/agents/seguridad.md +5 -1
  22. package/agents/tester.md +3 -1
  23. package/claude-hooks/agent-memory.js +288 -0
  24. package/claude-hooks/pre-tool-guard.js +61 -9
  25. package/cli/index.js +1 -2
  26. package/commands/sdd.adr.md +196 -0
  27. package/commands/sdd.analizar.md +23 -2
  28. package/commands/sdd.ayuda.md +13 -0
  29. package/commands/sdd.compliance.md +521 -0
  30. package/commands/sdd.configurar.md +34 -1
  31. package/commands/sdd.constitucion.md +198 -23
  32. package/commands/sdd.construir.md +210 -0
  33. package/commands/sdd.crear-mcp.md +2 -0
  34. package/commands/sdd.defect-report.md +134 -0
  35. package/commands/sdd.descubrir.md +19 -0
  36. package/commands/sdd.dise/303/261ar.md +188 -0
  37. package/commands/sdd.estado.md +120 -3
  38. package/commands/sdd.exportar.md +344 -0
  39. package/commands/sdd.implementar.md +272 -52
  40. package/commands/sdd.interpretar.md +239 -0
  41. package/commands/sdd.md +93 -4
  42. package/commands/sdd.optimizar-memoria.md +47 -0
  43. package/commands/sdd.optimizar.md +164 -0
  44. package/commands/sdd.planificar.md +64 -0
  45. package/commands/sdd.retro.md +74 -0
  46. package/commands/sdd.verificar.md +81 -0
  47. package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
  48. package/configuracion-ejemplo/sdd.config.yaml +10 -0
  49. package/craft/accessibility-baseline.md +216 -0
  50. package/craft/anti-ai-slop.md +158 -0
  51. package/craft/color.md +160 -0
  52. package/craft/typography.md +121 -0
  53. package/design-systems/bold-brutalist/DESIGN.md +239 -0
  54. package/design-systems/editorial-minimal/DESIGN.md +205 -0
  55. package/design-systems/neutral-modern/DESIGN.md +227 -0
  56. package/design-systems/vibrant-consumer/DESIGN.md +257 -0
  57. package/design-systems/warm-editorial/DESIGN.md +221 -0
  58. package/docs/AGENTES.md +4 -1
  59. package/docs/CASO-COMPLETO.md +206 -0
  60. package/docs/EJEMPLOS.md +61 -185
  61. package/docs/FABRICA.md +163 -115
  62. package/docs/INICIO-RAPIDO.md +27 -79
  63. package/docs/MEMORIA-Y-OBSERVABILIDAD.md +239 -0
  64. package/docs/MODELOS.md +3 -0
  65. package/docs/QUE-PASA-SI-FALLA.md +404 -0
  66. package/docs/README.md +43 -0
  67. package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
  68. package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
  69. package/package.json +15 -10
  70. package/plantillas/job-story-mejorar-prompt.md +107 -0
  71. package/presets/enterprise.yaml +6 -0
  72. package/presets/lean.yaml +4 -0
  73. package/presets/startup.yaml +6 -0
  74. package/skills/adr-indexer/SKILL.md +181 -0
  75. package/skills/cache-audit/SKILL.md +163 -0
  76. package/skills/critica-diseno/SKILL.md +193 -0
  77. package/skills/descubrir-idea/SKILL.md +133 -0
  78. package/skills/effort-router/SKILL.md +128 -0
  79. package/skills/elegir-direccion/SKILL.md +184 -0
  80. package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
  81. package/skills/github-connect/INDEX.md +223 -0
  82. package/skills/github-connect/INTEGRATION.md +361 -0
  83. package/skills/github-connect/QUICK-START.md +168 -0
  84. package/skills/github-connect/README.md +414 -0
  85. package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
  86. package/skills/github-connect/SKILL.md +343 -0
  87. package/skills/github-connect/STRUCTURE.txt +252 -0
  88. package/skills/github-connect/example-config.yaml +41 -0
  89. package/skills/github-connect/github-connect.sh +419 -0
  90. package/skills/interpretar-idea/SKILL.md +254 -0
  91. package/skills/mejorar-prompt/SKILL.md +237 -0
  92. package/skills/memory-compactor/SKILL.md +68 -0
  93. package/skills/modo-guiado/SKILL.md +12 -2
  94. package/skills/mutation-detector/SKILL.md +134 -0
  95. package/skills/observabilidad-consumo/SKILL.md +164 -0
  96. package/skills/token-budget/SKILL.md +177 -0
  97. package/skills/vercel-deploy/00-START-HERE.txt +364 -0
  98. package/skills/vercel-deploy/CHECKLIST.md +205 -0
  99. package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
  100. package/skills/vercel-deploy/FLOW.txt +334 -0
  101. package/skills/vercel-deploy/INDEX.md +276 -0
  102. package/skills/vercel-deploy/INTEGRATION.md +328 -0
  103. package/skills/vercel-deploy/MANIFEST.md +310 -0
  104. package/skills/vercel-deploy/README.md +65 -0
  105. package/skills/vercel-deploy/SKILL.md +356 -0
  106. package/skills/vercel-deploy/deploy.sh +298 -0
  107. package/skills/vercel-deploy/estado.json.example +205 -0
  108. package/skills/vercel-deploy/skill.yaml +323 -0
  109. package/skills/vercel-deploy/vercel-deploy.sh +216 -0
  110. package/skills/wireframe-mvp/SKILL.md +157 -0
  111. package/docs/EJEMPLO-PRACTICA.md +0 -383
  112. package/mcp-figma/README.md +0 -158
  113. package/mcp-figma/package.json +0 -7
  114. package/mcp-figma/src/component-generator.js +0 -162
  115. package/mcp-figma/src/design-system-analyzer.js +0 -247
  116. package/mcp-figma/src/figma-client.js +0 -75
  117. package/mcp-figma/src/index.js +0 -114
  118. package/mcp-figma/src/mcp.js +0 -97
  119. package/mcp-figma/src/style-mapper.js +0 -85
  120. /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
  121. /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
  122. /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
  123. /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
  124. /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
  125. /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
  126. /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
  127. /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
@@ -71,28 +71,81 @@ find . -maxdepth 3 -type d \
71
71
  ls test/ tests/ __tests__/ spec/ 2>/dev/null
72
72
  ```
73
73
 
74
- ## PASO 3 — Detectar el perfil del usuario
74
+ ## PASO 3 — Detectar el perfil del usuario (AUTO-DETECCIÓN)
75
75
 
76
76
  Antes de recopilar valores, determina el **perfil** con el que se conducirá todo el flujo. Esto cambia el tono y cuánto se le pide al usuario, pero NO cambia el rigor del producto generado.
77
77
 
78
- Pregunta una sola vez (o infiérelo de cómo escribe el usuario):
78
+ **Lógica de detección automática:**
79
79
 
80
- > ¿Cómo prefieres trabajar?
81
- > **a) Guiado** no programo (o muy poco). Quiero que tú decidas lo técnico y me expliques en palabras simples. Tú eliges el stack.
82
- > **b) Experto** programar. Quiero control del stack y de las decisiones técnicas.
80
+ ```bash
81
+ # Capturar descripción del usuario (si viene en parámetros o preguntarla)
82
+ USER_INPUT="$(echo "$1" | tr '[:upper:]' '[:lower:]')"
83
+
84
+ # Palabras clave = "guiado" (usuario describe funcionalidad)
85
+ GUIADO_KEYWORDS="app|web|sitio|herramienta|bot|automatización|tienda|lista|formulario|chat|galería|blog|carrito|perfil|dashboard"
86
+
87
+ # Palabras clave = "experto" (usuario menciona tecnología)
88
+ EXPERTO_KEYWORDS="react|vue|angular|typescript|node|python|rust|go|java|fastapi|django|postgres|mysql|mongodb|docker|kubernetes|nextjs|nestjs|express"
89
+
90
+ # Contar coincidencias
91
+ GUIADO_COUNT=$(echo "$USER_INPUT" | grep -io "\(${GUIADO_KEYWORDS}\)" | wc -l)
92
+ EXPERTO_COUNT=$(echo "$USER_INPUT" | grep -io "\(${EXPERTO_KEYWORDS}\)" | wc -l)
93
+
94
+ # Decisión
95
+ if [ $GUIADO_COUNT -gt 0 ] && [ $EXPERTO_COUNT -eq 0 ]; then
96
+ PERFIL="guiado"
97
+ elif [ $EXPERTO_COUNT -gt 0 ] && [ $GUIADO_COUNT -le 1 ]; then
98
+ PERFIL="experto"
99
+ elif [ $EXPERTO_COUNT -gt 0 ] && [ $GUIADO_COUNT -gt 0 ]; then
100
+ # Perfil mixto: preguntar explícitamente
101
+ PERFIL="mixto"
102
+ echo "📋 Veo que tienes ideas técnicas además de funcionales."
103
+ echo "¿Prefieres modo EXPERTO (controlas las decisiones técnicas)"
104
+ echo "o modo GUIADO (yo las decido por ti, solo confirmas pasos)?"
105
+ read PERFIL_CHOICE
106
+ [ "$PERFIL_CHOICE" = "experto" ] && PERFIL="experto" || PERFIL="guiado"
107
+ else
108
+ # Default ante la duda
109
+ PERFIL="guiado"
110
+ fi
111
+
112
+ echo "✅ PERFIL DETECTADO: $PERFIL"
113
+ ```
114
+
115
+ **Ejemplos de detección:**
83
116
 
84
- Reglas de inferencia (si el usuario no responde explícitamente):
85
- - Señales de **guiado**: "no sé programar", "quiero una app/herramienta que…", describe el producto por su función y no por su tecnología, pide que "lo hagas tú".
86
- - Señales de **experto**: menciona lenguajes/frameworks/BD concretos, pide control de arquitectura, usa jerga técnica.
87
- - Ante la duda **guiado** (es el modo más seguro: explica más y confirma antes de actuar).
117
+ | Input usuario | Palabras clave | Perfil |
118
+ |---------------|----------------|--------|
119
+ | "una tienda donde vendo productos" | app, tienda (guiado) | **guiado** |
120
+ | "React + Node + MongoDB" | react, node, mongodb (experto) | **experto** |
121
+ | "app de chat con Python" | app (guiado) + python (experto) | **mixto** → preguntar |
122
+ | "necesito un bot que alertas" | bot (guiado) | **guiado** |
123
+ | "un formulario en Next.js" | formulario (guiado) + nextjs (experto) | **mixto** → preguntar |
88
124
 
89
125
  **En perfil `guiado`:**
90
- - El stack se **recomienda automáticamente** según el tipo de producto. NO obligues al usuario a elegir tecnología. Defaults sensatos:
91
- - "app web" / "página" / "sitio" Node + Vite + SQLite
92
- - "API" / "backend" / "servicio" → Node + Express + SQLite
93
- - "bot" / "automatización" / "script" Python
94
- - "herramienta para Claude / asistente / integración" → servidor MCP en Node (ver `/sdd.crear-mcp`)
95
- - Si no encaja, elige el más simple que cumpla y **explica en una frase por qué**.
126
+
127
+ El stack se **elige automáticamente** según lo que el usuario quiere construir. Aquí está el proceso:
128
+
129
+ 1. El usuario describe su idea EN PALABRAS SIMPLES:
130
+ - Ejemplos válidos:
131
+ - "una tienda online donde vendo mis productos artesanales"
132
+ - "una app para que mi equipo de 5 personas coordine tareas diarias"
133
+ - "un bot que me avise cuando alguien menciona mi marca en redes sociales"
134
+ - "una comunidad online donde mis clientes comparten fotos de sus compras"
135
+
136
+ 2. Recomendarás el stack AUTOMÁTICAMENTE sin que el usuario tenga que elegir. Usa estos defaults sensatos:
137
+ - "app web" / "página" / "sitio" → Node + Vite + SQLite
138
+ - "API" / "backend" / "servicio" → Node + Express + SQLite
139
+ - "bot" / "automatización" / "script" → Python
140
+ - "herramienta para Claude / asistente / integración" → servidor MCP en Node (ver `/sdd.crear-mcp`)
141
+ - Si no encaja exactamente, elige el más simple que cumpla.
142
+
143
+ 3. **Explicar la recomendación en lenguaje simple**, no técnico. Ejemplo:
144
+ - ❌ "Detectado: Node.js + Express + PostgreSQL"
145
+ - ✅ "Para tu tienda online, recomiendo: JavaScript (es el lenguaje más accesible para empezar), SQLite para guardar productos y pedidos (es gratis, confiable y no necesita instalar nada extra), y Node.js en el servidor (es lo más rápido para tener algo funcionando)."
146
+
147
+ 4. Preguntar de forma amigable: "¿Te parece bien? ¿Hay algo que quieras cambiar?"
148
+
96
149
  - Activa la skill `modo-guiado` para el resto de la conversación (lenguaje sin jerga, confirmar antes de actuar, nunca pedir que edite archivos a mano).
97
150
 
98
151
  **En perfil `experto`:** sigue el flujo técnico normal (el usuario define o confirma el stack).
@@ -106,11 +159,11 @@ Si la constitución **NO existe**, conduce una conversación corta y eficiente.
106
159
  Preguntas obligatorias (haz una a la vez, o agrupadas):
107
160
 
108
161
  1. **Propósito**: ¿Cuál es el propósito del proyecto en 1-2 frases?
109
- 2. **Audiencia**: ¿Quién consume esto? (equipo interno, usuarios externos, otro servicio)
162
+ 2. **Audiencia**: ¿Quién usa esto? (equipo interno, clientes, otros desarrolladores, etc.)
110
163
  3. **No-negociables**: ¿Qué estándares son innegociables? (tests obligatorios, sin warnings, tipado estricto, etc.)
111
164
  4. **Restricciones**: ¿Hay algo que NUNCA hay que hacer en este proyecto? (no agregar dependencias sin justificación, no romper API pública, etc.)
112
165
 
113
- > **En perfil `guiado`**, NO hagas las preguntas 3 y 4 con jerga técnica. En su lugar fija defaults profesionales por debajo (tests obligatorios, lint estricto, sin secretos en el código) y solo confirma el propósito y para quién es. Aplicas los estándares altos sin cargarle la decisión al usuario.
166
+ > **En perfil `guiado`**, NO hagas las preguntas 3 y 4 con jerga técnica. En su lugar fija defaults profesionales por debajo (tests obligatorios, lint estricto, sin secretos en el código) y solo confirma el propósito y para quién es. Aplicas los estándares altos sin cargarle la decisión al usuario. Si dice algo como "no entiendo", "explícame", o "no sé qué significa eso", **pausa inmediatamente**, explica con una analogía simple del mundo real (ve la Regla 7 en `skills/modo-guiado/SKILL.md`), y continúa.
114
167
 
115
168
  Si la constitución **YA existe**, lee los placeholders pendientes y pregunta solo por esos. Determina el tipo de cambio para el versionado:
116
169
 
@@ -120,7 +173,129 @@ Si la constitución **YA existe**, lee los placeholders pendientes y pregunta so
120
173
 
121
174
  Propón el incremento de versión y muestra el razonamiento.
122
175
 
123
- ## PASO 4 — Generar la constitución
176
+ ## PASO 4 — GitHub (solo si perfil == guiado)
177
+
178
+ **Solo en perfil `guiado`**, ofrecer de forma amigable guardar el proyecto en GitHub:
179
+
180
+ > ¿Quieres guardar tu proyecto en GitHub? Es como una nube para el código: gratis, seguro, y todos los desarrolladores lo usan. Si no ahora, puedes hacerlo después.
181
+
182
+ **Si el usuario responde que sí:**
183
+
184
+ ```bash
185
+ # PASO 4.1: Explicar token de forma amigable
186
+ echo "✅ Perfecto. Necesito un token de GitHub."
187
+ echo ""
188
+ echo "Es como una contraseña especial que te da permisos sin usar tu contraseña real."
189
+ echo "Te muestro cómo generarlo en 2 pasos muy rápidos:"
190
+ echo ""
191
+ echo "1. Ve a: https://github.com/settings/tokens?type=pat"
192
+ echo "2. Haz clic en 'Generate new token' → escoge 'Fine-grained tokens'"
193
+ echo "3. Dale permiso: 'repo' (acceso completo a repositorio)"
194
+ echo "4. Copia el token y pégalo aquí"
195
+ echo ""
196
+ read -p "Pega tu token: " GITHUB_TOKEN
197
+
198
+ # PASO 4.2: Invocar skill github-connect
199
+ echo "⏳ Creando repositorio en GitHub..."
200
+
201
+ # Guardar token en variable de entorno para la skill
202
+ export GITHUB_TOKEN="$GITHUB_TOKEN"
203
+
204
+ # Invocar skill github-connect (que maneja toda la creación + push)
205
+ bash "$(dirname "$0")/../skills/github-connect/github-connect.sh" \
206
+ --repo-name "$(basename "$(pwd)")" \
207
+ --repo-description "Proyecto SDD-ES: $(cat .sdd/memoria/constitucion.md | head -1)" \
208
+ --profile "guiado"
209
+
210
+ if [ $? -eq 0 ]; then
211
+ # Guardar URL en config
212
+ REPO_URL=$(gh repo view --json url -q .url 2>/dev/null)
213
+ echo "git.remote_url: $REPO_URL" >> .sdd/sdd.config.yaml
214
+
215
+ echo ""
216
+ echo "✅ Tu proyecto está guardado en GitHub:"
217
+ echo " $REPO_URL"
218
+ echo ""
219
+ echo "Desde ahora, cada cambio que hagas se guarda automáticamente allí."
220
+ else
221
+ echo "⚠️ Hubo un problema creando el repositorio."
222
+ echo "Puedes hacerlo después ejecutando:"
223
+ echo " /sdd.github-connect"
224
+ fi
225
+ ```
226
+
227
+ **Si el usuario responde que no:**
228
+
229
+ ```bash
230
+ echo "✅ No hay problema. Podemos hacerlo más tarde cuando lo necesites."
231
+ echo ""
232
+ echo "Si cambias de idea, ejecuta: /sdd.github-connect"
233
+ ```
234
+
235
+ ---
236
+
237
+ ## PASO 4.5 — Vercel Deploy (solo si perfil == guiado)
238
+
239
+ **Solo en perfil `guiado`**, ofrecer de forma amigable desplegar en Vercel:
240
+
241
+ > ¿Quieres que tu app esté en internet cuando esté lista?
242
+ > Vercel es como un servidor en la nube: gratis hasta cierto límite, y tu app estará accesible desde cualquier lugar.
243
+
244
+ **Si el usuario responde que sí:**
245
+
246
+ ```bash
247
+ echo "✅ Perfecto. Configuraré Vercel para ti."
248
+ echo ""
249
+ echo "Necesito un token de Vercel — es una contraseña especial (igual que GitHub)."
250
+ echo ""
251
+ echo "1. Ve a: https://vercel.com/account/tokens"
252
+ echo "2. Crea un 'Token' nuevo"
253
+ echo "3. Copia y pégalo aquí:"
254
+ echo ""
255
+ read -p "Pega tu token de Vercel: " VERCEL_TOKEN
256
+
257
+ # Guardar configuración
258
+ echo "deploy.platform: vercel" >> .sdd/sdd.config.yaml
259
+ echo "deploy.vercel_token_provided: true" >> .sdd/sdd.config.yaml
260
+
261
+ echo ""
262
+ echo "✅ Vercel está configurado."
263
+ echo "Cuando tu app esté lista, te preguntaré antes de publicarla en internet."
264
+ ```
265
+
266
+ **Si el usuario responde que no:**
267
+
268
+ ```bash
269
+ echo "✅ No hay problema. Puedes publicarla después si quieres."
270
+ echo ""
271
+ echo "Si cambias de idea, ejecuta: /sdd.configurar"
272
+ ```
273
+
274
+ ---
275
+
276
+ ## PASO 5 — Guardar perfil y configuración persistente
277
+
278
+ ```bash
279
+ # Guardar el perfil detectado en .sdd/sdd.config.yaml
280
+ # para que comandos posteriores lo respeten
281
+
282
+ echo "perfil: $PERFIL" >> .sdd/sdd.config.yaml
283
+
284
+ # Guardar en estado.json también
285
+ cat >> .sdd/estado.json << EOF
286
+ {
287
+ "perfil_detectado": "$PERFIL",
288
+ "constitucion_completada_timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
289
+ "constitucion_versión": "1.0.0"
290
+ }
291
+ EOF
292
+
293
+ echo "✅ Configuración guardada."
294
+ ```
295
+
296
+ ---
297
+
298
+ ## PASO 6 — Generar la constitución
124
299
 
125
300
  Lee la plantilla `plantillas/constitucion.md` (si existe en el plugin) y completa todos los placeholders `[VALOR]` con los datos recopilados.
126
301
 
@@ -228,7 +403,7 @@ TODOs diferidos:
228
403
  - Las decisiones técnicas no triviales se documentan como ADR en `.sdd/arquitectura/`
229
404
  ```
230
405
 
231
- ## PASO 5 — Propagación de consistencia
406
+ ## PASO 6 — Propagación de consistencia
232
407
 
233
408
  Después de actualizar la constitución, revisa estos archivos y actualiza si hay desalineación:
234
409
 
@@ -242,7 +417,7 @@ grep -l "[principio_modificado]" commands/*.md 2>/dev/null
242
417
 
243
418
  Genera el **Informe de Impacto de Sincronización** y lo prepende a la constitución como comentario HTML (ver plantilla arriba).
244
419
 
245
- ## PASO 6 — Inicializar resto de estructura SDD
420
+ ## PASO 7 — Inicializar resto de estructura SDD
246
421
 
247
422
  ```bash
248
423
  # Crear archivos índice si no existen
@@ -277,7 +452,7 @@ EOF
277
452
  EOF
278
453
  ```
279
454
 
280
- ## PASO 6.5 — Persistir el perfil en la configuración
455
+ ## PASO 7.5 — Persistir el perfil en la configuración
281
456
 
282
457
  Escribe el perfil elegido en `.sdd/sdd.config.yaml`. Si la clave `perfil:` no existe, añádela cerca del inicio del archivo; si existe, actualízala.
283
458
 
@@ -292,7 +467,7 @@ fi
292
467
 
293
468
  (Reemplaza `[PERFIL]` por `guiado` o `experto`.)
294
469
 
295
- ## PASO 7 — Actualizar estado global
470
+ ## PASO 8 — Actualizar estado global
296
471
 
297
472
  Crea o actualiza `.sdd/estado.json`:
298
473
 
@@ -321,7 +496,7 @@ if [ -f ".sdd/hooks/despues_constitucion.sh" ]; then
321
496
  fi
322
497
  ```
323
498
 
324
- ## PASO 8 — Resumen y siguiente paso
499
+ ## PASO 9 — Resumen y siguiente paso
325
500
 
326
501
  Muestra:
327
502
 
@@ -0,0 +1,210 @@
1
+ ---
2
+ description: Pipeline completo de FORGE. Si no hay IR, interpreta primero. Si no hay diseño, diseña. Luego mapea spec → planifica → tareas → implementa. Punto de entrada único para convertir una idea en código.
3
+ allowed-tools: Read, Write, Bash, Agent
4
+ ---
5
+
6
+ # /sdd.construir — Pipeline Completo
7
+
8
+ **Uso:**
9
+ ```
10
+ /sdd.construir
11
+ /sdd.construir --desde-spec ← salta directo a planificar (si ya hay spec)
12
+ /sdd.construir --solo-spec ← genera solo la spec, no continúa
13
+ /sdd.construir --forzar ← ignora checkpoints y vuelve a ejecutar todo
14
+ ```
15
+
16
+ ---
17
+
18
+ ## LÓGICA DE ENTRADA
19
+
20
+ ### Verificar estado del proyecto
21
+
22
+ ```bash
23
+ node -e "
24
+ const fs = require('fs');
25
+ const estado = JSON.parse(fs.existsSync('.sdd/estado.json') ? fs.readFileSync('.sdd/estado.json', 'utf8') : '{}');
26
+ console.log(JSON.stringify({
27
+ tiene_ir: !!estado.ir_generado && fs.existsSync('.sdd/ir.json'),
28
+ tiene_design: !!estado.product_design_aprobado && fs.existsSync('.sdd/product-design.json'),
29
+ tiene_spec: !!estado.spec_activa,
30
+ pipeline_step: estado.pipeline_step || 'inicio'
31
+ }));
32
+ "
33
+ ```
34
+
35
+ ### Árbol de decisión:
36
+
37
+ ```
38
+ ¿Tiene IR?
39
+ NO → invocar /sdd.interpretar
40
+ [esperar input del usuario]
41
+ [volver a /sdd.construir después]
42
+
43
+ SÍ → ¿Tiene ProductDesign aprobado?
44
+ NO → invocar /sdd.diseñar
45
+ [después continúa automáticamente]
46
+
47
+ SÍ → PASO 1: Mapear IR + Design → Spec draft
48
+ PASO 2: /sdd.especificar (con spec draft como base)
49
+ PASO 3: /sdd.planificar
50
+ PASO 4: /sdd.tareas
51
+ PASO 5: /sdd.implementar
52
+ ```
53
+
54
+ ---
55
+
56
+ ## PASO 1 — Mapear IR + ProductDesign → Spec Draft
57
+
58
+ ```bash
59
+ # Verificar que tenemos los inputs
60
+ if [ ! -f ".sdd/ir.json" ] || [ ! -f ".sdd/product-design.json" ]; then
61
+ echo "Error: Falta IR o ProductDesign"
62
+ exit 1
63
+ fi
64
+
65
+ # Ejecutar el mapper
66
+ node sdd-lite/core/ir-to-spec-mapper.js
67
+
68
+ # El mapper genera .sdd/spec-draft.json con:
69
+ # - user_stories[] ← de features.core del IR
70
+ # - functional_requirements[] ← de core_screens del ProductDesign
71
+ # - actors[] ← del IR
72
+ # - non_functional_requirements[]
73
+ # - out_of_scope[]
74
+ ```
75
+
76
+ Mostrar al usuario:
77
+
78
+ ```
79
+ 📋 SPEC DRAFT GENERADA
80
+ ─────────────────────────────
81
+ [N] historias de usuario (US-001 a US-00N)
82
+ [M] requerimientos funcionales (RF-001 a RF-00M)
83
+ Actores: [lista]
84
+
85
+ ¿Continuar al plan de implementación?
86
+ ↵ Enter → continuar
87
+ m → ver spec completa primero
88
+ e → editar spec antes de continuar
89
+ ```
90
+
91
+ Si `--solo-spec`, terminar aquí y sugerir `/sdd.especificar`.
92
+
93
+ ---
94
+
95
+ ## PASO 2 — Especificación
96
+
97
+ Invocar `/sdd.especificar` con la spec-draft como base:
98
+
99
+ ```bash
100
+ # El comando especificar lee .sdd/spec-draft.json si existe
101
+ # y lo usa como punto de partida en lugar de empezar de cero
102
+ /sdd.especificar
103
+ ```
104
+
105
+ Después de especificar, la spec queda en `.sdd/` en el formato de sdd-lite.
106
+
107
+ ---
108
+
109
+ ## PASO 3 — Planificar
110
+
111
+ ```bash
112
+ /sdd.planificar
113
+ ```
114
+
115
+ Genera el plan de implementación basado en la spec.
116
+
117
+ ---
118
+
119
+ ## PASO 4 — Crear Tareas
120
+
121
+ ```bash
122
+ /sdd.tareas
123
+ ```
124
+
125
+ Descompone el plan en tareas atómicas implementables.
126
+
127
+ ---
128
+
129
+ ## PASO 5 — Implementar
130
+
131
+ ```bash
132
+ /sdd.implementar
133
+ ```
134
+
135
+ Genera el código base según las tareas.
136
+
137
+ ---
138
+
139
+ ## Progreso visual
140
+
141
+ Durante la ejecución, muestra el progreso del pipeline:
142
+
143
+ ```
144
+ FORGE PIPELINE — [product.name]
145
+ ═══════════════════════════════════════
146
+ ✅ Idea interpretada (IR v1)
147
+ ✅ Diseño aprobado (3 pantallas, stack: React + Node.js + SQLite)
148
+ 🔄 Generando spec...
149
+ ⭕ Plan pendiente
150
+ ⭕ Tareas pendientes
151
+ ⭕ Implementación pendiente
152
+ ═══════════════════════════════════════
153
+ ```
154
+
155
+ Actualizar `.sdd/estado.json` después de cada paso:
156
+
157
+ ```bash
158
+ node -e "
159
+ const fs = require('fs');
160
+ const e = JSON.parse(fs.readFileSync('.sdd/estado.json', 'utf8') || '{}');
161
+ e.pipeline_step = 'spec'; // o 'plan', 'tasks', 'code', 'done'
162
+ e.ultima_actualizacion = new Date().toISOString();
163
+ fs.writeFileSync('.sdd/estado.json', JSON.stringify(e, null, 2));
164
+ "
165
+ ```
166
+
167
+ ---
168
+
169
+ ## Al terminar
170
+
171
+ ```
172
+ ═══════════════════════════════════════════
173
+ ✅ PROYECTO CONSTRUIDO
174
+ ═══════════════════════════════════════════
175
+
176
+ [product.name] está listo.
177
+
178
+ Lo que se generó:
179
+ ✅ IR → .sdd/ir.json
180
+ ✅ Diseño → .sdd/product-design.json
181
+ ✅ Wireframe → .sdd/diseño/wireframe-pantalla-principal.html
182
+ ✅ Spec → .sdd/[spec].md
183
+ ✅ Plan → .sdd/[plan].md
184
+ ✅ Tareas → .sdd/[tareas].md
185
+ ✅ Código base → [carpeta del proyecto]
186
+
187
+ ¿Qué sigue?
188
+ /sdd.implementar → implementar las tareas pendientes
189
+ /sdd.exportar → empaquetar para compartir o desplegar
190
+ /sdd.estado → ver el estado completo del proyecto
191
+ ```
192
+
193
+ ---
194
+
195
+ ## Manejo de errores
196
+
197
+ Si un paso falla:
198
+
199
+ ```
200
+ ⚠️ El paso [nombre] encontró un problema:
201
+ [descripción del error]
202
+
203
+ Opciones:
204
+ r → reintentar el paso
205
+ s → saltar y continuar
206
+ i → inspeccionar manualmente
207
+ q → salir (el progreso está guardado)
208
+ ```
209
+
210
+ El estado guardado en `estado.json` permite retomar donde se quedó.
@@ -12,6 +12,8 @@ handoffs:
12
12
 
13
13
  Eres el **Generador de MCP**. Tomas una descripción en lenguaje natural y produces un servidor MCP completo: tools definidas, empaquetado, instrucciones de instalación de una línea. El resultado lo puede instalar alguien que no sabe programar.
14
14
 
15
+ > **MCP integrado en v2.6.0:** Playwright (navegación y QA automatizado).
16
+
15
17
  ## PASO 1 — Entender qué capacidades se quieren publicar
16
18
 
17
19
  Lee el argumento del comando. Si el usuario escribió algo como:
@@ -0,0 +1,134 @@
1
+ ---
2
+ description: Generar reporte de calidad con escape rate y mutaciones
3
+ allowed-tools: Read, Bash
4
+ ---
5
+
6
+ # /sdd.defect-report
7
+
8
+ Genera un reporte de calidad basado en mutaciones (cambios) de archivos encontrados por QA.
9
+
10
+ ## Uso
11
+
12
+ ```
13
+ /sdd.defect-report
14
+ ```
15
+
16
+ ## Qué Muestra
17
+
18
+ ### Resumen Ejecutivo
19
+
20
+ ```
21
+ ╔═══════════════════════════════════════════════════════════╗
22
+ ║ DEFECT ESCAPE RATE REPORT — 2026-06-14 ║
23
+ ╠═══════════════════════════════════════════════════════════╣
24
+ ║ ║
25
+ ║ Archivos modificados: 12 ║
26
+ ║ Bugs encontrados (QA): 4 ║
27
+ ║ Bugs en producción: 1 ║
28
+ ║ ───────────────────────────────────── ║
29
+ ║ Global Escape Rate: 20% (1 de 5) ║
30
+ ║ ║
31
+ ║ Interpretación: ║
32
+ ║ ✅ Muy bien (1-10%): Calidad excelente ║
33
+ ║ ⚠️ OK (11-30%): Calidad buena ║
34
+ ║ 🔴 Malo (31%+): Calidad baja ║
35
+ ║ ║
36
+ ╚═══════════════════════════════════════════════════════════╝
37
+ ```
38
+
39
+ ### Por Agente
40
+
41
+ ```
42
+ AGENTE | ARCHIVOS | MUTACIONES | BUGS ENCONTRADOS | QUALITY
43
+ ───────────────┼──────────┼────────────┼──────────────────┼─────────
44
+ backend-dev | 12 | 15 | 3 | 75%
45
+ frontend-dev | 8 | 12 | 1 | 88%
46
+ tester-qa | 5 | 8 | 4 (encontrados) | QA
47
+ revisor | 3 | 4 | 2 | 67%
48
+ ```
49
+
50
+ ### Archivos Inestables
51
+
52
+ ```
53
+ 🚨 CRÍTICOS (>5 mutaciones):
54
+ - src/auth.ts (7 mutaciones en 2 días)
55
+ - src/database.ts (6 mutaciones en 3 días)
56
+
57
+ ⚠️ INESTABLES (2-5 mutaciones):
58
+ - src/validators.ts (3 mutaciones)
59
+ - src/payments.ts (4 mutaciones)
60
+ ```
61
+
62
+ ### Agentes con Mejora Necesaria
63
+
64
+ ```
65
+ 📊 ESCALA DE CALIDAD:
66
+ backend-dev: ████████░ 75% — Aumentar coverage de tests
67
+ frontend-dev: █████████ 88% — Excelente
68
+ revisor: ██████░░░ 67% — Revisar proceso de verificación
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Interpretación de Resultados
74
+
75
+ ### Escape Rate Bajo (1-10%)
76
+ ```
77
+ ✅ QA es efectivo, código es estable
78
+ → Confiable para producción
79
+ → Clientes confían en calidad
80
+ ```
81
+
82
+ ### Escape Rate Medio (11-30%)
83
+ ```
84
+ ⚠️ QA encuentra mayoría de bugs, pero algunos escapan
85
+ → Aumentar cobertura de tests
86
+ → Mejorar criterios de aceptación
87
+ ```
88
+
89
+ ### Escape Rate Alto (31%+)
90
+ ```
91
+ 🔴 Problemas serios de calidad
92
+ → Tests insuficientes
93
+ → Falta validación
94
+ → Riesgo de producción
95
+ ```
96
+
97
+ ---
98
+
99
+ ## Ejemplo Real
100
+
101
+ **Sesión 1 (2026-06-10):**
102
+ - Backend Dev escribe src/auth.ts (Write)
103
+ - Frontend Dev modifica src/ui.tsx (Edit)
104
+ - Tester QA ejecuta tests, encuentra 2 bugs en auth.ts
105
+
106
+ **Sesión 2 (2026-06-11):**
107
+ - Backend Dev reescribe src/auth.ts (Write) — 2 bugs solucionados + 1 nuevo
108
+ - Tester QA ejecuta tests, encuentra 2 bugs (1 viejo, 1 nuevo)
109
+ - 1 bug anterior escapó a producción
110
+
111
+ **Reporte Final:**
112
+ ```
113
+ Archivos: 2
114
+ Bugs encontrados: 4
115
+ Bugs en prod: 1
116
+ ─────────────────
117
+ Escape Rate: 25%
118
+
119
+ Por agente:
120
+ backend-dev: 6 mutaciones, 3 bugs encontrados → 50% quality
121
+ frontend-dev: 1 mutación, 0 bugs → 100% quality
122
+ tester-qa: 100% accuracy (encontró todos excepto 1 que escapó)
123
+ ```
124
+
125
+ ---
126
+
127
+ ## Datos Fuente
128
+
129
+ Utiliza:
130
+ - `.sdd/observabilidad/mutaciones.jsonl` — cambios a archivos
131
+ - `.sdd/observabilidad/consumo.jsonl` — timestamps de eventos
132
+
133
+ **Nota:** En v2.6.1 se agregará integración con resultados reales de QA (Playwright).
134
+
@@ -32,8 +32,27 @@ cat .sdd/memoria/constitucion.md 2>/dev/null | head -10 && echo "EXISTE_CONSTITU
32
32
  # ¿Es un proyecto existente? Si hay código, invocar al investigador antes de preguntar
33
33
  ls package.json pyproject.toml Cargo.toml go.mod 2>/dev/null | head -5
34
34
  ls src/ app/ lib/ 2>/dev/null | head -3
35
+
36
+ # ¿Hay perfil configurado?
37
+ PERFIL=$(grep -o '"perfil": *"[^"]*"' .sdd/estado.json 2>/dev/null | cut -d'"' -f4)
38
+ [ -z "$PERFIL" ] && PERFIL=$(grep '^perfil:' .sdd/sdd.config.yaml 2>/dev/null | cut -d':' -f2 | tr -d ' ')
39
+ echo "PERFIL=${PERFIL:-guiado}"
35
40
  ```
36
41
 
42
+ ### Detección de usuario nuevo
43
+
44
+ Si NO existe `.sdd/estado.json` ni `.sdd/sdd.config.yaml` y no hay código previo en el proyecto:
45
+
46
+ **→ Usuario nuevo detectado. Usa modo guiado.**
47
+
48
+ No pidas que editen archivos ni que ejecuten comandos. Saluda en lenguaje natural:
49
+
50
+ > ¡Hola! Cuéntame qué quieres construir — una frase es suficiente. No necesitas saber nada técnico para empezar.
51
+
52
+ Si existe `.sdd/sdd.config.yaml` con `perfil: experto` explícito:
53
+
54
+ **→ Usuario avanzado. Usa modo experto** (muestra comandos, rutas, estado técnico).
55
+
37
56
  Si el proyecto ya tiene código (existe `src/`, `app/`, o un archivo de manifiesto), invoca al agente **investigador** antes del PASO 1:
38
57
 
39
58
  > `@investigador` Analiza el proyecto existente y genera el informe de contexto técnico. Quiero usarlo como base antes de especificar algo nuevo.