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
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Ejecuta las tareas con los agentes especializados configurados. Modos: todas en secuencia (sin args), tarea específica (T003), continuar (continuar). Cada tarea se verifica antes de la siguiente.
3
- allowed-tools: Read, Write, Edit, Bash, Task, TodoWrite, mcp__sdd-figma__analizar_sistema_diseño, mcp__sdd-figma__evaluar_ui_existente, mcp__sdd-figma__conectar_figma, mcp__sdd-figma__listar_componentes, mcp__sdd-figma__traer_componente, mcp__sdd-figma__mapear_estilos, mcp__sdd-figma__generar_componente, mcp__sdd-figma__sugerir_mejoras
3
+ allowed-tools: Read, Write, Edit, Bash, Task, TodoWrite
4
4
  handoffs:
5
5
  - etiqueta: "Verificar contra spec"
6
6
  comando: sdd.verificar
@@ -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,40 +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
131
-
132
- **Antes de delegar al agente frontend**, verifica si la tarea es de tipo UI:
133
-
134
- ```
135
- SI el agente asignado es "desarrollador-frontend"
136
- O el tipo/área de la tarea contiene: ui, componente, interfaz, diseño, vista, pantalla, layout, figma:
137
-
138
- 1. Ejecuta: mcp__sdd-figma__analizar_sistema_diseño({ project_root: "." })
139
- → Guarda el perfil en contexto para el agente
140
-
141
- 2. SI la constitución o config del proyecto tiene figma_file_key definido:
142
- a. Ejecuta: mcp__sdd-figma__conectar_figma({ file_key: "<key>" })
143
- b. Si la tarea menciona un componente específico de Figma:
144
- - mcp__sdd-figma__traer_componente({ file_key, node_id })
145
- - mcp__sdd-figma__mapear_estilos({ file_key, node_id, project_root: "." })
146
- c. Inyecta el resultado del mapeo en el contexto del agente
147
-
148
- 3. Si hay tokens sin mapear (matchType: "new"), avisa al usuario:
149
- > ⚠️ Figma tiene [N] colores sin equivalente en el proyecto.
150
- > El agente usará el valor hex directo. ¿Continuar?
151
-
152
- SI el agente NO es frontend → salta este paso
153
- ```
154
-
155
- > **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
-
157
- ### 4.5 — Constitutional AI pre-check
213
+ ### 5.4 — Constitutional AI pre-check
158
214
 
159
215
  Antes de delegar al agente, extrae las restricciones de constitución relevantes para la tarea:
160
216
 
@@ -173,7 +229,7 @@ esac
173
229
 
174
230
  Inyecta el resultado en el contexto del agente como **restricciones explícitas**, no como contexto de fondo.
175
231
 
176
- ### 4.6 — Delegar al agente
232
+ ### 5.6 — Delegar al agente
177
233
 
178
234
  Usa la herramienta `Task` para invocar al agente asignado. El agente recibe:
179
235
 
@@ -183,18 +239,18 @@ Usa la herramienta `Task` para invocar al agente asignado. El agente recibe:
183
239
  - Constitución
184
240
  - Tareas ya completadas en este ciclo (contexto)
185
241
  - Lista de archivos modificados hasta ahora
186
- - **[Si es UI]** Perfil del sistema de diseño + mapeo de estilos Figma (del paso 4.4)
242
+ - **[Si es UI]** Perfil del sistema de diseño del proyecto
187
243
 
188
244
  El agente debe:
189
245
  1. Leer el código existente relacionado antes de escribir
190
246
  2. Seguir patrones del codebase actual
191
247
  3. Implementar SOLO lo que la tarea pide
192
248
  4. Respetar la constitución
193
- 5. **[Si es UI]** Usar `mcp__sdd-figma__generar_componente` como punto de partida si hay node_id disponible
249
+ 5. **[Si es UI]** Leer el sistema de diseño local antes de generar componentes
194
250
  6. Devolver lista de archivos modificados
195
251
  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
252
 
197
- ### 4.6 — Checkpoint de salida por tarea
253
+ ### 5.7 — Checkpoint de salida + Evaluator-Optimizer
198
254
 
199
255
  Antes de marcar la tarea como completada, verifica en dos niveles:
200
256
 
@@ -219,6 +275,35 @@ Antes de marcar la tarea como completada, verifica en dos niveles:
219
275
  # Python: python -m pytest [directorio_afectado] -q
