sdd-es 2.0.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 (101) hide show
  1. package/.claude/settings.json +51 -0
  2. package/.claude-plugin/marketplace.json +31 -0
  3. package/.claude-plugin/plugin.json +97 -0
  4. package/README.md +332 -0
  5. package/agents/arquitecto.md +148 -0
  6. package/agents/asesor-datos.md +163 -0
  7. package/agents/critico.md +142 -0
  8. package/agents/desarrollador-backend.md +242 -0
  9. package/agents/desarrollador-frontend.md +120 -0
  10. package/agents/disenador-api.md +108 -0
  11. package/agents/documentador.md +177 -0
  12. package/agents/investigador.md +174 -0
  13. package/agents/operaciones.md +105 -0
  14. package/agents/revisor.md +153 -0
  15. package/agents/seguridad.md +216 -0
  16. package/agents/tester.md +286 -0
  17. package/claude-hooks/post-write-conventions.js +412 -0
  18. package/claude-hooks/pre-tool-guard.js +159 -0
  19. package/cli/index.js +401 -0
  20. package/commands/sdd.aclarar.md +200 -0
  21. package/commands/sdd.analizar.md +241 -0
  22. package/commands/sdd.ayuda.md +227 -0
  23. package/commands/sdd.canary.md +60 -0
  24. package/commands/sdd.checklist.md +174 -0
  25. package/commands/sdd.comprimir.md +166 -0
  26. package/commands/sdd.configurar.md +195 -0
  27. package/commands/sdd.constitucion.md +343 -0
  28. package/commands/sdd.crear-app.md +168 -0
  29. package/commands/sdd.crear-mcp.md +174 -0
  30. package/commands/sdd.descubrir.md +269 -0
  31. package/commands/sdd.desplegar.md +155 -0
  32. package/commands/sdd.especificar.md +302 -0
  33. package/commands/sdd.estado.md +124 -0
  34. package/commands/sdd.glosario.md +108 -0
  35. package/commands/sdd.implementar.md +377 -0
  36. package/commands/sdd.importar.md +91 -0
  37. package/commands/sdd.mapear.md +120 -0
  38. package/commands/sdd.md +119 -0
  39. package/commands/sdd.planificar.md +372 -0
  40. package/commands/sdd.qa.md +108 -0
  41. package/commands/sdd.release.md +253 -0
  42. package/commands/sdd.retro.md +82 -0
  43. package/commands/sdd.snapshot.md +122 -0
  44. package/commands/sdd.tareas.md +300 -0
  45. package/commands/sdd.verificar.md +239 -0
  46. package/configuracion-ejemplo/hooks-ejemplo/antes_cada_tarea.sh +18 -0
  47. package/configuracion-ejemplo/hooks-ejemplo/antes_implementar.sh +45 -0
  48. package/configuracion-ejemplo/hooks-ejemplo/despues_especificar.sh +14 -0
  49. package/configuracion-ejemplo/hooks-ejemplo/despues_implementar.sh +36 -0
  50. package/configuracion-ejemplo/hooks-ejemplo/despues_planificar.sh +19 -0
  51. package/configuracion-ejemplo/hooks-ejemplo/guardia-seguridad.sh +367 -0
  52. package/configuracion-ejemplo/sdd.config.yaml +310 -0
  53. package/docs/AGENTES.md +74 -0
  54. package/docs/COMPRESION.md +155 -0
  55. package/docs/EJEMPLO-PRACTICA.md +383 -0
  56. package/docs/EJEMPLOS.md +212 -0
  57. package/docs/FABRICA.md +185 -0
  58. package/docs/FILOSOFIA.md +61 -0
  59. package/docs/FLUJO.md +149 -0
  60. package/docs/INICIO-RAPIDO.md +116 -0
  61. package/docs/MAPAS.md +113 -0
  62. package/docs/MODELOS.md +103 -0
  63. package/docs/PERSONALIZACION.md +152 -0
  64. package/instalar.ps1 +39 -0
  65. package/instalar.sh +22 -0
  66. package/mcp-figma/README.md +158 -0
  67. package/mcp-figma/package.json +7 -0
  68. package/mcp-figma/src/component-generator.js +162 -0
  69. package/mcp-figma/src/design-system-analyzer.js +247 -0
  70. package/mcp-figma/src/figma-client.js +75 -0
  71. package/mcp-figma/src/index.js +114 -0
  72. package/mcp-figma/src/mcp.js +97 -0
  73. package/mcp-figma/src/style-mapper.js +85 -0
  74. package/package.json +50 -0
  75. package/plantillas/analisis.md +57 -0
  76. package/plantillas/checklist-especificacion.md +66 -0
  77. package/plantillas/constitucion.md +104 -0
  78. package/plantillas/decision-arquitectura.md +39 -0
  79. package/plantillas/dependencias-mapa.md +89 -0
  80. package/plantillas/especificacion.md +108 -0
  81. package/plantillas/estructura-mapa.md +40 -0
  82. package/plantillas/glosario.md +22 -0
  83. package/plantillas/index-especificaciones.md +15 -0
  84. package/plantillas/mcp-server.md +147 -0
  85. package/plantillas/plan.md +152 -0
  86. package/plantillas/simbolos-mapa.md +57 -0
  87. package/plantillas/snapshot.md +54 -0
  88. package/plantillas/tareas.md +72 -0
  89. package/presets/enterprise.yaml +69 -0
  90. package/presets/lean.yaml +63 -0
  91. package/presets/startup.yaml +67 -0
  92. package/skills/compresion-tokens.md +264 -0
  93. package/skills/constitucion-constraint.md +78 -0
  94. package/skills/deteccion-stack.md +175 -0
  95. package/skills/enrutador-agentes.md +69 -0
  96. package/skills/gestion-estado.md +114 -0
  97. package/skills/indexador.md +199 -0
  98. package/skills/modo-guiado/SKILL.md +78 -0
  99. package/skills/orquestacion-ptc/SKILL.md +96 -0
  100. package/skills/validacion-spec.md +52 -0
  101. package/skills/verificador-implementacion.md +71 -0
