sdd-es 2.5.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 (60) hide show
  1. package/.claude/settings.json +24 -0
  2. package/.claude/settings.local.json +10 -0
  3. package/.claude-plugin/marketplace.json +34 -0
  4. package/.claude-plugin/plugin.json +119 -0
  5. package/.gitignore +20 -0
  6. package/.mcp.json +8 -0
  7. package/README.md +27 -20
  8. package/agents/architecture-designer.md +37 -0
  9. package/agents/desarrollador-frontend.md +8 -15
  10. package/agents/product-designer.md +36 -0
  11. package/claude-hooks/agent-memory.js +137 -3
  12. package/claude-hooks/pre-tool-guard.js +61 -9
  13. package/commands/sdd.adr.md +196 -0
  14. package/commands/sdd.ayuda.md +13 -0
  15. package/commands/sdd.compliance.md +5 -0
  16. package/commands/sdd.configurar.md +1 -1
  17. package/commands/sdd.crear-mcp.md +2 -0
  18. package/commands/sdd.defect-report.md +134 -0
  19. package/commands/sdd.descubrir.md +19 -0
  20. package/commands/sdd.estado.md +52 -2
  21. package/commands/sdd.implementar.md +71 -31
  22. package/commands/sdd.md +23 -3
  23. package/commands/sdd.optimizar-memoria.md +47 -0
  24. package/commands/sdd.retro.md +74 -0
  25. package/commands/sdd.verificar.md +71 -0
  26. package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
  27. package/configuracion-ejemplo/sdd.config.yaml +10 -0
  28. package/docs/CASO-COMPLETO.md +206 -0
  29. package/docs/EJEMPLOS.md +88 -0
  30. package/docs/FABRICA.md +5 -6
  31. package/docs/INICIO-RAPIDO.md +27 -79
  32. package/docs/MEMORIA-Y-OBSERVABILIDAD.md +12 -10
  33. package/docs/README.md +43 -0
  34. package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
  35. package/package.json +11 -8
  36. package/plantillas/job-story-mejorar-prompt.md +107 -0
  37. package/presets/enterprise.yaml +6 -0
  38. package/presets/lean.yaml +4 -0
  39. package/presets/startup.yaml +6 -0
  40. package/skills/adr-indexer/SKILL.md +181 -0
  41. package/skills/cache-audit/SKILL.md +1 -1
  42. package/skills/critica-diseno/SKILL.md +1 -1
  43. package/skills/descubrir-idea/SKILL.md +1 -1
  44. package/skills/effort-router/SKILL.md +1 -1
  45. package/skills/elegir-direccion/SKILL.md +1 -1
  46. package/skills/interpretar-idea/SKILL.md +1 -1
  47. package/skills/mejorar-prompt/SKILL.md +237 -0
  48. package/skills/memory-compactor/SKILL.md +34 -80
  49. package/skills/mutation-detector/SKILL.md +134 -0
  50. package/skills/observabilidad-consumo/SKILL.md +1 -1
  51. package/skills/token-budget/SKILL.md +24 -1
  52. package/skills/wireframe-mvp/SKILL.md +1 -1
  53. package/mcp-figma/README.md +0 -158
  54. package/mcp-figma/package.json +0 -7
  55. package/mcp-figma/src/component-generator.js +0 -162
  56. package/mcp-figma/src/design-system-analyzer.js +0 -247
  57. package/mcp-figma/src/figma-client.js +0 -75
  58. package/mcp-figma/src/index.js +0 -114
  59. package/mcp-figma/src/mcp.js +0 -97
  60. package/mcp-figma/src/style-mapper.js +0 -85
@@ -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
@@ -210,34 +210,7 @@ Marca la tarea como `en_progreso` en `.estado-tareas.json` y actualiza el TodoWr
210
210
  [ -f ".sdd/hooks/antes_cada_tarea.sh" ] && bash .sdd/hooks/antes_cada_tarea.sh "$TAREA_ID"