220
276
  ```
221
277
 
278
+ **Nivel 4 — Evaluator-Optimizer (solo para agentes del Grupo OPUS: arquitecto, critico, seguridad, asesor-datos)**
279
+
280
+ Si el agente de la tarea es del Grupo OPUS, activa el ciclo Evaluador-Optimizador:
281
+
282
+ ```
283
+ CICLO EVALUADOR-OPTIMIZADOR (máx. 3 iteraciones):
284
+
285
+ 1. El agente implementador entrega su output (iteración actual)
286
+
287
+ 2. El agente REVISOR evalúa el output contra los CAs de la tarea:
288
+ - Puntúa cada CA de 0 a 10
289
+ - Score final = promedio
290
+ - Umbral de aprobación: 8/10
291
+
292
+ 3. Si score ≥ 8 → PASA directamente (el output es aceptable)
293
+
294
+ 4. Si score < 8 e iteraciones < 3:
295
+ - El revisor devuelve feedback específico al agente implementador
296
+ - El agente implementador mejora el output incorporando el feedback
297
+ - Repetir desde paso 2
298
+
299
+ 5. Si score < 8 tras la 3ª iteración:
300
+ → FALLA con reporte detallado (score, CAs que no pasan, razón)
301
+ → No se hacen más intentos automáticos
302
+
303
+ Importante: el ciclo NO se aplica a agentes del Grupo SONNET ni HAIKU
304
+ para evitar consumo excesivo de tokens en tareas rutinarias.
305
+ ```
306
+
222
307
  Si cualquier nivel falla:
223
308
  1. Marca como `bloqueada` con descripción del fallo
224
309
  2. **NO continúa con tareas dependientes**
@@ -230,7 +315,7 @@ Si cualquier nivel falla:
230
315
  > b) Saltar y continuar (no recomendado)
231
316
  > c) Detener y revisar manualmente
232
317
 
233
- ### 4.7 — Actualizar estado
318
+ ### 5.8 — Actualizar estado
234
319
 
235
320
  ```bash
236
321
  # .estado-tareas.json: T00X → completada
@@ -238,13 +323,13 @@ Si cualquier nivel falla:
238
323
  # .sdd/estado.json: ultima_actualizacion
239
324
  ```
240
325
 
241
- ### 4.8 — Hook post-tarea (opcional)
326
+ ### 5.9 — Hook post-tarea (opcional)
242
327
 
243
328
  ```bash
244
329
  [ -f ".sdd/hooks/despues_cada_tarea.sh" ] && bash .sdd/hooks/despues_cada_tarea.sh "$TAREA_ID"
245
330
  ```
246
331
 
247
- ### 4.9 — Reportar
332
+ ### 5.10 — Reportar
248
333
 
249
334
  ```
250
335
  ✅ T00X completada
@@ -253,15 +338,82 @@ Si cualquier nivel falla:
253
338
  [N]/[M] tareas completadas ([X]%)
