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,300 @@
1
+ ---
2
+ description: Desglosa el plan en tareas atómicas, ordenadas por dependencias, con criterios de verificación concretos y asignación de agente responsable.
3
+ allowed-tools: Read, Write, Edit, Bash
4
+ handoffs:
5
+ - etiqueta: "Auditar consistencia"
6
+ comando: sdd.analizar
7
+ - etiqueta: "Empezar implementación"
8
+ comando: sdd.implementar
9
+ ---
10
+
11
+ # /sdd.tareas — Desglose en Tareas
12
+
13
+ Eres el **Planificador de Tareas**. Transformas el plan en una secuencia ejecutable.
14
+
15
+ ## Filosofía
16
+
17
+ Una buena tarea:
18
+ - **Atómica**: una responsabilidad. Si tiene "y" en el medio, divídela.
19
+ - **Verificable**: tiene un criterio booleano (pasa/no pasa).
20
+ - **Independiente**: el agente puede ejecutarla sin necesitar al humano.
21
+ - **Pequeña**: < 2 horas de trabajo equivalente humano.
22
+ - **Ordenable**: sus dependencias están claras.
23
+ - **Asignable**: tiene un agente responsable.
24
+
25
+ ## PASO 1 — Verificar prerequisitos
26
+
27
+ ```bash
28
+ [ -f ".sdd/hooks/antes_tareas.sh" ] && bash .sdd/hooks/antes_tareas.sh
29
+
30
+ SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json | cut -d'"' -f4)
31
+ SPEC_DIR=".sdd/especificaciones/${SPEC_ID}"
32
+
33
+ # Verificar que el plan está aprobado
34
+ APROBADO=$(grep -o '"plan_aprobado": [a-z]*' .sdd/estado.json | cut -d' ' -f2)
35
+ if [ "$APROBADO" != "true" ]; then
36
+ echo "El plan no está aprobado. Ejecuta /sdd.planificar primero."
37
+ exit 1
38
+ fi
39
+
40
+ cat "${SPEC_DIR}/spec.md"
41
+ cat "${SPEC_DIR}/plan.md"
42
+ cat .sdd/memoria/constitucion.md
43
+ ```
44
+
45
+ ## PASO 2 — Orden estándar de tareas
46
+
47
+ Genera tareas siguiendo este orden por defecto (cada paso puede omitirse si no aplica al cambio):
48
+
49
+ ### Fase A — Fundamentos
50
+ 1. Migraciones de BD (si aplica)
51
+ 2. Tipos / interfaces / contratos (DTOs, schemas, modelos)
52
+ 3. Configuración nueva / variables de entorno
53
+
54
+ ### Fase B — Tests primero (si la constitución exige TDD)
55
+ 4. Tests unitarios fallidos esperados (test de la API por implementar)
56
+
57
+ ### Fase C — Capa de datos
58
+ 5. Repositorios / accesos a BD
59
+ 6. Tests unitarios de la capa de datos
60
+
61
+ ### Fase D — Lógica de negocio
62
+ 7. Servicios / casos de uso
63
+ 8. Tests unitarios de servicios
64
+
65
+ ### Fase E — Interfaz / API
66
+ 9. Controllers / handlers / endpoints
67
+ 10. Validaciones de input
68
+ 11. Tests de integración
69
+
70
+ ### Fase F — UI (si aplica)
71
+ 12. Componentes / vistas
72
+ 13. Estado del cliente
73
+ 14. Tests de UI
74
+
75
+ ### Fase G — Integración
76
+ 15. Cableado entre capas
77
+ 16. Tests E2E
78
+
79
+ ### Fase H — Verificación y limpieza
80
+ 17. Verificación contra criterios de aceptación
81
+ 18. Documentación
82
+ 19. Limpieza de dead code
83
+
84
+ ## PASO 3 — Asignar agente responsable
85
+
86
+ Cada tarea debe asignarse al agente correcto. Lee `.sdd/sdd.config.yaml` para ver qué agentes están activos.
87
+
88
+ | Tipo de tarea | Agente |
89
+ |--------------|--------|
90
+ | Tipos, interfaces, contratos | arquitecto o disenador-api |
91
+ | Migraciones, esquemas BD | asesor-datos |
92
+ | Servicios backend, controllers | desarrollador-backend |
93
+ | Componentes UI, estado | desarrollador-frontend |
94
+ | Tests unitarios/integración | tester o el dev que escribió la lógica |
95
+ | Tests E2E | tester |
96
+ | CI/CD, infra | operaciones |
97
+ | Validación final cruzada | revisor |
98
+ | Documentación | documentador |
99
+
100
+ ## PASO 4 — Generar tareas.md
101
+
102
+ Lee plantilla `plantillas/tareas.md`. Si no existe, usa esta:
103
+
104
+ ```markdown
105
+ ---
106
+ spec_id: {SPEC_ID}
107
+ total_tareas: {N}
108
+ estado: pendiente
109
+ generado: {FECHA}
110
+ ---
111
+
112
+ # Tareas: [TÍTULO_SPEC]
113
+
114
+ ## Progreso
115
+
116
+ ```
117
+ [░░░░░░░░░░░░░░░░░░░░] 0% (0/{N})
118
+ ```
119
+
120
+ | Total | Pendientes | En progreso | Completadas | Bloqueadas |
121
+ |-------|------------|-------------|-------------|------------|
122
+ | {N} | {N} | 0 | 0 | 0 |
123
+
124
+ ## Leyenda de estados
125
+ - ⬜ pendiente
126
+ - 🔧 en_progreso
127
+ - ✅ completada
128
+ - ❌ bloqueada
129
+ - ⏭️ omitida (con justificación)
130
+
131
+ ---
132
+
133
+ ## T001 — [Nombre descriptivo]
134
+
135
+ **Fase:** A (Fundamentos)
136
+ **Agente:** arquitecto
137
+ **Modelo recomendado:** opus (según config: `agentes.arquitecto.modelo`)
138
+ **Archivos:** `ruta/nuevo.ext` (CREAR)
139
+ **Depende de:** —
140
+ **Estado:** ⬜ pendiente
141
+ **Tiempo estimado:** S/M/L (small/medium/large)
142
+
143
+ ### Qué hacer
144
+
145
+ [Descripción específica e inequívoca de qué implementar.
146
+ Debe poder ejecutarse sin necesidad de re-leer la spec.]
147
+
148
+ ### Contexto relevante (de spec/plan)
149
+
150
+ - CA cubierto: CA-001-01, CA-001-02
151
+ - Decisión técnica aplicable: #3 (del plan)
152
+
153
+ ### Criterio de verificación
154
+
155
+ ```bash
156
+ # Comando ejecutable que retorna 0 si la tarea está completa, 1 si no
157
+ [test concreto o comando]
158
+ ```
159
+
160
+ O alternativamente:
161
+ - [ ] El archivo X existe
162
+ - [ ] El símbolo Y se exporta
163
+ - [ ] Test Z pasa
164
+
165
+ ### Notas / Gotchas
166
+
167
+ [Cualquier cosa que el implementador deba saber. Patrones existentes a seguir, decisiones ya tomadas, etc.]
168
+
169
+ ---
170
+
171
+ ## T002 — [...]
172
+
173
+ [mismo formato]
174
+
175
+ ---
176
+
177
+ ## Matriz de Cobertura de CAs
178
+
179
+ | Criterio de Aceptación | Tareas que lo cubren |
180
+ |------------------------|----------------------|
181
+ | CA-001-01 | T001, T003, T008 |
182
+ | CA-001-02 | T002, T009 |
183
+ | ... | ... |
184
+
185
+ ## Diagrama de Dependencias
186
+
187
+ ```
188
+ T001 ──┐
189
+ ├──> T003 ──> T005 ──> T008
190
+ T002 ──┘ │
191
+ └──> T007
192
+ T004 ──> T006
193
+ ```
194
+
195
+ ## Historial de Cambios de Estado
196
+
197
+ | Tarea | Anterior | Nuevo | Fecha | Notas |
198
+ |-------|----------|-------|-------|-------|
199
+ ```
200
+
201
+ ## PASO 5 — Generar estado de tareas
202
+
203
+ Crea `.sdd/especificaciones/{ID}/.estado-tareas.json`:
204
+
205
+ ```json
206
+ {
207
+ "spec_id": "{SPEC_ID}",
208
+ "total": N,
209
+ "completadas": 0,
210
+ "en_progreso": null,
211
+ "bloqueadas": 0,
212
+ "tareas": {
213
+ "T001": {
214
+ "estado": "pendiente",
215
+ "agente": "arquitecto",
216
+ "modelo": "opus",
217
+ "depende_de": [],
218
+ "cubre_cas": ["CA-001-01", "CA-001-02"]
219
+ },
220
+ "T002": { ... }
221
+ },
222
+ "ultima_actualizacion": "{FECHA}"
223
+ }
224
+ ```
225
+
226
+ ## PASO 6 — Verificar cobertura
227
+
228
+ Antes de finalizar, valida internamente:
229
+
230
+ 1. ¿Cada CA tiene al menos una tarea que lo cubre?
231
+ 2. ¿Cada archivo del plan tiene al menos una tarea asociada?
232
+ 3. ¿Cada riesgo del plan tiene una tarea de mitigación o se acepta?
233
+
234
+ Si hay huecos, añade tareas faltantes o documéntalos.
235
+
236
+ ## PASO 7 — Actualizar estado global
237
+
238
+ ```json
239
+ {
240
+ "fase_actual": "tareas_generadas",
241
+ "tareas_generadas": true,
242
+ "ultima_actualizacion": "{FECHA}"
243
+ }
244
+ ```
245
+
246
+ ## PASO 8 — Resumen
247
+
248
+ ```
249
+ ✅ {N} tareas generadas
250
+ 📁 .sdd/especificaciones/{ID}/tareas.md
251
+
252
+ DISTRIBUCIÓN POR AGENTE:
253
+ • arquitecto: [N]
254
+ • desarrollador-backend: [N]
255
+ • desarrollador-frontend: [N]
256
+ • tester: [N]
257
+ • [...]
258
+
259
+ COBERTURA:
260
+ • {N}/{M} CAs cubiertos por al menos una tarea
261
+ • Archivos del plan asignados: ✅
262
+ • Riesgos con tarea de mitigación: [N]/[M]
263
+
264
+ SIGUIENTES PASOS:
265
+ /sdd.analizar — verificar consistencia spec/plan/tareas (RECOMENDADO)
266
+ /sdd.implementar — ejecutar todas las tareas
267
+ /sdd.implementar T001 — ejecutar una tarea específica
268
+ ```
269
+
270
+ ## VALIDACIÓN DE SALIDA
271
+
272
+ Antes de entregar las tareas al usuario, verifica cobertura y estructura:
273
+
274
+ ```bash
275
+ SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json 2>/dev/null | cut -d'"' -f4)
276
+ TAREAS_FILE=".sdd/especificaciones/${SPEC_ID}/tareas.md"
277
+ ESTADO_FILE=".sdd/especificaciones/${SPEC_ID}/.estado-tareas.json"
278
+
279
+ # Los dos archivos deben existir
280
+ [ -f "$TAREAS_FILE" ] || echo "FALTA: tareas.md no se generó"
281
+ [ -f "$ESTADO_FILE" ] || echo "FALTA: .estado-tareas.json no se generó"
282
+
283
+ # Debe haber al menos una tarea
284
+ TOTAL_TAREAS=$(grep -c "^## T[0-9]" "$TAREAS_FILE" 2>/dev/null || echo 0)
285
+ [ "$TOTAL_TAREAS" -eq 0 ] && echo "ERROR: no se generó ninguna tarea"
286
+
287
+ # Cada tarea debe tener criterio de verificación
288
+ TAREAS_SIN_VERIFICACION=$(grep -B20 "^## T[0-9]" "$TAREAS_FILE" 2>/dev/null | grep -c "Criterio de verificación" || echo 0)
289
+ [ "$TAREAS_SIN_VERIFICACION" -lt "$TOTAL_TAREAS" ] && echo "ADVERTENCIA: alguna tarea no tiene criterio de verificación"
290
+
291
+ # La matriz de cobertura de CAs debe existir
292
+ grep -q "Matriz de Cobertura" "$TAREAS_FILE" || echo "FALTA: Matriz de Cobertura de CAs"
293
+
294
+ echo "Validación completada — total tareas: $TOTAL_TAREAS"
295
+ ```
296
+
297
+ Si alguna verificación falla, corrige antes de habilitar el handoff a `/sdd.implementar`.
298
+
299
+ ---
300
+ **HOOK:** `.sdd/hooks/despues_tareas.sh`
@@ -0,0 +1,239 @@
1
+ ---
2
+ description: Verifica que el código implementado cumple TODOS los criterios de aceptación de la spec original. Auditoría independiente con el agente revisor.
3
+ allowed-tools: Read, Write, Bash, Task, Grep, Glob
4
+ ---
5
+
6
+ # /sdd.verificar — Verificación Final
7
+
8
+ Eres el **Auditor de Cumplimiento**. Tu trabajo es validar que el código entregado satisface CADA criterio de aceptación de la spec original, sin asumirlo.
9
+
10
+ ## Filosofía
11
+
12
+ Esta verificación es **independiente de la implementación**. No te basas en lo que dijeron los agentes implementadores. Vas al código y compruebas por ti mismo.
13
+
14
+ ## PASO 1 — Cargar contexto
15
+
16
+ ```bash
17
+ SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json | cut -d'"' -f4)
18
+ SPEC_DIR=".sdd/especificaciones/${SPEC_ID}"
19
+
20
+ cat "${SPEC_DIR}/spec.md"
21
+ cat "${SPEC_DIR}/plan.md"
22
+ cat "${SPEC_DIR}/.estado-tareas.json"
23
+ cat .sdd/memoria/constitucion.md
24
+ ```
25
+
26
+ ## PASO 2 — Extraer todos los CAs
27
+
28
+ Lee la spec y genera una lista de TODOS los criterios de aceptación con sus IDs:
29
+
30
+ ```
31
+ CA-001-01: [texto del CA]
32
+ CA-001-02: [texto del CA]
33
+ ...
34
+ ```
35
+
36
+ ## PASO 3 — Verificar CA por CA
37
+
38
+ Para CADA CA, sigue este proceso:
39
+
40
+ ### 3.1 — Identificar dónde buscar
41
+ Determina en qué parte del código debería estar implementado este CA:
42
+ - Servicios/módulos relevantes
43
+ - Tests que deberían cubrirlo
44
+
45
+ ### 3.2 — Buscar implementación
46
+ ```bash
47
+ # Usa grep/glob para localizar código relacionado al CA
48
+ grep -rn "[concepto del CA]" --include="*.ts" --include="*.py" --include="*.js" .
49
+ ```
50
+
51
+ ### 3.3 — Buscar test
52
+ ```bash
53
+ # Hay test que verifica este CA específicamente?
54
+ grep -rn "[CA-001-01 o el comportamiento]" --include="*test*" --include="*spec*" .
55
+ ```
56
+
57
+ ### 3.4 — Verificar manualmente
58
+ Lee el código encontrado. ¿Realmente implementa lo que pide el CA?
59
+
60
+ - ✅ **Implementado y testeado**
61
+ - ⚠️ **Implementado pero sin test específico**
62
+ - ⚠️ **Implementado parcialmente** (cubre algunos escenarios pero no todos)
63
+ - ❌ **No implementado**
64
+
65
+ ## PASO 4 — Verificar requisitos funcionales
66
+
67
+ Repite el proceso para cada RF-XXX de la spec.
68
+
69
+ ## PASO 5 — Verificar requisitos no funcionales
70
+
71
+ Estos requieren validación específica:
72
+
73
+ - **Rendimiento**: ¿hay benchmark? ¿la métrica se cumple?
74
+ - **Seguridad**: ¿se aplicaron las medidas? Invocar agente `seguridad`
75
+ - **Accesibilidad**: ¿se respetan los estándares? (revisar UI si aplica)
76
+ - **Disponibilidad**: ¿el manejo de errores/retries existe?
77
+
78
+ ## PASO 6 — Verificar exclusiones
79
+
80
+ Las "Exclusiones Explícitas" de la spec dicen qué NO debía implementarse. Verifica:
81
+ - ¿Se respetaron? (no se agregó funcionalidad fuera de scope)
82
+
83
+ ## PASO 7 — Verificar cumplimiento de constitución
84
+
85
+ Para CADA principio de la constitución:
86
+ - ¿El código respeta el principio?
87
+ - Si no, ¿hay justificación documentada en "Complejidad Justificada" del plan?
88
+
89
+ ## PASO 8 — Correr tests completos
90
+
91
+ ```bash
92
+ # Detectar y ejecutar la suite completa
93
+ [ -f package.json ] && (npm test || pnpm test || yarn test) 2>&1
94
+ [ -f pyproject.toml ] && (pytest -v || python -m pytest -v) 2>&1
95
+ [ -f Cargo.toml ] && cargo test 2>&1
96
+ [ -f go.mod ] && go test ./... 2>&1
97
+ ```
98
+
99
+ ## PASO 9 — Verificar tareas como completas
100
+
101
+ Lee `.estado-tareas.json` y verifica:
102
+ - ¿Las tareas marcadas como `completada` tienen sus archivos modificados?
103
+ - ¿Hay tareas `bloqueada` que necesitan resolución?
104
+
105
+ ## PASO 10 — Generar reporte de verificación
106
+
107
+ Crea `.sdd/especificaciones/{ID}/verificacion.md`:
108
+
109
+ ```markdown
110
+ ---
111
+ spec_id: {SPEC_ID}
112
+ fecha_verificacion: {FECHA}
113
+ veredicto: APROBADA | APROBADA_CON_OBSERVACIONES | RECHAZADA
114
+ ---
115
+
116
+ # Verificación Final: {SPEC_ID}
117
+
118
+ ## Veredicto: **{VEREDICTO}**
119
+
120
+ [Resumen ejecutivo]
121
+
122
+ ## Cumplimiento de Criterios de Aceptación
123
+
124
+ | CA | Descripción | Implementado | Testeado | Archivo(s) | Test(s) |
125
+ |----|-------------|--------------|----------|-----------|---------|
126
+ | CA-001-01 | [texto] | ✅ | ✅ | src/auth.ts:45 | tests/auth.test.ts:12 |
127
+ | CA-001-02 | [texto] | ⚠️ Parcial | ❌ | src/auth.ts:78 | — |
128
+ | CA-002-01 | [texto] | ❌ | — | — | — |
129
+
130
+ ## Cumplimiento de Requisitos Funcionales
131
+
132
+ | RF | Cumple | Notas |
133
+ |----|--------|-------|
134
+ | RF-001 | ✅ | — |
135
+ | RF-002 | ⚠️ | [explicación] |
136
+
137
+ ## Cumplimiento de Requisitos No Funcionales
138
+
139
+ | RNF | Métrica | Esperado | Medido | Cumple |
140
+ |-----|---------|---------|--------|--------|
141
+ | Rendimiento | latencia p95 | <200ms | 180ms | ✅ |
142
+ | Seguridad | auth requerida | sí | sí | ✅ |
143
+
144
+ ## Exclusiones Respetadas
145
+
146
+ | Exclusión | Respetada |
147
+ |-----------|-----------|
148
+ | [exclusión 1] | ✅ |
149
+
150
+ ## Cumplimiento de Constitución
151
+
152
+ | Principio | Cumple |
153
+ |-----------|--------|
154
+ | Principio I | ✅ |
155
+ | Principio II | ⚠️ — ver Complejidad Justificada del plan |
156
+
157
+ ## Suite de Tests
158
+
159
+ - Framework: [detectado]
160
+ - Tests totales: [N]
161
+ - Pasados: [N]
162
+ - Fallidos: [N]
163
+ - Cobertura: [%]
164
+ - Umbral mínimo (constitución): [%]
165
+ - **Cumple**: ✅/❌
166
+
167
+ ## Hallazgos
168
+
169
+ ### 🔴 Críticos (bloquean entrega)
170
+ [Lista]
171
+
172
+ ### 🟡 Importantes (corregir antes de release)
173
+ [Lista]
174
+
175
+ ### 🟢 Menores (mejoras futuras)
176
+ [Lista]
177
+
178
+ ## Recomendaciones
179
+
180
+ [Lista accionable]
181
+
182
+ ## Sugerencia de siguiente acción
183
+
184
+ [Comando o acción manual]
185
+ ```
186
+
187
+ ## PASO 11 — Determinar veredicto
188
+
189
+ **APROBADA**:
190
+ - 100% CAs cubiertos e implementados
191
+ - Todos los RF cumplidos
192
+ - Tests pasando
193
+ - Cobertura sobre el umbral
194
+ - Constitución respetada
195
+
196
+ **APROBADA_CON_OBSERVACIONES**:
197
+ - ≥95% CAs cubiertos
198
+ - Hallazgos menores
199
+ - Tests pasando
200
+
201
+ **RECHAZADA**:
202
+ - CAs sin implementar
203
+ - Tests fallando
204
+ - Violaciones graves de constitución
205
+
206
+ ## PASO 12 — Acción
207
+
208
+ **APROBADA:**
209
+ ```
210
+ ✅ Verificación: APROBADA
211
+ 🎉 La implementación cumple TODOS los criterios
212
+
213
+ 📁 .sdd/especificaciones/{ID}/verificacion.md
214
+
215
+ SIGUIENTES PASOS:
216
+ /sdd.snapshot — actualizar SNAPSHOT.md del producto
217
+ (haz commit y push manualmente)
218
+ ```
219
+
220
+ **APROBADA_CON_OBSERVACIONES:**
221
+ ```
222
+ 🟡 Verificación: APROBADA CON OBSERVACIONES
223
+ ✅ Cumple los CAs críticos
224
+ ⚠️ [N] observaciones documentadas
225
+
226
+ Puedes entregar, pero considera abordar las observaciones.
227
+ ```
228
+
229
+ **RECHAZADA:**
230
+ ```
231
+ ❌ Verificación: RECHAZADA
232
+ 🔴 [N] CAs no cumplidos
233
+
234
+ ACCIONES REQUERIDAS:
235
+ [Lista priorizada]
236
+
237
+ Vuelve a:
238
+ /sdd.implementar — completar tareas pendientes
239
+ ```
@@ -0,0 +1,18 @@
1
+ #!/bin/bash
2
+ # antes_cada_tarea.sh — se ejecuta antes de cada tarea individual en /sdd.implementar
3
+ # Cópialo a .sdd/hooks/ y hazlo ejecutable: chmod +x .sdd/hooks/antes_cada_tarea.sh
4
+ #
5
+ # Recibe como argumento: $1 = TAREA_ID (ej: "T003")
6
+ # El agente puede pasar variables de entorno opcionales:
7
+ # SDD_ARCHIVOS — archivos que la tarea va a modificar
8
+ # SDD_COMANDO — comando que la tarea va a ejecutar (si aplica)
9
+
10
+ TAREA_ID="${1:-?}"
11
+ export SDD_TAREA_ID="$TAREA_ID"
12
+
13
+ echo "🔒 Verificación de seguridad para ${TAREA_ID}..."
14
+
15
+ # Invocar el guardia para esta tarea específica
16
+ bash "$(dirname "$0")/guardia-seguridad.sh"
17
+
18
+ echo "✅ ${TAREA_ID} — verificaciones pasadas, iniciando ejecución"
@@ -0,0 +1,45 @@
1
+ #!/bin/bash
2
+ # antes_implementar.sh — se ejecuta antes de cada /sdd.implementar
3
+ # Cópialo a .sdd/hooks/ y hazlo ejecutable: chmod +x .sdd/hooks/antes_implementar.sh
4
+
5
+ set -euo pipefail
6
+
7
+ # ── 1. Guardia de seguridad ──────────────────────────────────
8
+ # Bloquea .env, comandos destructivos, push sin confirmación, secrets hardcodeados
9
+ bash "$(dirname "$0")/guardia-seguridad.sh"
10
+
11
+ # ── 2. Verificar rama git ────────────────────────────────────
12
+ # (Ya cubierto por guardia-seguridad.sh — esto es redundante si usas el guardia)
13
+
14
+ # ── 3. Verificar tests previos pasan ────────────────────────
15
+ # No implementes sobre una base rota
16
+ echo "🔍 Verificando que los tests actuales pasan antes de implementar..."
17
+
18
+ TESTS_OK=false
19
+
20
+ if [ -f package.json ]; then
21
+ npx jest --passWithNoTests --silent 2>/dev/null && TESTS_OK=true \
22
+ || pnpm test --silent 2>/dev/null && TESTS_OK=true \
23
+ || TESTS_OK=false
24
+ fi
25
+
26
+ if [ -f pyproject.toml ] || [ -f pytest.ini ]; then
27
+ python -m pytest -q --tb=no 2>/dev/null && TESTS_OK=true || TESTS_OK=false
28
+ fi
29
+
30
+ if [ -f Cargo.toml ]; then
31
+ cargo test -q 2>/dev/null && TESTS_OK=true || TESTS_OK=false
32
+ fi
33
+
34
+ if [ "$TESTS_OK" = "false" ]; then
35
+ echo "⚠️ Los tests actuales tienen fallos pre-existentes."
36
+ echo " Implementar sobre una base rota dificulta identificar regresiones."
37
+ echo " ¿Continuar de todos modos? (s/N)"
38
+ read -r RESP
39
+ if [ "$RESP" != "s" ] && [ "$RESP" != "S" ]; then
40
+ echo "❌ Implementación cancelada — corrige los tests fallidos primero."
41
+ exit 1
42
+ fi
43
+ fi
44
+
45
+ echo "✅ Hook antes_implementar completado"
@@ -0,0 +1,14 @@
1
+ #!/bin/bash
2
+ # Ejemplo: crear branch Git automáticamente al crear una spec
3
+
4
+ SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json | cut -d'"' -f4)
5
+
6
+ if [ -d .git ] && [ -n "$SPEC_ID" ]; then
7
+ RAMA="spec/${SPEC_ID}"
8
+
9
+ # Solo crear si no existe
10
+ if ! git show-ref --verify --quiet "refs/heads/${RAMA}"; then
11
+ git checkout -b "$RAMA" 2>/dev/null && \
12
+ echo "✅ Branch creada: $RAMA"
13
+ fi
14
+ fi
@@ -0,0 +1,36 @@
1
+ #!/bin/bash
2
+ # Ejemplo: aplicar linter después de implementar
3
+ # Cópialo a .sdd/hooks/ y hazlo ejecutable
4
+
5
+ if [ -f package.json ]; then
6
+ echo "🧹 Aplicando linter..."
7
+ npm run lint --fix 2>/dev/null || pnpm lint --fix 2>/dev/null || yarn lint --fix 2>/dev/null
8
+ fi
9
+
10
+ if [ -f pyproject.toml ]; then
11
+ echo "🧹 Aplicando formateador..."
12
+ ruff format . 2>/dev/null || black . 2>/dev/null
13
+ fi
14
+
15
+ if [ -f Cargo.toml ]; then
16
+ echo "🧹 Aplicando rustfmt..."
17
+ cargo fmt 2>/dev/null
18
+ fi
19
+
20
+ echo "✅ Hook despues_implementar completado"
21
+
22
+ # ===== NUEVO: Actualizar mapas =====
23
+ if [ -d ".sdd/mapa" ]; then
24
+ echo "🗺️ Actualizando mapas..."
25
+ bash ./.claude/bin/mapear.sh validar > /dev/null 2>&1 || true
26
+
27
+ # Obtener archivos modificados en esta sesión
28
+ # (esto es aproximado, en producción usarías git diff)
29
+ MAPA_ANTIGUO=$(stat -c %Y .sdd/mapa/estructura.md 2>/dev/null || echo 0)
30
+ ARCHIVOS_NUEVOS=$(find . -newer <(date -r $MAPA_ANTIGUO) -type f 2>/dev/null | grep -v '.sdd' | wc -l)
31
+
32
+ if [ "$ARCHIVOS_NUEVOS" -gt 0 ]; then
33
+ echo "📝 Detectados $ARCHIVOS_NUEVOS archivos modificados"
34
+ echo "⏰ Próxima actualización: /sdd.mapear actualizar"
35
+ fi
36
+ fi
@@ -0,0 +1,19 @@
1
+ #!/bin/bash
2
+ # Ejemplo: notificación a Slack/Teams cuando un plan se aprueba
3
+
4
+ SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json | cut -d'"' -f4)
5
+ TITULO=$(grep "^titulo:" ".sdd/especificaciones/${SPEC_ID}/spec.md" | cut -d'"' -f2)
6
+
7
+ if [ -n "$SLACK_WEBHOOK" ]; then
8
+ curl -s -X POST "$SLACK_WEBHOOK" \
9
+ -H 'Content-type: application/json' \
10
+ --data "{\"text\":\"📋 Plan SDD aprobado: ${TITULO} (${SPEC_ID})\"}"
11
+ echo "✅ Notificación enviada a Slack"
12
+ fi
13
+
14
+ if [ -n "$TEAMS_WEBHOOK" ]; then
15
+ curl -s -X POST "$TEAMS_WEBHOOK" \
16
+ -H 'Content-type: application/json' \
17
+ --data "{\"text\":\"📋 Plan SDD aprobado: ${TITULO} (${SPEC_ID})\"}"
18
+ echo "✅ Notificación enviada a Teams"
19
+ fi