211
211
  ```
212
212
 
213
- ### 5.4 — Activar MCP de Figma si la tarea es de UI/frontend
214
-
215
- **Antes de delegar al agente frontend**, verifica si la tarea es de tipo UI:
216
-
217
- ```
218
- SI el agente asignado es "desarrollador-frontend"
219
- O el tipo/área de la tarea contiene: ui, componente, interfaz, diseño, vista, pantalla, layout, figma:
220
-
221
- 1. Ejecuta: mcp__sdd-figma__analizar_sistema_diseño({ project_root: "." })
222
- → Guarda el perfil en contexto para el agente
223
-
224
- 2. SI la constitución o config del proyecto tiene figma_file_key definido:
225
- a. Ejecuta: mcp__sdd-figma__conectar_figma({ file_key: "<key>" })
226
- b. Si la tarea menciona un componente específico de Figma:
227
- - mcp__sdd-figma__traer_componente({ file_key, node_id })
228
- - mcp__sdd-figma__mapear_estilos({ file_key, node_id, project_root: "." })
229
- c. Inyecta el resultado del mapeo en el contexto del agente
230
-
231
- 3. Si hay tokens sin mapear (matchType: "new"), avisa al usuario:
232
- > ⚠️ Figma tiene [N] colores sin equivalente en el proyecto.
233
- > El agente usará el valor hex directo. ¿Continuar?
234
-
235
- SI el agente NO es frontend → salta este paso
236
- ```
237
-
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.
239
-
240
- ### 5.5 — Constitutional AI pre-check
213
+ ### 5.4 — Constitutional AI pre-check
241
214
 
242
215
  Antes de delegar al agente, extrae las restricciones de constitución relevantes para la tarea:
243
216
 
@@ -266,14 +239,14 @@ Usa la herramienta `Task` para invocar al agente asignado. El agente recibe:
266
239
  - Constitución
267
240
  - Tareas ya completadas en este ciclo (contexto)
268
241
  - Lista de archivos modificados hasta ahora
269
- - **[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
270
243
 
271
244
  El agente debe:
272
245
  1. Leer el código existente relacionado antes de escribir
273
246
  2. Seguir patrones del codebase actual
274
247
  3. Implementar SOLO lo que la tarea pide
275
248
  4. Respetar la constitución
276
- 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
277
250
  6. Devolver lista de archivos modificados
278
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
279
252
 
@@ -365,6 +338,73 @@ Si cualquier nivel falla:
365
338
  [N]/[M] tareas completadas ([X]%)
366
339
  ```
367
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
+
368
408
  ## VALIDACIÓN DE SALIDA
369
409
 