254
339
  ```
255
340
 
341
+ ### 5.10.5 — Gate de calidad automático (antes de marcar DONE)
342
+
343
+ Antes de marcar cualquier tarea como `completada`, ejecuta este gate en orden. **Los 3 puntos deben pasar**; si alguno falla, la tarea queda en `en_progreso` con el motivo anotado.
344
+
345
+ **Punto 1 — Tests corren y pasan**
346
+ ```bash
347
+ # Detectar framework y correr solo los tests relacionados con los archivos modificados
348
+ TS_FILES=$(echo "$ARCHIVOS_MODIFICADOS" | tr ',' ' ')
349
+
350
+ # Intento rápido (tests relacionados):
351
+ npx jest --passWithNoTests --findRelatedTests $TS_FILES 2>/dev/null \
352
+ || python -m pytest $TS_FILES -q 2>/dev/null \
353
+ || echo "SKIP_NO_FRAMEWORK"
354
+
355
+ # Si no hay tests relacionados detectables, corre la suite completa en modo quiet:
356
+ # npm test -- --silent 2>/dev/null || echo "NO_TESTS_OK"
357
+ ```
358
+ Resultado esperado: exit code 0 o "SKIP_NO_FRAMEWORK" / "NO_TESTS_OK".
359
+ Si hay fallos de test → tarea queda `en_progreso`: `"Tests fallando: [detalle]"`.
360
+
361
+ **Punto 2 — Linter pasa (o no hay linter configurado)**
362
+ ```bash
363
+ # Detectar linter y ejecutar solo sobre archivos modificados
364
+ if [ -f ".eslintrc*" ] || [ -f "eslint.config*" ]; then
365
+ npx eslint $TS_FILES --max-warnings=0 2>/dev/null
366
+ elif [ -f "pyproject.toml" ] || [ -f ".flake8" ]; then
367
+ flake8 $TS_FILES 2>/dev/null || ruff check $TS_FILES 2>/dev/null
368
+ else
369
+ echo "NO_LINTER_CONFIGURADO"
370
+ fi
371
+ ```
372
+ Resultado esperado: exit code 0 o "NO_LINTER_CONFIGURADO".
373
+ Si hay errores de linter → tarea queda `en_progreso`: `"Linter fallando: [detalle]"`.
374
+
375
+ **Punto 3 — Criterio de aceptación de la tarea se cumple**
376
+
377
+ Lee la sección "Criterio de verificación" de la tarea en `tareas.md` y ejecuta el comando definido ahí. Si no hay comando definido, verifica manualmente que los artefactos esperados existen y exportan correctamente (según paso 5.7 niveles 1 y 2).
378
+
379
+ Resultado esperado: el comando retorna exit 0 O la inspección manual confirma que el CA está cubierto.
380
+ Si el CA no se cumple → tarea queda `en_progreso`: `"CA no cumplido: [razón]"`.
381
+
382
+ **Decisión final:**
383
+ ```
384
+ SI los 3 puntos pasan → marcar tarea como `completada` → continuar al paso 5.10
385
+ SI alguno falla → marcar tarea como `en_progreso` con campo "motivo_bloqueo"
386
+ → NO avanzar a tareas dependientes
387
+ → Reportar al usuario:
388
+ ⚠️ T00X no pasó el gate de calidad: [motivo]
389
+ ¿Qué hacemos?
390
+ a) Reintentar corrección automática
391
+ b) Saltar (no recomendado, registra deuda técnica)
392
+ c) Detener y revisar manualmente
393
+ ```
394
+
395
+ ### 5.11 — Checkpoint de contexto (compresión automática)
396
+
397
+ Lleva un contador de tareas completadas en este ciclo. **Tras cada 5 tareas completadas**, ejecuta automáticamente la compresión de contexto para evitar el desbordamiento de la ventana en sesiones largas:
398
+
399
+ ```
400
+ SI (tareas_completadas_en_ciclo % 5 == 0) Y tareas_completadas_en_ciclo > 0:
401
+ → Notificar: "🧹 Checkpoint de contexto: 5 tareas completadas, comprimiendo contexto…"
402
+ → Ejecutar: /sdd.comprimir aplicar
403
+ → Continuar con la siguiente tarea
404
+ ```
405
+
406
+ Esto se hace de forma silenciosa y no requiere confirmación del usuario: es un mantenimiento automático del presupuesto de tokens. Si quedan menos de 5 tareas pendientes, no se fuerza un checkpoint extra (la compresión final ocurre en el PASO 6).
407
+
256
408
  ## VALIDACIÓN DE SALIDA
257
409
 
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.
410
+ 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
411
 
260
412
  **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
413
 
262
- ## PASO 5 — Al terminar todas las tareas
414
+ ## PASO 6 — Al terminar todas las tareas
263
415
 
264
- ### 5.1 — Invocar revisor
416
+ ### 6.1 — Invocar revisor
265
417
 
266
418
  ```bash
267
419
  # Usar el agente revisor con modelo de su config (recomendado: opus)
@@ -272,7 +424,7 @@ El revisor cruza el código generado contra:
272
424
  - Las decisiones del plan
273
425
  - Los principios de la constitución
274
426
 
275
- ### 5.2 — Invocar tester para correr toda la suite
427
+ ### 6.2 — Invocar tester para correr toda la suite
276
428
 
277
429
  ```bash
278
430
  # Detectar framework de tests automáticamente y correr
@@ -284,11 +436,11 @@ npm test 2>/dev/null || pnpm test 2>/dev/null || yarn test 2>/dev/null || \
284
436
  echo "NO_FRAMEWORK_DETECTADO"
285
437
  ```
286
438
 
287
- ### 5.3 — Invocar seguridad (si la tarea tocaba área sensible)
439
+ ### 6.3 — Invocar seguridad (si la tarea tocaba área sensible)
288
440
 
289
441
  Auditoría automática si la implementación tocó: autenticación, manejo de datos personales, queries dinámicas, APIs externas, manejo de archivos.
290
442
 
291
- ## PASO 6 — Reporte final exhaustivo
443
+ ## PASO 7 — Reporte final exhaustivo
292
444
 