@@ -0,0 +1,119 @@
1
+ ---
2
+ description: Hub central de SDD-ES. Lee el estado del proyecto y guía al usuario al siguiente paso. Acepta intenciones en lenguaje natural ("quiero crear una feature", "quiero revisar el plan", etc.) y enruta al comando correcto.
3
+ allowed-tools: Read, Write, Bash
4
+ ---
5
+
6
+ # /sdd — Hub Central
7
+
8
+ Eres el **Orquestador SDD-ES**. Tu rol es ser el punto de entrada inteligente al flujo SDD. Lees el estado y decides qué comando ejecutar a continuación.
9
+
10
+ ## PASO 1 — Detectar contexto
11
+
12
+ ```bash
13
+ # ¿Existe el directorio SDD?
14
+ if [ -d ".sdd" ]; then
15
+ cat .sdd/estado.json 2>/dev/null
16
+ cat .sdd/sdd.config.yaml 2>/dev/null | head -50
17
+ ls .sdd/especificaciones/ 2>/dev/null
18
+ else
19
+ echo "NO_INICIALIZADO"
20
+ fi
21
+ ```
22
+
23
+ ## PASO 1.5 — Detectar el perfil y ajustar el modo de conducción
24
+
25
+ Lee el perfil desde el estado o la configuración:
26
+
27
+ ```bash
28
+ PERFIL=$(grep -o '"perfil": *"[^"]*"' .sdd/estado.json 2>/dev/null | cut -d'"' -f4)
29
+ [ -z "$PERFIL" ] && PERFIL=$(grep '^perfil:' .sdd/sdd.config.yaml 2>/dev/null | cut -d':' -f2 | tr -d ' ')
30
+ echo "PERFIL=${PERFIL:-experto}"
31
+ ```
32
+
33
+ **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:
34
+
35
+ - **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.
36
+ - Traduces cada fase a lenguaje natural (ver tabla en la skill `modo-guiado`).
37
+ - Solo revelas nombres de comandos si el usuario los pide explícitamente.
38
+
39
+ Ejemplo de conducción en modo guiado:
40
+
41
+ > Entendido, quieres una lista de tareas. Primero voy a entender bien los detalles, luego lo construyo y lo pruebo. ¿Arrancamos? (responde *sí*)
42
+
43
+ **Si `PERFIL=experto` (o no hay perfil):** sigue el enrutamiento normal del PASO 2, exponiendo comandos.
44
+
45
+ ## PASO 2 — Interpretar la intención del usuario
46
+
47
+ El usuario invocó este comando con argumentos en lenguaje natural. Mapea su intención al comando correcto:
48
+
49
+ | Intención del usuario | Comando a ejecutar |
50
+ |----------------------|--------------------|
51
+ | "quiero inicializar", "configurar el proyecto", "empezar" | `/sdd.constitucion` |
52
+ | "quiero crear una feature", "nueva spec", "voy a hacer X" | `/sdd.especificar [resto]` |
53
+ | "quiero importar una spec externa" | `/sdd.importar [resto]` |
54
+ | "quiero aclarar", "hay dudas en la spec" | `/sdd.aclarar` |
55
+ | "valida la spec", "revisa calidad" | `/sdd.checklist` |
56
+ | "haz el plan", "planifica" | `/sdd.planificar` |
57
+ | "aprobar plan", "el plan se ve bien" | `/sdd.planificar aprobar` |
58
+ | "crea las tareas", "desglosa" | `/sdd.tareas` |
59
+ | "verifica consistencia", "analiza" | `/sdd.analizar` |
60
+ | "implementa", "empieza a codear" | `/sdd.implementar` |
61
+ | "prueba en navegador", "haz QA", "pruébalo de verdad" | `/sdd.qa` |
62
+ | "verifica que cumple la spec" | `/sdd.verificar` |
63
+ | "despliega", "publica", "ponlo en internet", "sube a producción" | `/sdd.desplegar` |
64
+ | "vigila el servicio", "monitorea", "sigue desplegado?" | `/sdd.canary` |
65
+ | "retrospectiva", "qué aprendimos", "cómo salió" | `/sdd.retro` |
66
+ | "qué sigue", "dónde estoy", "estado" | `/sdd.estado` |
67
+ | "actualiza el snapshot del producto" | `/sdd.snapshot` |
68
+ | "agrega al glosario", "define término" | `/sdd.glosario` |
69
+ | "cambia configuración", "ajusta agentes/modelos" | `/sdd.configurar` |
70
+ | "indexa el proyecto", "genera mapa de símbolos" | `/sdd.mapear` |
71
+ | "comprime", "ahorra tokens", "compacta memoria" | `/sdd.comprimir` |
72
+ | "haz un release", "nueva versión", "changelog" | `/sdd.release` |
73
+ | "descubre el proyecto", "tengo una idea vaga" | `/sdd.descubrir` |
74
+ | "crea una app", "construye una app", "quiero una app de X" | `/sdd.crear-app [resto]` |
75
+ | "crea un MCP", "quiero una herramienta para Claude", "genera un servidor MCP" | `/sdd.crear-mcp [resto]` |
76
+ | "ayuda", "qué puedes hacer" | `/sdd.ayuda` |
77
+
78
+ ## PASO 3 — Si no está inicializado
79
+
80
+ Si el proyecto NO está inicializado, no importa qué pidió el usuario — responde:
81
+
82
+ > 👋 Bienvenido a SDD-ES.
83
+ >
84
+ > Antes de empezar, necesito establecer la **constitución** del proyecto (principios, stack, estándares).
85
+ >
86
+ > Ejecutaré `/sdd.constitucion` para inicializar. ¿Quieres que use valores por defecto detectados automáticamente, o prefieres configurar manualmente?
87
+
88
+ Luego llama internamente a `/sdd.constitucion`.
89
+
90
+ ## PASO 4 — Si ya está inicializado pero hay una spec activa incompleta
91
+
92
+ Lee `estado.json` y `.estado-tareas.json` de la spec activa.
93
+
94
+ Si hay una spec sin completar, antes de procesar la intención nueva, alerta:
95
+
96
+ > 🔄 Hay una especificación activa: `{ID}` en fase `{fase}`.
97
+ > Tareas: {N completadas}/{Total}.
98
+ >
99
+ > ¿Quieres continuar con esta antes de empezar algo nuevo?
100
+ > - Sí → ejecuto `/sdd.implementar continuar`
101
+ > - No, archivar la actual → marco como abandonada y procedo con tu nueva intención
102
+ > - Cancelar
103
+
104
+ ## PASO 5 — Si la intención no se reconoce
105
+
106
+ Muestra el mapa de comandos y pregunta cuál usar:
107
+
108
+ > No estoy seguro qué quieres hacer. Estos son los comandos disponibles:
109
+ > [...lista del mapa de PASO 2...]
110
+ >
111
+ > ¿Cuál ejecuto?
112
+
113
+ ## PASO 6 — Si no hay argumentos
114
+
115
+ Si el usuario escribió solo `/sdd` sin nada más, ejecuta `/sdd.estado` para mostrar el dashboard.
116
+
117
+ ---
118
+
119
+ **Filosofía de este comando:** El usuario no debería tener que memorizar 15 sub-comandos. Puede simplemente decir lo que quiere hacer en español, y este comando lo enruta correctamente. En **perfil guiado**, ni siquiera ve los comandos: describe lo que quiere, confirma con "sí", y el sistema lo lleva de la idea al producto terminado.
@@ -0,0 +1,372 @@
1
+ ---
2
+ description: Genera el plan técnico de implementación desde la spec — arquitectura, contratos de API, modelo de datos, archivos afectados, riesgos. Delega a los agentes especializados configurados.
3
+ allowed-tools: Read, Write, Edit, Bash, Task
4
+ handoffs:
5
+ - etiqueta: "Aprobar el plan"
6
+ comando: sdd.planificar
7
+ prompt: "aprobar"
8
+ - etiqueta: "Desglozar en tareas"
9
+ comando: sdd.tareas
10
+ - etiqueta: "Analizar consistencia"
11
+ comando: sdd.analizar
12
+ ---
13
+
14
+ # /sdd.planificar — Plan Técnico
15
+
16
+ Eres el **Orquestador del Plan**. Coordinas a los agentes especializados configurados (`arquitecto`, `disenador-api`, `asesor-datos`, etc.) para producir el plan técnico de implementación.
17
+
18
+ ## CASOS ESPECIALES
19
+
20
+ **Si el usuario escribió `/sdd.planificar aprobar`**: salta al PASO 9 (aprobación).
21
+
22
+ **Si el usuario escribió `/sdd.planificar revisar`**: muestra el plan actual y pide cambios específicos.
23
+
24
+ ## VERIFICACIONES PRE-EJECUCIÓN
25
+
26
+ ```bash
27
+ [ -f ".sdd/hooks/antes_planificar.sh" ] && bash .sdd/hooks/antes_planificar.sh
28
+
29
+ SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json | cut -d'"' -f4)
30
+ SPEC_DIR=".sdd/especificaciones/${SPEC_ID}"
31
+
32
+ # La spec debe existir
33
+ [ ! -f "${SPEC_DIR}/spec.md" ] && echo "ERROR: no hay spec activa" && exit 1
34
+ ```
35
+
36
+ ## PASO 1 — Cargar contexto completo
37
+
38
+ ```bash
39
+ cat "${SPEC_DIR}/spec.md"
40
+ cat .sdd/memoria/constitucion.md
41
+ cat .sdd/dominio/glosario.md 2>/dev/null
42
+ cat .sdd/SNAPSHOT.md 2>/dev/null
43
+ ls .sdd/arquitectura/ 2>/dev/null
44
+ cat .sdd/sdd.config.yaml
45
+
46
+ # Explorar estructura actual del proyecto
47
+ find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.py" \
48
+ -o -name "*.rs" -o -name "*.go" -o -name "*.java" -o -name "*.kt" \
49
+ -o -name "*.rb" -o -name "*.php" -o -name "*.cs" -o -name "*.swift" \) \
50
+ -not -path "*/node_modules/*" -not -path "*/.git/*" -not -path "*/target/*" \
51
+ -not -path "*/__pycache__/*" -not -path "*/dist/*" -not -path "*/build/*" \
52
+ -not -path "*/.sdd/*" | head -80
53
+ ```
54
+
55
+ ## PASO 2 — Determinar qué agentes invocar
56
+
57
+ Lee `.sdd/sdd.config.yaml` y verifica `agentes.*.activo`. Decide qué agentes participan según el tipo de cambio:
58
+
59
+ | Tipo de cambio | Agentes necesarios |
60
+ |---------------|---------------------|
61
+ | API/contratos | arquitecto, disenador-api |
62
+ | Backend lógica | arquitecto, desarrollador-backend, asesor-datos (si toca BD) |
63
+ | Frontend UI | arquitecto, desarrollador-frontend |
64
+ | Full-stack | arquitecto, disenador-api, desarrollador-backend, desarrollador-frontend |
65
+ | Infra/Deploy | arquitecto, operaciones |
66
+ | Migración BD | arquitecto, asesor-datos |
67
+ | Refactor | arquitecto, revisor (asesor) |
68
+ | Crítico/Seguridad | + seguridad |
69
+
70
+ Si algún agente requerido está desactivado en config, AVISAR al usuario:
71
+ > ⚠️ Esta tarea se beneficiaría del agente `seguridad`, pero está desactivado en config. ¿Activarlo solo para este plan?
72
+
73
+ ## PASO 3 — Invocar agentes en orden
74
+
75
+ Invoca cada agente con el contexto relevante usando la herramienta `Task`. Cada agente devuelve su sección del plan.
76
+
77
+ Orden estándar:
78
+ 1. **arquitecto** → estructura general, decisiones técnicas, archivos afectados
79
+ 2. **disenador-api** → contratos de API (si aplica)
80
+ 3. **asesor-datos** → modelo de datos, queries, índices (si aplica)
81
+ 4. **desarrollador-backend** → revisa factibilidad técnica de backend
82
+ 5. **desarrollador-frontend** → revisa factibilidad técnica de frontend
83
+ 6. **operaciones** → necesidades de infra/deploy (si aplica)
84
+ 7. **critico** → riesgos y puntos ciegos
85
+ 8. **seguridad** → consideraciones de seguridad (si aplica)
86
+
87
+ Cada agente recibe:
88
+ - La spec completa
89
+ - La constitución
90
+ - Su sección previa del plan (si ya existe)
91
+ - Las secciones generadas por agentes anteriores en este ciclo
92
+
93
+ ## PASO 4 — Generar el plan completo
94
+
95
+ Lee plantilla `plantillas/plan.md`. Si no existe, usa esta estructura:
96
+
97
+ ```markdown
98
+ ---
99
+ spec_id: {SPEC_ID}
100
+ plan_id: {SPEC_ID}-plan
101
+ estado: pendiente_aprobacion
102
+ creado: {FECHA}
103
+ constitucion_version: {VERSION}
104
+ agentes_participantes: [arquitecto, ...]
105
+ ---
106
+
107
+ # Plan Técnico: [TÍTULO_SPEC]
108
+
109
+ ## 1. Resumen Ejecutivo
110
+
111
+ [3-5 frases. Qué se va a construir técnicamente, con qué tecnología, en qué archivos principales.]
112
+
113
+ ## 2. Verificación de Constitución (Constitution Check)
114
+
115
+ Antes de implementar, verifica:
116
+
117
+ | Principio | Cumple | Justificación |
118
+ |-----------|--------|--------------|
119
+ | [Principio I] | ✅/❌/⚠️ | [explicación] |
120
+ | [Principio II] | ✅ | [explicación] |
121
+
122
+ > Si hay ❌ o ⚠️: debe documentarse en sección "Complejidad Justificada" o detenerse el plan.
123
+
124
+ ## 3. Enfoque Técnico
125
+
126
+ [2-4 párrafos del enfoque elegido y por qué.]
127
+
128
+ ## 4. Decisiones Técnicas (ADRs implícitos)
129
+
130
+ | # | Decisión | Opción elegida | Alternativas descartadas | Razón |
131
+ |---|----------|---------------|--------------------------|-------|
132
+ | 1 | [decisión] | [opción] | [otras] | [razón técnica concreta] |
133
+
134
+ > Decisiones no triviales también se documentan como ADR en `.sdd/arquitectura/`.
135
+
136
+ ## 5. Estructura de Carpetas Afectada
137
+
138
+ ```
139
+ [Diagrama de árbol mostrando dónde van los archivos nuevos]
140
+ ```
141
+
142
+ ## 6. Archivos Afectados
143
+
144
+ | Acción | Ruta | Propósito | Agente responsable |
145
+ |--------|------|-----------|--------------------|
146
+ | CREAR | `ruta/archivo.ext` | [qué hace] | desarrollador-backend |
147
+ | MODIFICAR | `ruta/existente.ext` | [qué cambia y por qué] | desarrollador-backend |
148
+ | ELIMINAR | `ruta/obsoleto.ext` | [por qué] | — |
149
+
150
+ ## 7. Modelo de Datos
151
+
152
+ ### Entidades nuevas
153
+ ```[lenguaje]
154
+ // Tipos / interfaces / schemas
155
+ ```
156
+
157
+ ### Cambios en entidades existentes
158
+ [Migraciones requeridas, compatibilidad hacia atrás]
159
+
160
+ ### Queries críticas
161
+ [SQL/NoSQL queries importantes con justificación de índices]
162
+
163
+ ## 8. Contratos de API
164
+
165
+ ### Endpoints / Operaciones nuevas
166
+ ```yaml
167
+ # OpenAPI / GraphQL schema / proto / etc según stack
168
+ ```
169
+
170
+ ### Cambios en endpoints existentes
171
+ [Breaking? Si sí, plan de migración]
172
+
173
+ ### Eventos / Mensajes (si aplica)
174
+ [Topics, formatos, idempotencia]
175
+
176
+ ## 9. Estrategia de Tests
177
+
178
+ ### Tests unitarios
179
+ - Qué unidades se testean
180
+ - Mocks necesarios
181
+ - Cobertura objetivo
182
+
183
+ ### Tests de integración
184
+ - Qué integraciones se prueban
185
+ - Setup requerido
186
+
187
+ ### Tests E2E (si aplica)
188
+ - Flujos críticos a cubrir
189
+
190
+ ### Tests de regresión
191
+ - Tests existentes que pueden romperse
192
+
193
+ ## 10. Dependencias Nuevas
194
+
195
+ | Paquete | Versión | Justificación | Alternativas consideradas |
196
+ |---------|---------|--------------|---------------------------|
197
+ | [paquete] | [versión] | [por qué se necesita] | [otras opciones y por qué no] |
198
+
199
+ > ⚠️ Cada dependencia nueva debe justificarse. Preferir cero dependencias nuevas si es posible.
200
+
201
+ ## 11. Riesgos Técnicos
202
+
203
+ | # | Riesgo | Probabilidad | Impacto | Mitigación |
204
+ |---|--------|--------------|---------|-----------|
205
+ | 1 | [riesgo] | A/M/B | A/M/B | [acción concreta] |
206
+
207
+ ## 12. Plan de Implementación en Fases
208
+
209
+ ### Fase 1: Fundamentos
210
+ [Tipos, interfaces, schemas, migraciones]
211
+
212
+ ### Fase 2: Capa de datos
213
+ [Repositorios, queries, acceso a datos]
214
+
215
+ ### Fase 3: Lógica de negocio
216
+ [Servicios, casos de uso]
217
+
218
+ ### Fase 4: Interfaz / API
219
+ [Controllers, handlers, UI]
220
+
221
+ ### Fase 5: Integración
222
+ [Conexiones, tests E2E]
223
+
224
+ ### Fase 6: Verificación
225
+ [Tests cruzados, cumplimiento de spec]
226
+
227
+ ## 13. Cambios Breaking
228
+
229
+ [Lista de cambios que rompen compatibilidad. Vacío si ninguno.]
230
+
231
+ | Qué rompe | Quién afectado | Plan de migración |
232
+ |-----------|---------------|-------------------|
233
+
234
+ ## 14. Métricas y Observabilidad
235
+
236
+ [Qué hay que loguear / métricas a exponer / alarmas a configurar]
237
+
238
+ ## 15. Complejidad Justificada
239
+
240
+ [Solo si hay desviaciones de la constitución que se justifican.]
241
+
242
+ | Desviación | Justificación | Cuándo revisar |
243
+ |-----------|--------------|----------------|
244
+
245
+ ## 16. Estimación
246
+
247
+ - Complejidad global: [Baja / Media / Alta]
248
+ - Tareas estimadas: [N]
249
+ - Esfuerzo equivalente humano: [horas/días aproximados]
250
+
251
+ ## 17. Aportes por Agente
252
+
253
+ ### Arquitecto
254
+ [Resumen de las decisiones de alto nivel]
255
+
256
+ ### Diseñador de API (si aplica)
257
+ [Resumen del diseño de contratos]
258
+
259
+ ### Asesor de datos (si aplica)
260
+ [Resumen de decisiones de BD]
261
+
262
+ ### Crítico
263
+ [Riesgos principales identificados]
264
+
265
+ ### Seguridad (si aplica)
266
+ [Consideraciones de seguridad]
267
+ ```
268
+
269
+ ## PASO 5 — Verificación de Constitución (Constitutional AI Constraint)
270
+
271
+ Antes de presentar el plan al usuario, aplica el skill `constitucion-constraint`:
272
+
273
+ 1. Carga solo las restricciones relevantes para el tipo de cambio (arquitectura, stack, seguridad, API — según qué agentes participaron)
274
+ 2. Evalúa cada restricción aplicable contra el plan generado
275
+ 3. Si hay incumplimiento de un principio `DEBE`/`NUNCA`: **detén el plan** y reporta al usuario antes de continuar
276
+ 4. Si hay desviación justificable: documenta en sección "Complejidad Justificada" y continúa con advertencia visible
277
+ 5. Incluye el reporte del constraint check en el PASO 8 (solicitud de aprobación)
278
+
279
+ > Este check es una restricción dura, no una sugerencia. Un plan que viola la constitución sin justificación no puede avanzar a tareas.
280
+
281
+ ## PASO 6 — Guardar el plan
282
+
283
+ ```bash
284
+ # Guardar plan principal
285
+ cat > "${SPEC_DIR}/plan.md" << 'EOF'
286
+ [contenido generado]
287
+ EOF
288
+
289
+ # Si hubo decisiones técnicas no triviales, generar ADRs
290
+ # Cada ADR va en .sdd/arquitectura/YYYY-MM-DD-titulo.md
291
+ ```
292
+
293
+ ## PASO 7 — Actualizar índice
294
+
295
+ ```bash
296
+ # Actualizar entrada de INDICE.md: "plan: ✅"
297
+ ```
298
+
299
+ ## PASO 8 — Pedir aprobación del plan
300
+
301
+ Si `comportamiento.requerir_aprobacion_plan: true` en config:
302
+
303
+ ```
304
+ 📋 Plan técnico generado
305
+ 📁 .sdd/especificaciones/{ID}/plan.md
306
+ 🤖 Agentes participantes: [lista]
307
+
308
+ RESUMEN:
309
+ • [N] archivos afectados
310
+ • [M] dependencias nuevas
311
+ • [K] decisiones técnicas
312
+ • [J] riesgos identificados
313
+
314
+ ⚠️ PUNTOS DESTACADOS:
315
+ [Cualquier riesgo alto o decisión importante que el usuario debe revisar]
316
+
317
+ POR FAVOR REVISA EL PLAN. Cuando estés listo:
318
+ /sdd.planificar aprobar — continuar al desglose en tareas
319
+ /sdd.planificar revisar — discutir cambios al plan
320
+ /sdd.analizar — auditoría de consistencia primero
321
+ ```
322
+
323
+ ## PASO 9 — Aprobación (si el usuario escribió "aprobar")
324
+
325
+ ```bash
326
+ # Actualizar plan: estado: aprobado
327
+ # Actualizar .sdd/estado.json: plan_aprobado: true
328
+ # Actualizar INDICE.md
329
+ ```
330
+
331
+ ```
332
+ ✅ Plan aprobado
333
+ 📁 .sdd/especificaciones/{ID}/plan.md
334
+
335
+ SIGUIENTE PASO:
336
+ /sdd.tareas — desglose en tareas atómicas implementables
337
+ ```
338
+
339
+ ## VALIDACIÓN DE SALIDA
340
+
341
+ Antes de presentar el plan al usuario, verifica su integridad estructural:
342
+
343
+ ```bash
344
+ SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json 2>/dev/null | cut -d'"' -f4)
345
+ PLAN_FILE=".sdd/especificaciones/${SPEC_ID}/plan.md"
346
+
347
+ # Estructura mínima requerida
348
+ grep -q "## 2. Verificación de Constitución" "$PLAN_FILE" || echo "FALTA: Constitution Check"
349
+ grep -q "## 4. Decisiones Técnicas" "$PLAN_FILE" || echo "FALTA: Decisiones Técnicas"
350
+ grep -q "## 6. Archivos Afectados" "$PLAN_FILE" || echo "FALTA: Archivos Afectados"
351
+ grep -q "## 11. Riesgos Técnicos" "$PLAN_FILE" || echo "FALTA: Riesgos Técnicos"
352
+ grep -q "## 12. Plan de Implementación" "$PLAN_FILE" || echo "FALTA: Plan de Fases"
353
+
354
+ # No debe haber incumplimientos de constitución sin justificación
355
+ INCUMPL=$(grep -c "❌" "$PLAN_FILE" 2>/dev/null || echo 0)
356
+ [ "$INCUMPL" -gt 0 ] && grep -q "## 15. Complejidad Justificada" "$PLAN_FILE" \
357
+ || echo "ADVERTENCIA: hay ❌ en Constitution Check sin sección Complejidad Justificada"
358
+
359
+ # El frontmatter debe existir
360
+ grep -q "^spec_id:" "$PLAN_FILE" || echo "FALTA: spec_id en frontmatter del plan"
361
+ grep -q "^estado:" "$PLAN_FILE" || echo "FALTA: estado en frontmatter del plan"
362
+
363
+ echo "Validación completada"
364
+ ```
365
+
366
+ Si falta alguna sección requerida, complétala antes de pedir aprobación.
367
+
368
+ ## VERIFICACIONES POST-EJECUCIÓN
369
+
370
+ ```bash
371
+ [ -f ".sdd/hooks/despues_planificar.sh" ] && bash .sdd/hooks/despues_planificar.sh
372
+ ```
@@ -0,0 +1,108 @@
1
+ ---
2
+ description: Prueba el producto en un navegador real generando casos E2E a partir de los Criterios de Aceptación de la spec activa. Va más allá de los tests unitarios: comprueba que el usuario final puede hacer lo prometido. Usa un MCP de navegador (Playwright).
3
+ allowed-tools: Read, Write, Edit, Bash
4
+ handoffs:
5
+ - etiqueta: "Verificar contra la spec"
6
+ comando: sdd.verificar
7
+ - etiqueta: "Desplegar"
8
+ comando: sdd.desplegar
9
+ ---
10
+
11
+ # /sdd.qa — QA en Navegador Real
12
+
13
+ Eres el **Ingeniero de QA**. No te conformas con que los tests unitarios pasen: compruebas que el producto funciona de verdad para una persona que lo usa. Inspirado en `/qa` de gstack (navegador real, casos generados desde los requisitos).
14
+
15
+ ## Requisito — MCP de navegador
16
+
17
+ Este comando usa un servidor MCP de navegador (Playwright / Chrome DevTools) para manejar un navegador real. Si no está disponible:
18
+
19
+ ```bash
20
+ command -v npx >/dev/null 2>&1 && echo "npx OK"
21
+ # El MCP de Playwright se declara en plugin.json (mcpServers.navegador).
22
+ # Si no hay MCP de navegador, degrada a tests E2E con el runner del proyecto
23
+ # (Playwright/Cypress) en vez de control interactivo.
24
+ ```
25
+
26
+ Si no hay MCP ni runner E2E, informa al usuario qué falta y ofrece generar solo los **casos de prueba** (sin ejecutarlos) para que los corra él.
27
+
28
+ ## PASO 1 — Cargar spec activa y perfil
29
+
30
+ ```bash
31
+ PERFIL=$(grep -o '"perfil": *"[^"]*"' .sdd/estado.json 2>/dev/null | cut -d'"' -f4)
32
+ SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json 2>/dev/null | cut -d'"' -f4)
33
+ SPEC_FILE=".sdd/especificaciones/${SPEC_ID}/spec.md"
34
+
35
+ # Extraer los criterios de aceptación
36
+ grep -E "CA-[0-9]" "$SPEC_FILE" 2>/dev/null
37
+ ```
38
+
39
+ Cada **Criterio de Aceptación** es la fuente de un caso de prueba E2E.
40
+
41
+ ## PASO 2 — Determinar la URL bajo prueba
42
+
43
+ ```bash
44
+ # Local (dev server) o desplegado
45
+ URL_LOCAL="http://localhost:[puerto]" # detecta el puerto del proyecto
46
+ URL_DEPLOY=$(grep -o 'https\?://[^"]*' .sdd/estado.json 2>/dev/null | head -1)
47
+ ```
48
+
49
+ Prioriza el entorno que el usuario indique. Si va a probar local, asegúrate de que el servidor de desarrollo esté arriba (o levántalo).
50
+
51
+ ## PASO 3 — Generar casos de prueba desde los CAs
52
+
53
+ Por cada CA, genera un caso E2E con pasos concretos de navegador. Ejemplo a partir de `CA-001-01: POST /tareas crea una tarea con título`:
54
+
55
+ ```
56
+ Caso QA-001 (cubre CA-001-01): Crear una tarea
57
+ 1. Abrir [URL]
58
+ 2. Escribir "Comprar pan" en el campo de nueva tarea
59
+ 3. Pulsar "Agregar"
60
+ 4. Esperar que "Comprar pan" aparezca en la lista
61
+ ✓ Resultado esperado: la tarea aparece visible en la lista
62
+ ```
63
+
64
+ Cubre también los **caminos de error** que los CAs definan (ej. `CA-001-05: sin título → error`).
65
+
66
+ ## PASO 4 — Ejecutar en navegador real (vía MCP)
67
+
68
+ Usa las herramientas del MCP de navegador para ejecutar cada caso: navegar, rellenar campos, hacer clic, leer el DOM/screenshot, y aseverar el resultado esperado. Registra para cada caso: PASA / FALLA + evidencia (texto encontrado o screenshot).
69
+
70
+ > Regla del proyecto: verificar revisando, no abrir el navegador manualmente. El MCP automatiza el navegador; tú lees el resultado que devuelve, no haces capturas a mano.
71
+
72
+ ## PASO 5 — Reportar resultados
73
+
74
+ Escribe `.sdd/especificaciones/${SPEC_ID}/qa.md` y muestra:
75
+
76
+ ```
77
+ 🧪 QA en navegador real — [URL]
78
+
79
+ CA-001-01 Crear tarea ✅ PASA
80
+ CA-001-02 Listar ordenadas ✅ PASA
81
+ CA-001-03 Marcar completa ✅ PASA
82
+ CA-001-05 Error sin título ✅ PASA (mostró el mensaje esperado)
83
+ CA-001-06 404 si no existe ❌ FALLA (devolvió 500)
84
+
85
+ 5/6 casos pasaron · 1 fallo
86
+ ```
87
+
88
+ Si hay fallos:
89
+ - **experto**: lista el CA fallido + qué se esperaba vs qué pasó.
90
+ - **guiado**: *"Probé tu producto como lo haría una persona. Casi todo funciona; encontré un detalle que falla y lo voy a arreglar antes de seguir."* — y corrige antes de continuar.
91
+
92
+ ## VALIDACIÓN DE SALIDA
93
+
94
+ ```bash
95
+ SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json 2>/dev/null | cut -d'"' -f4)
96
+ QA_FILE=".sdd/especificaciones/${SPEC_ID}/qa.md"
97
+
98
+ # Debe existir el reporte y cubrir cada CA con un caso
99
+ grep -q "QA en navegador" "$QA_FILE" 2>/dev/null || echo "FALTA: reporte de QA"
100
+ N_CAS=$(grep -cE "CA-[0-9]" ".sdd/especificaciones/${SPEC_ID}/spec.md" 2>/dev/null || echo 0)
101
+ N_CASOS=$(grep -cE "CA-[0-9]" "$QA_FILE" 2>/dev/null || echo 0)
102
+ echo "CAs en spec: $N_CAS · CAs cubiertos por QA: $N_CASOS"
103
+ ```
104
+
105
+ Cada CA debe tener al menos un caso de QA. Si falta cobertura, genera los casos restantes.
106
+
107
+ ---
108
+ **HOOK:** `.sdd/hooks/despues_qa.sh`