370
410
  El checkpoint de salida se aplica por tarea (ver paso 5.7 — cuatro 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.
package/commands/sdd.md CHANGED
@@ -20,6 +20,20 @@ else
20
20
  fi
21
21
  ```
22
22
 
23
+ **Recuperación de contexto automática:** Si existe `.sdd/estado.json`, antes de pedir nada al usuario muestra un resumen de **exactamente 3 líneas** con:
24
+
25
+ 1. `pipeline_step` actual (campo `pipeline_step` del estado).
26
+ 2. Spec activa (campo `spec_activa` o equivalente).
27
+ 3. Número de tareas pendientes.
28
+
29
+ Ejemplo:
30
+
31
+ ```
32
+ Paso del pipeline: implementar
33
+ Spec activa: 2026-06-14-auth
34
+ Tareas pendientes: 3
35
+ ```
36
+
23
37
  ## PASO 1.2 — Detectar modo de output
24
38
 
25
39
  Si el argumento del comando contiene un modo de output (`pm`, `arq`, `dev`), actívalo globalmente para esta sesión:
@@ -45,10 +59,11 @@ Lee el perfil desde el estado o la configuración:
45
59
  ```bash
46
60
  PERFIL=$(grep -o '"perfil": *"[^"]*"' .sdd/estado.json 2>/dev/null | cut -d'"' -f4)
47
61
  [ -z "$PERFIL" ] && PERFIL=$(grep '^perfil:' .sdd/sdd.config.yaml 2>/dev/null | cut -d':' -f2 | tr -d ' ')
48
- echo "PERFIL=${PERFIL:-experto}"
62
+ # Por defecto: modo guiado (sin jerga) — si sdd.config.yaml declara explícitamente "perfil: experto", se respeta
63
+ echo "PERFIL=${PERFIL:-guiado}"
49
64
  ```
50
65
 
51
- **Si `PERFIL=guiado`:** activa la skill `modo-guiado` y conduce TODO el resto de la interacción según sus 6 reglas (sin jerga, confirmar antes de actuar, una pregunta a la vez, nunca pedir que edite archivos). En este modo:
66
+ **Si `PERFIL=guiado` (o no hay perfil configurado):** activa la skill `modo-guiado` y conduce TODO el resto de la interacción según sus 6 reglas (sin jerga, confirmar antes de actuar, una pregunta a la vez, nunca pedir que edite archivos). En este modo:
52
67
 
53
68
  - **Encadenas automáticamente** los pasos del flujo (especificar → planificar → tareas → implementar) pidiendo solo una confirmación simple entre fases, sin exponer los nombres de los comandos. El usuario dice "sí" y tú avanzas.
54
69
  - Traduces cada fase a lenguaje natural (ver tabla en la skill `modo-guiado`).
@@ -58,7 +73,7 @@ Ejemplo de conducción en modo guiado:
58
73
 
59
74
  > Entendido, quieres una lista de tareas. Primero voy a entender bien los detalles, luego lo construyo y lo pruebo. ¿Arrancamos? (responde *sí*)
60
75
 
61
- **Si `PERFIL=experto` (o no hay perfil):** sigue el enrutamiento normal del PASO 2, exponiendo comandos.
76
+ **Si `PERFIL=experto`:** sigue el enrutamiento normal del PASO 2, exponiendo comandos técnicos. Este modo se activa SOLO cuando el archivo `sdd.config.yaml` incluye explícitamente `perfil: experto`.
62
77
 
63
78
  ## PASO 2 — Interpretar la intención del usuario
64
79
 
@@ -92,6 +107,11 @@ El usuario invocó este comando con argumentos en lenguaje natural. Mapea su int
92
107
  | "cambia configuración", "ajusta agentes/modelos" | `/sdd.configurar` |
93
108
  | "indexa el proyecto", "genera mapa de símbolos" | `/sdd.mapear` |
94
109
  | "comprime", "ahorra tokens", "compacta memoria" | `/sdd.comprimir` |
110
+ | "optimiza artefactos", "reduce contexto" | `/sdd.optimizar` |
111
+ | "optimiza memoria", "compacta agente" | `/sdd.optimizar-memoria` |
112
+ | "compliance", "reporte regulatorio", "GDPR", "SOC2" | `/sdd.compliance` |
113
+ | "registra decisión", "ADR", "architecture decision" | `/sdd.adr` |
114
+ | "reporte de bugs", "defect rate", "tasa de defectos" | `/sdd.defect-report` |
95
115
  | "haz un release", "nueva versión", "changelog" | `/sdd.release` |
96
116
  | "descubre el proyecto", "tengo una idea vaga" | `/sdd.descubrir` |
97
117
  | "crea una app", "construye una app", "quiero una app de X" | `/sdd.crear-app [resto]` |
@@ -0,0 +1,47 @@
1
+ ---
2
+ description: Comprimir manualmente la memoria de agentes (deduplicación + compresión)
3
+ allowed-tools: Read, Write, Bash
4
+ ---
5
+
6
+ # /sdd.optimizar memoria
7
+
8
+ Comprime automáticamente los archivos de memoria de agentes (`.sdd/memoria/agente-*.md`) cuando superan 50KB.
9
+
10
+ ## Uso
11
+
12
+ ```
13
+ /sdd.optimizar memoria
14
+ ```
15
+
16
+ ## Qué Hace
17
+
18
+ 1. **Lee** archivos en `.sdd/memoria/`
19
+ 2. **Deduplica** entradas por filepath (guarda solo la más reciente)
20
+ 3. **Comprime** aplicando diccionario Caveman Level Full
21
+ 4. **Crea backup** `.original.md` antes de sobrescribir
22
+ 5. **Reporta** bytes salvados
23
+
24
+ ## Ejemplo
25
+
26
+ ```
27
+ ANTES: agente-arquitecto.md = 150KB (80 entradas)
28
+
29
+ /sdd.optimizar memoria
30
+
31
+ ✨ [compress] arquitecto: 150KB → 15KB (10%), backup en .original.md
32
+ ✨ [compress] critico: 87KB → 8.7KB (10%)
33
+
34
+ DESPUÉS: memoria total = 24KB
35
+ ```
36
+
37
+ ## Seguridad
38
+
39
+ - Nunca pierdes datos (backup siempre)
40
+ - Idempotente (ejecutar 2 veces = mismo resultado)
41
+ - Reversible: `.original.md` contiene datos originales
42
+
43
+ ## Notas
44
+
45
+ - Se ejecuta automáticamente vía hook cuando memoria > 50KB
46
+ - Puedes ejecutarla manualmente cuando quieras
47
+ - Segura para ejecutar frecuentemente (sin riesgos)
@@ -55,6 +55,80 @@ Si un aprendizaje implica un **principio nuevo** del proyecto, sugiere actualiza
55
55
 
56
56
  > Este aprendizaje parece una regla general del proyecto. ¿Lo elevo a la constitución con `/sdd.constitucion`?
57
57
 
58
+ ## PASO 3.5 — Resumen de calidad al cierre
59
+
60
+ Al final de cada sesión de implementación, antes del resumen de retro, FORGE genera automáticamente un **resumen de calidad en lenguaje de producto** (~5 líneas, sin jerga técnica). El objetivo es que el usuario entienda qué se hizo y en qué estado quedó sin leer tablas ni logs.
61
+
62
+ ### Cómo construirlo
63
+
64
+ ```bash
65
+ # Recopilar señales objetivas del ciclo
66
+ TAREAS_OK=$(grep -c '"estado": "completada"' "$DIR/.estado-tareas.json" 2>/dev/null || echo "?")
67
+ TAREAS_TOTAL=$(grep -c '"estado"' "$DIR/.estado-tareas.json" 2>/dev/null || echo "?")
68
+
69
+ # Tests: buscar resultado en verificacion.md o qa.md
70
+ TESTS_RESULTADO=$(grep -oE "Pasados: [0-9]+" "$DIR/verificacion.md" 2>/dev/null | head -1)
71
+ TESTS_FALLIDOS=$(grep -oE "Fallidos: [0-9]+" "$DIR/verificacion.md" 2>/dev/null | head -1)
72
+ COBERTURA=$(grep -oE "Cobertura: [0-9]+%" "$DIR/verificacion.md" 2>/dev/null | head -1)
73
+
74
+ # Seguridad: ¿se invocó el agente seguridad?
75
+ SEGURIDAD=$(grep -q "Gate de seguridad activado\|agente seguridad" "$DIR/verificacion.md" 2>/dev/null \
76
+ && echo "revisión de seguridad incluida" || echo "sin revisión de seguridad (no aplica)")
77
+
78
+ # Feature principal: título de la spec
79
+ TITULO=$(grep -m1 "^# " "$DIR/spec.md" 2>/dev/null | sed 's/# //')
80
+ ```
81
+
82
+ ### Formato del resumen (adaptar al perfil)
83
+
84
+ **Perfil `guiado`** (lenguaje de producto, sin jerga):
85
+ ```
86
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
87
+ 📦 Resumen de lo que se hizo
88
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
89
+ Hiciste [TÍTULO en lenguaje natural].
90
+ Pruebas: [✓ N/N pasaron | ✗ N fallaron | no hay pruebas aún].
91
+ [Si hubo seguridad]: Se revisó la seguridad — sin problemas encontrados.
92
+ [Si hay cobertura]: Cobertura: N%.
93
+ Listo para [usar / probar / desplegar].
94
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
95
+ ```
96
+
97
+ Ejemplo concreto:
98
+ ```
99
+ Hiciste el login con email.
100
+ Pruebas: ✓ 12/12 pasaron.
101
+ Se revisó la seguridad — sin vulnerabilidades.
102
+ Cobertura: 87%.
103
+ Listo para usar.
104
+ ```
105
+
106
+ **Perfil `profesional`** (lenguaje técnico compacto):
107
+ ```
108
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
109
+ 📊 Quality Summary — {SPEC_ID}
110
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
111
+ Feature: [TÍTULO]
112
+ Tareas: [N/M completadas]
113
+ Tests: [✓ N pasaron | ✗ N fallaron] · Cobertura: [N% | N/A]
114
+ Seguridad: [Auditada — APROBADO | No aplica (sin keywords sensibles)]
115
+ Estado: [APROBADA | APROBADA CON OBSERVACIONES | RECHAZADA]
116
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
117
+ ```
118
+
119
+ ### Cuándo se genera
120
+
121
+ Este resumen se emite **siempre** al ejecutar `/sdd.retro`, independientemente de si la sesión terminó bien o mal. Si la sesión terminó con tareas bloqueadas o tests fallando, el resumen lo refleja honestamente:
122
+
123
+ ```
124
+ Hiciste el login con email (en progreso).
125
+ Pruebas: ✗ 2 fallaron (ver verificacion.md).
126
+ No se revisó seguridad.
127
+ Pendiente: corregir errores antes de entregar.
128
+ ```
129
+
130
+ El resumen se incluye también en la entrada que se escribe en `.sdd/SNAPSHOT.md` (paso 3).
131
+
58
132
  ## PASO 4 — Resumen
59
133
 
60
134
  ```
@@ -66,6 +66,77 @@ Lee el código encontrado. ¿Realmente implementa lo que pide el CA?
66
66
 
67
67
  Repite el proceso para cada RF-XXX de la spec.
68
68
 
69
+ ## PASO 4.5 — Gate de seguridad automático
70
+
71
+ **Antes de continuar con los requisitos no funcionales**, escanea la spec y las tareas en busca de keywords sensibles. Si se detecta alguna, invoca al agente `seguridad` automáticamente sin esperar a que el usuario lo solicite.
72
+
73
+ ### Keywords que activan el gate de seguridad
74
+
75
+ ```
76
+ KEYWORDS_AUTH:
77
+ auth, login, logout, signin, signup, registro, sesión, session,
78
+ password, contraseña, credenciales, credentials
79
+
80
+ KEYWORDS_TOKENS:
81
+ token, jwt, bearer, oauth, api_key, apikey, secret, secreto
82
+
83
+ KEYWORDS_DATOS:
84
+ base de datos, bd, database, sql, query, consulta, migration, migracion,
85
+ postgres, mysql, sqlite, mongodb, redis
86
+
87
+ KEYWORDS_CONFIG:
88
+ config, configuracion, .env, environment, variable de entorno,
89
+ settings, dotenv
90
+
91
+ KEYWORDS_PAGOS:
92
+ pago, payment, stripe, checkout, factura, invoice, tarjeta, card,
93
+ billing, cobro, precio, price
94
+ ```
95
+
96
+ ### Lógica de detección
97
+
98
+ ```bash
99
+ SPEC_CONTENT=$(cat "${SPEC_DIR}/spec.md" "${SPEC_DIR}/tareas.md" 2>/dev/null | tr '[:upper:]' '[:lower:]')
100
+
101
+ KEYWORDS="auth|login|logout|signin|signup|registro|sesión|session|\
102
+ password|contraseña|credenciales|credentials|\
103
+ token|jwt|bearer|oauth|api_key|apikey|secret|secreto|\
104
+ base de datos| bd |database|sql|migration|migracion|\
105
+ postgres|mysql|sqlite|mongodb|redis|\
106
+ config|configuracion|\.env|environment|dotenv|\
107
+ pago|payment|stripe|checkout|factura|tarjeta|billing"
108
+
109
+ if echo "$SPEC_CONTENT" | grep -qiE "$KEYWORDS"; then
110
+ KEYWORD_DETECTADA=$(echo "$SPEC_CONTENT" | grep -oiE "$KEYWORDS" | head -1)
111
+ echo "🔒 Gate de seguridad activado automáticamente (keyword detectada: '$KEYWORD_DETECTADA')"
112
+ echo " Invocando agente seguridad..."
113
+ # → Task("seguridad", prompt_seguridad(spec, plan, diff, keyword))
114
+ GATE_SEGURIDAD_EJECUTADO=true
115
+ else
116
+ echo "✅ Gate de seguridad: sin keywords sensibles detectadas. Omitiendo."
117
+ GATE_SEGURIDAD_EJECUTADO=false
118
+ fi
119
+ ```
120
+
121
+ ### Qué hace el agente `seguridad` en este contexto
122
+
123
+ Recibe: spec completa + plan + diff de archivos modificados + keyword que activó el gate.
124
+
125
+ Verifica mínimamente:
126
+ - Ausencia de secretos hardcodeados en el diff
127
+ - Validación/sanitización de inputs sensibles
128
+ - Ausencia de SQL dinámico sin parametrizar
129
+ - Tokens/passwords no logueados ni expuestos en respuestas
130
+ - Configuraciones sensibles gestionadas via variables de entorno
131
+
132
+ Retorna: `APROBADO` | `OBSERVACIONES` | `RECHAZADO` + lista de hallazgos.
133
+
134
+ Si retorna `RECHAZADO` → la verificación global queda `RECHAZADA` independientemente de los CAs.
135
+ Si retorna `OBSERVACIONES` → se documentan en el reporte de verificación bajo "Hallazgos 🟡 Importantes".
136
+ Si retorna `APROBADO` → continúa normalmente.
137
+
138
+ > **Nota**: si el agente `seguridad` ya fue invocado durante `sdd.implementar` (paso 6.3 o revisión paralela del paso 4.5), sus resultados se reutilizan y no se invoca de nuevo — se indica en el reporte: `"Seguridad: resultado reutilizado de implementación (fecha/hora)"`.
139
+
69
140
  ## PASO 5 — Verificar requisitos no funcionales
70
141
 
71
142
  Estos requieren validación específica:
@@ -0,0 +1,106 @@
1
+ # Proyecto SDD — Instrucciones para Claude Code
2
+
3
+ Este proyecto usa el flujo **SDD-ES** (Spec-Driven Development).
4
+ El estado vive en `.sdd/` y se sincroniza con cada comando `/sdd.*`.
5
+
6
+ ## Recuperación de contexto al inicio
7
+
8
+ Al comenzar cada sesión, antes de pedir nada al usuario:
9
+
10
+ 1. Si existe `.sdd/estado.json`, cárgalo y léelo.
11
+ 2. Muestra un resumen breve (máx. 3 líneas) con la fase actual, feature activa y tareas pendientes.
12
+ 3. Si no existe, sugiere escribir `/sdd` para empezar.
13
+
14
+ Ejemplo de resumen:
15
+ ```
16
+ Estás en: implementar · feature activa: login con email · 3 pasos pendientes.
17
+ ```
18
+
19
+ ## Reglas del proyecto
20
+
21
+ @.sdd/memoria/constitucion.md
22
+ @.sdd/memoria/reglas-proyecto.md
23
+
24
+ - No edites `.sdd/estado.json` manualmente; los comandos `/sdd.*` lo gestionan.
25
+ - Respeta la spec activa: no implementes fuera de ella sin avisar.
26
+ - La memoria de cada agente vive en `.sdd/memoria/agente-{nombre}.md`.
27
+
28
+ ## Hooks activos
29
+
30
+ | Hook | Archivo | Cuándo se ejecuta |
31
+ |------|---------|-------------------|
32
+ | PreToolUse | `claude-hooks/pre-tool-guard.js` | Antes de cada comando Bash/PowerShell |
33
+ | PostToolUse | `claude-hooks/agent-memory.js` | Al finalizar cada herramienta (guarda memoria de agentes) |
34
+
35
+ Los hooks bloquean operaciones destructivas y protegen secretos automáticamente.
36
+ No es necesario configurarlos — ya están activos.
37
+
38
+ ## Convención de commits
39
+
40
+ Formato: `[LAYER] ACTION: descripción breve`
41
+
42
+ | Capa | Cuándo usarla |
43
+ |------|---------------|
44
+ | `[SPEC]` | Cambios en especificaciones o plan |
45
+ | `[IMPL]` | Código de implementación |
46
+ | `[TEST]` | Tests nuevos o modificados |
47
+ | `[INFRA]` | Configuración, CI, dependencias |
48
+ | `[DOCS]` | Documentación |
49
+
50
+ Ejemplos:
51
+ ```
52
+ [IMPL] ADD: login con magic link
53
+ [TEST] FIX: corrige test flaky de autenticación
54
+ [SPEC] UPDATE: aclara criterios de aceptación del módulo de pagos
55
+ ```
56
+
57
+ ## Comandos clave
58
+
59
+ - `/sdd` — punto de entrada: detecta contexto y te guía al siguiente paso.
60
+ - `/sdd.especificar` — define o refina una feature.
61
+ - `/sdd.implementar` — ejecuta las tareas de la feature activa.
62
+ - `/sdd.comprimir aplicar` — reduce el contexto en sesiones largas.
63
+ - `/mejorar-prompt "texto"` — transforma un prompt vago en versión profesional.
64
+
65
+ ---
66
+
67
+ ## Metodología de prompts
68
+
69
+ Antes de ejecutar cualquier instrucción del usuario que modifique archivos o inicie
70
+ una tarea nueva, comprueba que la petición tiene al menos **3 de los 5 componentes**
71
+ de un prompt profesional:
72
+
73
+ | Componente | Descripción | Señal de que falta |
74
+ |---|---|---|
75
+ | **Contexto** | Qué proyecto/stack/estado existe ya | El usuario no menciona el proyecto |
76
+ | **Tarea** | Qué hay que hacer exactamente | La instrucción es de 1-2 palabras |
77
+ | **Restricciones** | Qué no tocar, qué no instalar | No se especifica qué preservar |
78
+ | **Formato** | Cómo quiere el resultado | No aplica a todos los casos |
79
+ | **Verificación** | Cómo confirmar que funcionó | No hay criterio de éxito |
80
+
81
+ Si el prompt tiene **menos de 3 componentes**, responde así:
82
+
83
+ 1. El componente más crítico que falta (solo uno, no todos).
84
+ 2. Una pregunta concreta para obtenerlo.
85
+ 3. Un ejemplo de cómo quedaría el prompt con ese componente añadido.
86
+
87
+ **No inicies la implementación sin la respuesta.**
88
+
89
+ Ejemplo de respuesta cuando falta contexto:
90
+ > "Para implementar esto con precisión necesito saber: ¿qué stack usa el proyecto
91
+ > (Express, FastAPI, Rails...)? Por ejemplo: *'Contexto: Express + TypeScript, ya tiene
92
+ > autenticación JWT, falta el módulo de perfiles de usuario.'*"
93
+
94
+ ---
95
+
96
+ ## Guardia de spec activa
97
+
98
+ Si existe `.sdd/estado.json` y el usuario pide algo que **no está en el alcance de la
99
+ feature activa**, advierte antes de proceder:
100
+
101
+ > "⚠️ Esto parece estar fuera de la spec activa (**{feature}**, fase: **{fase}**).
102
+ > ¿Quieres abrir una spec nueva con `/sdd.especificar`, o confirmas que esto sí
103
+ > forma parte de esta feature?"
104
+
105
+ **No ejecutes sin confirmación explícita.** La spec activa es la fuente de verdad del
106
+ alcance; salir de ella sin avisar introduce deuda técnica invisible.
@@ -34,6 +34,16 @@ agentes:
34
34
  modelo: opus # Recomendado: opus (decisiones difíciles de revertir)
35
35
  descripcion: "Toma decisiones de arquitectura del sistema y diseño técnico de alto nivel."
36
36
 
37
+ architecture-designer:
38
+ activo: true
39
+ modelo: sonnet # Recomendado: sonnet (stack técnico para MVPs)
40
+ descripcion: "Recomienda el stack técnico más simple viable: frontend, backend, BD, deploy."
41
+
42
+ product-designer:
43
+ activo: true
44
+ modelo: opus # Recomendado: opus (decisiones de producto son difíciles de revertir)
45
+ descripcion: "Genera el ProductDesign completo: pantallas P0/P1/P2, user flow, mvp_scope."
46
+
37
47
  disenador-api:
38
48
  activo: true
39
49
  modelo: sonnet # Recomendado: sonnet (contratos estructurados)