293
445
  ```markdown
294
446
  ## 📊 Implementación Completada: {ID}
@@ -342,7 +494,7 @@ Cubre: {Lista de CAs}
342
494
  ```
343
495
  ```
344
496
 
345
- ## PASO 7 — Actualizar estado global
497
+ ## PASO 8 — Actualizar estado global
346
498
 
347
499
  ```json
348
500
  {
@@ -356,13 +508,81 @@ Cubre: {Lista de CAs}
356
508
  }
357
509
  ```
358
510
 
359
- ## PASO 8 — Hook post-ejecución
511
+ ## PASO 9 — Hook post-ejecución
360
512
 
361
513
  ```bash
362
514
  [ -f ".sdd/hooks/despues_implementar.sh" ] && bash .sdd/hooks/despues_implementar.sh
363
515
  ```
364
516
 
365
- ## PASO 9Siguientes pasos
517
+ ## PASO 10Deploy automático (si está configurado)
518
+
519
+ **Solo si perfil == "guiado" Y vercel configurado:**
520
+
521
+ ```bash
522
+ # Verificar si Vercel está configurado
523
+ if grep -q "deploy.platform: vercel" .sdd/sdd.config.yaml; then
524
+ echo ""
525
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
526
+ echo "🚀 DESPLIEGUE AUTOMÁTICO"
527
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
528
+ echo ""
529
+ echo "✅ Tu app está lista para internet."
530
+ echo ""
531
+ echo "CHECKLIST PRE-DEPLOY:"
532
+ echo " ✅ Código construido y verificado"
533
+ echo " ✅ Tests pasando"
534
+ echo " ✅ Sin secretos en el código"
535
+ echo ""
536
+ echo "¿Publico tu app en internet?"
537
+ echo "(Responde: sí / cambio algo / después)"
538
+ echo ""
539
+
540
+ read -p "Tu respuesta: " DEPLOY_CHOICE
541
+
542
+ if [ "$DEPLOY_CHOICE" = "sí" ]; then
543
+ echo ""
544
+ echo "⏳ Publicando en Vercel..."
545
+ echo ""
546
+
547
+ # Invocar skill vercel-deploy
548
+ bash "$(dirname "$0")/../skills/vercel-deploy/vercel-deploy.sh" \
549
+ --spec-id "$SPEC_ID" \
550
+ --profile "guiado"
551
+
552
+ if [ $? -eq 0 ]; then
553
+ echo ""
554
+ echo "✅ ¡Tu app está en internet!"
555
+ echo ""
556
+ # Leer URL del archivo de estado de Vercel
557
+ VERCEL_URL=$(grep "app_url" .sdd/.vercel-deploy.json 2>/dev/null | cut -d'"' -f4)
558
+ if [ -n "$VERCEL_URL" ]; then
559
+ echo " Acceso: $VERCEL_URL"
560
+ echo ""
561
+ echo "Puedes compartir este link con quien quieras."
562
+ fi
563
+ else
564
+ echo ""
565
+ echo "⚠️ Hubo un problema publicando."
566
+ echo ""
567
+ echo "Opciones:"
568
+ echo " 1. Reintentar: /sdd.desplegar"
569
+ echo " 2. Cambiar algo: edita y ejecuta /sdd.implementar continuar"
570
+ echo " 3. Dejar para después: los cambios están en GitHub"
571
+ fi
572
+ elif [ "$DEPLOY_CHOICE" = "cambio algo" ]; then
573
+ echo ""
574
+ echo "✅ Esos cambios se guardarán automáticamente."
575
+ echo "Cuando estés listo, ejecuta: /sdd.implementar continuar"
576
+ else
577
+ echo ""
578
+ echo "✅ Sin problema. Cuando quieras publicar, ejecuta: /sdd.desplegar"
579
+ fi
580
+ fi
581
+ ```
582
+
583
+ ---
584
+
585
+ ## PASO 11 — Siguientes pasos
366
586
 
367
587
  ```
368
588
  🎉 Implementación terminada
@@ -370,7 +590,7 @@ Cubre: {Lista de CAs}
370
590
  SIGUIENTES PASOS RECOMENDADOS:
371
591
  /sdd.verificar — verificación final contra spec original
372
592
  /sdd.snapshot — actualizar SNAPSHOT.md del producto
373
- (commit a tu sistema de control de versiones manualmente)
593
+ /sdd.retro — retrospectiva: qué aprendimos
374
594
 
375
595
  ¿Quieres empezar otra feature?
376
596
  /sdd.especificar [descripción]