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.
- package/.claude/settings.json +51 -0
- package/.claude-plugin/marketplace.json +31 -0
- package/.claude-plugin/plugin.json +97 -0
- package/README.md +332 -0
- package/agents/arquitecto.md +148 -0
- package/agents/asesor-datos.md +163 -0
- package/agents/critico.md +142 -0
- package/agents/desarrollador-backend.md +242 -0
- package/agents/desarrollador-frontend.md +120 -0
- package/agents/disenador-api.md +108 -0
- package/agents/documentador.md +177 -0
- package/agents/investigador.md +174 -0
- package/agents/operaciones.md +105 -0
- package/agents/revisor.md +153 -0
- package/agents/seguridad.md +216 -0
- package/agents/tester.md +286 -0
- package/claude-hooks/post-write-conventions.js +412 -0
- package/claude-hooks/pre-tool-guard.js +159 -0
- package/cli/index.js +401 -0
- package/commands/sdd.aclarar.md +200 -0
- package/commands/sdd.analizar.md +241 -0
- package/commands/sdd.ayuda.md +227 -0
- package/commands/sdd.canary.md +60 -0
- package/commands/sdd.checklist.md +174 -0
- package/commands/sdd.comprimir.md +166 -0
- package/commands/sdd.configurar.md +195 -0
- package/commands/sdd.constitucion.md +343 -0
- package/commands/sdd.crear-app.md +168 -0
- package/commands/sdd.crear-mcp.md +174 -0
- package/commands/sdd.descubrir.md +269 -0
- package/commands/sdd.desplegar.md +155 -0
- package/commands/sdd.especificar.md +302 -0
- package/commands/sdd.estado.md +124 -0
- package/commands/sdd.glosario.md +108 -0
- package/commands/sdd.implementar.md +377 -0
- package/commands/sdd.importar.md +91 -0
- package/commands/sdd.mapear.md +120 -0
- package/commands/sdd.md +119 -0
- package/commands/sdd.planificar.md +372 -0
- package/commands/sdd.qa.md +108 -0
- package/commands/sdd.release.md +253 -0
- package/commands/sdd.retro.md +82 -0
- package/commands/sdd.snapshot.md +122 -0
- package/commands/sdd.tareas.md +300 -0
- package/commands/sdd.verificar.md +239 -0
- package/configuracion-ejemplo/hooks-ejemplo/antes_cada_tarea.sh +18 -0
- package/configuracion-ejemplo/hooks-ejemplo/antes_implementar.sh +45 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_especificar.sh +14 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_implementar.sh +36 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_planificar.sh +19 -0
- package/configuracion-ejemplo/hooks-ejemplo/guardia-seguridad.sh +367 -0
- package/configuracion-ejemplo/sdd.config.yaml +310 -0
- package/docs/AGENTES.md +74 -0
- package/docs/COMPRESION.md +155 -0
- package/docs/EJEMPLO-PRACTICA.md +383 -0
- package/docs/EJEMPLOS.md +212 -0
- package/docs/FABRICA.md +185 -0
- package/docs/FILOSOFIA.md +61 -0
- package/docs/FLUJO.md +149 -0
- package/docs/INICIO-RAPIDO.md +116 -0
- package/docs/MAPAS.md +113 -0
- package/docs/MODELOS.md +103 -0
- package/docs/PERSONALIZACION.md +152 -0
- package/instalar.ps1 +39 -0
- package/instalar.sh +22 -0
- package/mcp-figma/README.md +158 -0
- package/mcp-figma/package.json +7 -0
- package/mcp-figma/src/component-generator.js +162 -0
- package/mcp-figma/src/design-system-analyzer.js +247 -0
- package/mcp-figma/src/figma-client.js +75 -0
- package/mcp-figma/src/index.js +114 -0
- package/mcp-figma/src/mcp.js +97 -0
- package/mcp-figma/src/style-mapper.js +85 -0
- package/package.json +50 -0
- package/plantillas/analisis.md +57 -0
- package/plantillas/checklist-especificacion.md +66 -0
- package/plantillas/constitucion.md +104 -0
- package/plantillas/decision-arquitectura.md +39 -0
- package/plantillas/dependencias-mapa.md +89 -0
- package/plantillas/especificacion.md +108 -0
- package/plantillas/estructura-mapa.md +40 -0
- package/plantillas/glosario.md +22 -0
- package/plantillas/index-especificaciones.md +15 -0
- package/plantillas/mcp-server.md +147 -0
- package/plantillas/plan.md +152 -0
- package/plantillas/simbolos-mapa.md +57 -0
- package/plantillas/snapshot.md +54 -0
- package/plantillas/tareas.md +72 -0
- package/presets/enterprise.yaml +69 -0
- package/presets/lean.yaml +63 -0
- package/presets/startup.yaml +67 -0
- package/skills/compresion-tokens.md +264 -0
- package/skills/constitucion-constraint.md +78 -0
- package/skills/deteccion-stack.md +175 -0
- package/skills/enrutador-agentes.md +69 -0
- package/skills/gestion-estado.md +114 -0
- package/skills/indexador.md +199 -0
- package/skills/modo-guiado/SKILL.md +78 -0
- package/skills/orquestacion-ptc/SKILL.md +96 -0
- package/skills/validacion-spec.md +52 -0
- package/skills/verificador-implementacion.md +71 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
---
|
|
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
|
|
4
|
+
handoffs:
|
|
5
|
+
- etiqueta: "Verificar contra spec"
|
|
6
|
+
comando: sdd.verificar
|
|
7
|
+
- etiqueta: "Actualizar SNAPSHOT"
|
|
8
|
+
comando: sdd.snapshot
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# /sdd.implementar — Ejecutar Tareas
|
|
12
|
+
|
|
13
|
+
Eres el **Orquestador de Implementación**. Coordinas a los agentes especializados para ejecutar las tareas con calidad verificada.
|
|
14
|
+
|
|
15
|
+
## PASO 1 — Hook pre-ejecución y validación
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
[ -f ".sdd/hooks/antes_implementar.sh" ] && bash .sdd/hooks/antes_implementar.sh
|
|
19
|
+
|
|
20
|
+
SPEC_ID=$(grep -o '"especificacion_activa": "[^"]*"' .sdd/estado.json | cut -d'"' -f4)
|
|
21
|
+
SPEC_DIR=".sdd/especificaciones/${SPEC_ID}"
|
|
22
|
+
|
|
23
|
+
# Verificar precondiciones
|
|
24
|
+
[ ! -f "${SPEC_DIR}/tareas.md" ] && echo "ERROR: ejecuta /sdd.tareas primero" && exit 1
|
|
25
|
+
[ ! -f "${SPEC_DIR}/.estado-tareas.json" ] && echo "ERROR: estado de tareas no encontrado" && exit 1
|
|
26
|
+
|
|
27
|
+
cat .sdd/sdd.config.yaml
|
|
28
|
+
cat "${SPEC_DIR}/spec.md"
|
|
29
|
+
cat "${SPEC_DIR}/plan.md"
|
|
30
|
+
cat "${SPEC_DIR}/tareas.md"
|
|
31
|
+
cat "${SPEC_DIR}/.estado-tareas.json"
|
|
32
|
+
cat .sdd/memoria/constitucion.md
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## PASO 2 — Determinar modo de ejecución
|
|
36
|
+
|
|
37
|
+
| Argumento | Modo |
|
|
38
|
+
|-----------|------|
|
|
39
|
+
| (vacío) | **Secuencial**: ejecutar todas las tareas pendientes en orden |
|
|
40
|
+
| `T003` | **Específica**: solo la tarea T003 |
|
|
41
|
+
| `continuar` | **Reanudar**: desde la última tarea no completada |
|
|
42
|
+
| `fase A` | **Por fase**: solo las tareas de la Fase A |
|
|
43
|
+
| `revisar` | **Revisión**: invocar revisor sobre tareas completadas |
|
|
44
|
+
|
|
45
|
+
## PASO 3 — Crear TODO list para visualización
|
|
46
|
+
|
|
47
|
+
Usa `TodoWrite` para mostrar el progreso en tiempo real al usuario. Crea un TODO por tarea pendiente.
|
|
48
|
+
|
|
49
|
+
## PASO 3.5 — Planificación PTC (Programmatic Tool Calling)
|
|
50
|
+
|
|
51
|
+
Antes de ejecutar, clasifica las tareas seleccionadas según la skill `orquestacion-ptc`:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Leer dependencias del estado de tareas para construir el grafo
|
|
55
|
+
cat "${SPEC_DIR}/.estado-tareas.json" | grep -E '"dependencias"|"agente"|"id"'
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Algoritmo de clasificación:**
|
|
59
|
+
|
|
60
|
+
1. Construye el grafo de dependencias de las tareas seleccionadas.
|
|
61
|
+
2. Identifica **grupos independientes** (tareas sin arco entre sí que pueden correr en paralelo).
|
|
62
|
+
3. Aplica PTC si hay ≥3 tareas independientes en el mismo grupo; si hay <3, ejecuta secuencial.
|
|
63
|
+
|
|
64
|
+
**Si PTC aplica** (≥3 tareas independientes):
|
|
65
|
+
|
|
66
|
+
```javascript
|
|
67
|
+
// Bloque PTC — despacha el grupo independiente en paralelo
|
|
68
|
+
const grupo = [
|
|
69
|
+
{ id: "T001", agente: "desarrollador-backend", spec: especSec, plan: planSec },
|
|
70
|
+
{ id: "T003", agente: "tester", spec: especSec, plan: planSec },
|
|
71
|
+
{ id: "T005", agente: "documentador", spec: especSec, plan: planSec }
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
const resultados = await Promise.all(
|
|
75
|
+
grupo.map(t => Task(t.agente, construirPrompt(t)))
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
// Agrega SOLO lo mínimo — NO devuelve el output completo de cada agente
|
|
79
|
+
return resultados.map((r, i) => ({
|
|
80
|
+
id: grupo[i].id,
|
|
81
|
+
estado: r.verificacion_ok ? "PASA" : "FALLA",
|
|
82
|
+
archivos: r.archivos_modificados, // lista de rutas, sin contenido
|
|
83
|
+
resumen: r.resumen_una_linea, // una frase
|
|
84
|
+
error: r.verificacion_ok ? null : r.mensaje_error // solo si falla
|
|
85
|
+
}));
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Tras el bloque PTC, **procesa las tareas del siguiente nivel del grafo** de forma análoga. Las tareas dependientes del primer grupo se procesan una vez que ese grupo termina.
|
|
89
|
+
|
|
90
|
+
**Fallback secuencial** — Si el sandbox no soporta ejecución programática:
|
|
91
|
+
```
|
|
92
|
+
→ notificar: "Ejecutando en modo secuencial (PTC no disponible)"
|
|
93
|
+
→ continuar con el PASO 4 estándar
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## PASO 4 — Ciclo por tarea
|
|
99
|
+
|
|
100
|
+
Para CADA tarea seleccionada, ejecuta este ciclo:
|
|
101
|
+
|
|
102
|
+
### 4.1 — Verificar precondiciones
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# La tarea no debe estar completada/bloqueada
|
|
106
|
+
# Sus dependencias deben estar completadas
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Si una dependencia no está completa:
|
|
110
|
+
> ⏸️ T00X depende de T00Y (no completada). Cambio el orden y ejecuto T00Y primero.
|
|
111
|
+
|
|
112
|
+
### 4.2 — Anunciar inicio
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
🔧 T00X — [Nombre]
|
|
116
|
+
Agente: [agente] (modelo: [modelo])
|
|
117
|
+
Archivos: [lista]
|
|
118
|
+
Cubre: [CAs]
|
|
119
|
+
Tiempo estimado: [S/M/L]
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Marca la tarea como `en_progreso` en `.estado-tareas.json` y actualiza el TodoWrite.
|
|
123
|
+
|
|
124
|
+
### 4.3 — Hook por tarea (opcional)
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
[ -f ".sdd/hooks/antes_cada_tarea.sh" ] && bash .sdd/hooks/antes_cada_tarea.sh "$TAREA_ID"
|
|
128
|
+
```
|
|
129
|
+
|
|
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
|
|
158
|
+
|
|
159
|
+
Antes de delegar al agente, extrae las restricciones de constitución relevantes para la tarea:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Carga selectiva según tipo de tarea (NO cargar la constitución completa)
|
|
163
|
+
TIPO_TAREA="[arquitectura|backend|frontend|bd|api|infra|test|docs]"
|
|
164
|
+
|
|
165
|
+
case "$TIPO_TAREA" in
|
|
166
|
+
arquitectura) cat .sdd/memoria/constitucion.md | grep -A3 -i "stack\|framework\|prohibido\|DEBE\|NUNCA" ;;
|
|
167
|
+
backend) cat .sdd/memoria/constitucion.md | grep -A3 -i "calidad\|test\|lint\|patron\|longitud" ;;
|
|
168
|
+
bd) cat .sdd/memoria/constitucion.md | grep -A3 -i "base de datos\|migracion\|bd\|database" ;;
|
|
169
|
+
seguridad) cat .sdd/memoria/constitucion.md | grep -A3 -i "seguridad\|auth\|pii\|secreto\|token" ;;
|
|
170
|
+
*) cat .sdd/memoria/constitucion.md | grep -A2 -i "DEBE\|NUNCA\|prohibido" ;;
|
|
171
|
+
esac
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Inyecta el resultado en el contexto del agente como **restricciones explícitas**, no como contexto de fondo.
|
|
175
|
+
|
|
176
|
+
### 4.6 — Delegar al agente
|
|
177
|
+
|
|
178
|
+
Usa la herramienta `Task` para invocar al agente asignado. El agente recibe:
|
|
179
|
+
|
|
180
|
+
- Contenido de la tarea específica
|
|
181
|
+
- Spec completa
|
|
182
|
+
- Plan completo
|
|
183
|
+
- Constitución
|
|
184
|
+
- Tareas ya completadas en este ciclo (contexto)
|
|
185
|
+
- Lista de archivos modificados hasta ahora
|
|
186
|
+
- **[Si es UI]** Perfil del sistema de diseño + mapeo de estilos Figma (del paso 4.4)
|
|
187
|
+
|
|
188
|
+
El agente debe:
|
|
189
|
+
1. Leer el código existente relacionado antes de escribir
|
|
190
|
+
2. Seguir patrones del codebase actual
|
|
191
|
+
3. Implementar SOLO lo que la tarea pide
|
|
192
|
+
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
|
|
194
|
+
6. Devolver lista de archivos modificados
|
|
195
|
+
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
|
+
|
|
197
|
+
### 4.6 — Checkpoint de salida por tarea
|
|
198
|
+
|
|
199
|
+
Antes de marcar la tarea como completada, verifica en dos niveles:
|
|
200
|
+
|
|
201
|
+
**Nivel 1 — Verificación del criterio de la tarea:**
|
|
202
|
+
```bash
|
|
203
|
+
# Comando definido en la sección "Criterio de verificación" de la tarea
|
|
204
|
+
[comando]
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Nivel 2 — Verificación de artefactos esperados:**
|
|
208
|
+
```bash
|
|
209
|
+
# Los archivos que el plan indicó como CREAR/MODIFICAR para esta tarea deben existir
|
|
210
|
+
# Ejemplo para una tarea de backend:
|
|
211
|
+
# [ -f "src/services/nombre.service.ts" ] || echo "FALTA: archivo esperado no creado"
|
|
212
|
+
# grep -q "export" src/services/nombre.service.ts || echo "FALTA: ningún export — módulo vacío"
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Nivel 3 — No regresión:**
|
|
216
|
+
```bash
|
|
217
|
+
# Correr solo los tests que tocaron archivos modificados (fast feedback)
|
|
218
|
+
# TS/JS: npx jest --findRelatedTests [archivos_modificados]
|
|
219
|
+
# Python: python -m pytest [directorio_afectado] -q
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Si cualquier nivel falla:
|
|
223
|
+
1. Marca como `bloqueada` con descripción del fallo
|
|
224
|
+
2. **NO continúa con tareas dependientes**
|
|
225
|
+
3. Reporta al usuario:
|
|
226
|
+
> ❌ T00X falló la verificación: [razón]
|
|
227
|
+
>
|
|
228
|
+
> ¿Qué hacemos?
|
|
229
|
+
> a) Reintentar (con corrección automática)
|
|
230
|
+
> b) Saltar y continuar (no recomendado)
|
|
231
|
+
> c) Detener y revisar manualmente
|
|
232
|
+
|
|
233
|
+
### 4.7 — Actualizar estado
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# .estado-tareas.json: T00X → completada
|
|
237
|
+
# tareas.md: ✅ T00X, actualizar barra de progreso
|
|
238
|
+
# .sdd/estado.json: ultima_actualizacion
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 4.8 — Hook post-tarea (opcional)
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
[ -f ".sdd/hooks/despues_cada_tarea.sh" ] && bash .sdd/hooks/despues_cada_tarea.sh "$TAREA_ID"
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### 4.9 — Reportar
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
✅ T00X completada
|
|
251
|
+
Verificación: PASADA
|
|
252
|
+
Archivos modificados: [lista]
|
|
253
|
+
[N]/[M] tareas completadas ([X]%)
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## VALIDACIÓN DE SALIDA
|
|
257
|
+
|
|
258
|
+
El checkpoint de salida se aplica por tarea (ver paso 4.6 — tres 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.
|
|
259
|
+
|
|
260
|
+
**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
|
+
|
|
262
|
+
## PASO 5 — Al terminar todas las tareas
|
|
263
|
+
|
|
264
|
+
### 5.1 — Invocar revisor
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
# Usar el agente revisor con modelo de su config (recomendado: opus)
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
El revisor cruza el código generado contra:
|
|
271
|
+
- Los CAs de la spec
|
|
272
|
+
- Las decisiones del plan
|
|
273
|
+
- Los principios de la constitución
|
|
274
|
+
|
|
275
|
+
### 5.2 — Invocar tester para correr toda la suite
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
# Detectar framework de tests automáticamente y correr
|
|
279
|
+
npm test 2>/dev/null || pnpm test 2>/dev/null || yarn test 2>/dev/null || \
|
|
280
|
+
pytest 2>/dev/null || python -m pytest 2>/dev/null || \
|
|
281
|
+
cargo test 2>/dev/null || go test ./... 2>/dev/null || \
|
|
282
|
+
mvn test 2>/dev/null || gradle test 2>/dev/null || \
|
|
283
|
+
bundle exec rspec 2>/dev/null || \
|
|
284
|
+
echo "NO_FRAMEWORK_DETECTADO"
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### 5.3 — Invocar seguridad (si la tarea tocaba área sensible)
|
|
288
|
+
|
|
289
|
+
Auditoría automática si la implementación tocó: autenticación, manejo de datos personales, queries dinámicas, APIs externas, manejo de archivos.
|
|
290
|
+
|
|
291
|
+
## PASO 6 — Reporte final exhaustivo
|
|
292
|
+
|
|
293
|
+
```markdown
|
|
294
|
+
## 📊 Implementación Completada: {ID}
|
|
295
|
+
|
|
296
|
+
### Resumen
|
|
297
|
+
- Tareas totales: [N]
|
|
298
|
+
- Completadas: [N] ✅
|
|
299
|
+
- Bloqueadas: [N] ❌
|
|
300
|
+
- Omitidas: [N] ⏭️
|
|
301
|
+
- Tiempo total: [duración]
|
|
302
|
+
|
|
303
|
+
### Detalle por tarea
|
|
304
|
+
|
|
305
|
+
| Tarea | Estado | Agente | Verificación |
|
|
306
|
+
|-------|--------|--------|--------------|
|
|
307
|
+
| T001 | ✅ | arquitecto | PASADA |
|
|
308
|
+
| T002 | ✅ | desarrollador-backend | PASADA |
|
|
309
|
+
| T003 | ❌ | tester | FALLIDA: [razón] |
|
|
310
|
+
|
|
311
|
+
### Cumplimiento de Criterios de Aceptación
|
|
312
|
+
|
|
313
|
+
| CA | Tarea | Cubierto | Verificado por tests |
|
|
314
|
+
|----|-------|---------|---------------------|
|
|
315
|
+
| CA-001-01 | T001 | ✅ | ✅ |
|
|
316
|
+
| CA-001-02 | T002 | ✅ | ✅ |
|
|
317
|
+
| CA-002-01 | T005 | ✅ | ⚠️ Test pendiente |
|
|
318
|
+
|
|
319
|
+
### Tests
|
|
320
|
+
- Suite ejecutada: [framework]
|
|
321
|
+
- Tests pasados: [N]
|
|
322
|
+
- Tests fallidos: [N]
|
|
323
|
+
- Cobertura: [%] (umbral mínimo: [Y]%)
|
|
324
|
+
|
|
325
|
+
### Revisión final del agente revisor
|
|
326
|
+
[Resumen de hallazgos]
|
|
327
|
+
|
|
328
|
+
### Auditoría de seguridad (si aplicó)
|
|
329
|
+
[Resumen]
|
|
330
|
+
|
|
331
|
+
### Archivos modificados
|
|
332
|
+
[Lista completa]
|
|
333
|
+
|
|
334
|
+
### Sugerencia de commit
|
|
335
|
+
```
|
|
336
|
+
feat({ID}): [TÍTULO]
|
|
337
|
+
|
|
338
|
+
[Resumen de cambios]
|
|
339
|
+
|
|
340
|
+
Implementa: {SPEC_ID}
|
|
341
|
+
Cubre: {Lista de CAs}
|
|
342
|
+
```
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
## PASO 7 — Actualizar estado global
|
|
346
|
+
|
|
347
|
+
```json
|
|
348
|
+
{
|
|
349
|
+
"fase_actual": "implementacion_completa",
|
|
350
|
+
"historial": [..., {
|
|
351
|
+
"fase": "implementacion",
|
|
352
|
+
"id": "{ID}",
|
|
353
|
+
"fecha": "{FECHA}",
|
|
354
|
+
"resultado": "exitoso | parcial | fallido"
|
|
355
|
+
}]
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
## PASO 8 — Hook post-ejecución
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
[ -f ".sdd/hooks/despues_implementar.sh" ] && bash .sdd/hooks/despues_implementar.sh
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
## PASO 9 — Siguientes pasos
|
|
366
|
+
|
|
367
|
+
```
|
|
368
|
+
🎉 Implementación terminada
|
|
369
|
+
|
|
370
|
+
SIGUIENTES PASOS RECOMENDADOS:
|
|
371
|
+
/sdd.verificar — verificación final contra spec original
|
|
372
|
+
/sdd.snapshot — actualizar SNAPSHOT.md del producto
|
|
373
|
+
(commit a tu sistema de control de versiones manualmente)
|
|
374
|
+
|
|
375
|
+
¿Quieres empezar otra feature?
|
|
376
|
+
/sdd.especificar [descripción]
|
|
377
|
+
```
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Importa una especificación externa (Markdown, issue de GitHub/GitLab, doc compartido) y la convierte al formato SDD-ES.
|
|
3
|
+
allowed-tools: Read, Write, Bash, WebFetch
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /sdd.importar — Importar Spec Externa
|
|
7
|
+
|
|
8
|
+
Eres el **Importador de Especificaciones**. Tomas un documento externo y lo reformulas al formato SDD-ES sin perder información.
|
|
9
|
+
|
|
10
|
+
## PASO 1 — Identificar la fuente
|
|
11
|
+
|
|
12
|
+
El usuario pasa la fuente como argumento:
|
|
13
|
+
- URL (web, GitHub issue, GitLab issue, doc compartido)
|
|
14
|
+
- Ruta a archivo local (`./mi-spec.md`, `docs/feature.txt`)
|
|
15
|
+
- Texto pegado directamente
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
[ -f ".sdd/hooks/antes_importar.sh" ] && bash .sdd/hooks/antes_importar.sh
|
|
19
|
+
|
|
20
|
+
# Si es URL, fetcheamos. Si es archivo, leemos. Si es texto, parseamos directo.
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## PASO 2 — Extraer información
|
|
24
|
+
|
|
25
|
+
Independientemente del formato origen, intenta extraer:
|
|
26
|
+
|
|
27
|
+
- **Título / objetivo** del cambio
|
|
28
|
+
- **Contexto / motivación**
|
|
29
|
+
- **Requisitos funcionales explícitos**
|
|
30
|
+
- **Criterios de aceptación** (si están)
|
|
31
|
+
- **Restricciones técnicas mencionadas**
|
|
32
|
+
- **Diagramas / mockups** (referencias)
|
|
33
|
+
- **Personas involucradas / actores**
|
|
34
|
+
|
|
35
|
+
## PASO 3 — Mapear al formato SDD-ES
|
|
36
|
+
|
|
37
|
+
Convierte la información al formato estándar de spec SDD-ES (igual que `/sdd.especificar`).
|
|
38
|
+
|
|
39
|
+
Donde el documento original tenga información ambigua o falte:
|
|
40
|
+
- Inserta `[NECESITA_ACLARACION]: [lo que se intentó deducir]`
|
|
41
|
+
- NO inventes información para completar huecos
|
|
42
|
+
|
|
43
|
+
## PASO 4 — Generar ID y crear estructura
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
FECHA=$(date +%Y-%m-%d)
|
|
47
|
+
SLUG=$(echo "$TITULO" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-')
|
|
48
|
+
ID="${FECHA}-${SLUG}"
|
|
49
|
+
|
|
50
|
+
mkdir -p ".sdd/especificaciones/${ID}"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## PASO 5 — Generar spec.md con marca de origen
|
|
54
|
+
|
|
55
|
+
En el frontmatter de la spec:
|
|
56
|
+
|
|
57
|
+
```yaml
|
|
58
|
+
---
|
|
59
|
+
id: {ID}
|
|
60
|
+
titulo: "[TÍTULO]"
|
|
61
|
+
estado: borrador
|
|
62
|
+
creada: {FECHA}
|
|
63
|
+
autor: importado
|
|
64
|
+
origen: "[URL o ruta]"
|
|
65
|
+
origen_resumen: "[breve descripción de la fuente]"
|
|
66
|
+
---
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Incluye una sección al final:
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
## 99. Importación
|
|
73
|
+
|
|
74
|
+
- **Fuente original:** [URL/ruta]
|
|
75
|
+
- **Fecha de importación:** {FECHA}
|
|
76
|
+
- **Información perdida en conversión:** [si hubo algo no mapeable]
|
|
77
|
+
- **Aclaraciones requeridas:** [N puntos marcados con [NECESITA_ACLARACION]]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## PASO 6 — Reportar
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
✅ Spec importada
|
|
84
|
+
📁 .sdd/especificaciones/{ID}/spec.md
|
|
85
|
+
📥 Origen: [URL/archivo]
|
|
86
|
+
⚠️ [N] puntos marcados como [NECESITA_ACLARACION]
|
|
87
|
+
|
|
88
|
+
SIGUIENTES PASOS:
|
|
89
|
+
/sdd.aclarar — resolver puntos ambiguos
|
|
90
|
+
/sdd.checklist — validar calidad
|
|
91
|
+
```
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Indexa la estructura del proyecto, símbolos públicos y dependencias. Genera mapas estáticos en .sdd/mapa/ para que Claude consulte en vez de escanear archivos.
|
|
3
|
+
aliases: mapear, indexar, map, idx
|
|
4
|
+
allowed-tools: Read, Write, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /sdd.mapear — Indexar proyecto
|
|
8
|
+
|
|
9
|
+
Genera 3 archivos de mapa estático que Claude puede consultar rápidamente, ahorrando miles de tokens en lectura de código.
|
|
10
|
+
|
|
11
|
+
## Uso
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
/sdd.mapear ← indexación inteligente (completa si es 1ª vez, incremental si existe)
|
|
15
|
+
/sdd.mapear regenerar ← fuerza re-indexación completa (tira todo, empieza de cero)
|
|
16
|
+
/sdd.mapear validar ← muestra si está obsoleto sin actualizar
|
|
17
|
+
/sdd.mapear actualizar ← fuerza actualización incremental
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Qué genera
|
|
21
|
+
|
|
22
|
+
El comando crea `.sdd/mapa/` con:
|
|
23
|
+
|
|
24
|
+
1. **estructura.md** — árbol de directorios + 1 línea por archivo (qué contiene)
|
|
25
|
+
2. **simbolos.md** — funciones, clases, tipos exportados con su firma
|
|
26
|
+
3. **dependencias.md** — quién depende de quién (grafo de imports)
|
|
27
|
+
|
|
28
|
+
## Cómo funciona
|
|
29
|
+
|
|
30
|
+
### Primera ejecución
|
|
31
|
+
```bash
|
|
32
|
+
/sdd.mapear
|
|
33
|
+
```
|
|
34
|
+
→ Indexación completa del proyecto → genera los 3 mapas
|
|
35
|
+
|
|
36
|
+
**Costo**: ~5-15k tokens dependiendo del tamaño del proyecto (una sola vez).
|
|
37
|
+
|
|
38
|
+
### Ejecuciones posteriores
|
|
39
|
+
```bash
|
|
40
|
+
/sdd.mapear
|
|
41
|
+
```
|
|
42
|
+
→ Detección automática de archivos modificados (con `find -newer`) → re-indexa solo lo nuevo
|
|
43
|
+
|
|
44
|
+
**Costo**: ~500 tokens por archivo modificado (imperceptible).
|
|
45
|
+
|
|
46
|
+
### Si quieres forzar regeneración completa
|
|
47
|
+
```bash
|
|
48
|
+
/sdd.mapear regenerar
|
|
49
|
+
```
|
|
50
|
+
→ Borra los mapas viejos y empieza de cero.
|
|
51
|
+
|
|
52
|
+
**Cuándo**: Casi nunca. Solo si sospechas que el mapa está corrupto.
|
|
53
|
+
|
|
54
|
+
### Para validar sin actualizar
|
|
55
|
+
```bash
|
|
56
|
+
/sdd.mapear validar
|
|
57
|
+
```
|
|
58
|
+
Salida:
|
|
59
|
+
```
|
|
60
|
+
📊 Estado del mapa
|
|
61
|
+
├─ estructura.md ✅ fresco (hace 2h)
|
|
62
|
+
├─ simbolos.md ✅ fresco (hace 2h)
|
|
63
|
+
├─ dependencias.md ⚠️ desactualizado (12 archivos nuevos)
|
|
64
|
+
└─ Recomendación: /sdd.mapear actualizar
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Beneficios
|
|
68
|
+
|
|
69
|
+
- **Ahorro de tokens**: En lugar de que Claude lea 50-100 archivos (50k tokens), lee 3 archivos de mapa (10k tokens)
|
|
70
|
+
- **Actualización automática**: Hooks SDD actualizan el mapa después de implementar
|
|
71
|
+
- **Validación perezosa**: Al inicio de cualquier comando, verifica si hay archivos nuevos y actualiza silenciosamente
|
|
72
|
+
- **Control total**: Los mapas son Markdown plano, editable manualmente si necesitas
|
|
73
|
+
|
|
74
|
+
## Archivos generados
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
.sdd/mapa/
|
|
78
|
+
├── estructura.md — árbol + descripción por archivo
|
|
79
|
+
├── simbolos.md — funciones, clases, tipos, exports
|
|
80
|
+
├── dependencias.md — grafo de imports + acoplamientos
|
|
81
|
+
├── .estado-mapeo — metadata: última indexación, checksums
|
|
82
|
+
└── .pendientes — lista de archivos para próxima actualización (auto-gestionado)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Cómo consulta Claude estos mapas
|
|
86
|
+
|
|
87
|
+
Durante comandos como `/sdd.planificar` o `/sdd.implementar`:
|
|
88
|
+
|
|
89
|
+
1. Al inicio, Claude busca si existen los mapas
|
|
90
|
+
2. Si existen, los lee primero (son pequeños, ~10k tokens)
|
|
91
|
+
3. En lugar de correr `find . -type f`, Claude consulta mentalmente el mapa
|
|
92
|
+
4. Si necesita más detalle, entonces corre `/Read archivo.ts` — pero normalmente el mapa le alcanza
|
|
93
|
+
|
|
94
|
+
## Integración con otros comandos
|
|
95
|
+
|
|
96
|
+
- `/sdd.planificar` — Lee mapas al inicio para entender la estructura
|
|
97
|
+
- `/sdd.implementar` — Consulta grafo de dependencias antes de modificar archivos
|
|
98
|
+
- `/sdd.verificar` — Mapea CAs a símbolos encontrados en `simbolos.md`
|
|
99
|
+
- Hook `despues_implementar` — Marca archivos modificados para próxima actualización
|
|
100
|
+
|
|
101
|
+
## Lenguajes soportados
|
|
102
|
+
|
|
103
|
+
Detección automática de: TypeScript, Python, Rust, Go, Java, C#, Ruby, PHP, C/C++.
|
|
104
|
+
|
|
105
|
+
Si tu proyecto usa otro lenguaje, puedes editar `.sdd/mapa/estructura.md` manualmente.
|
|
106
|
+
|
|
107
|
+
## Regeneración automática
|
|
108
|
+
|
|
109
|
+
El plugin NO regenera automáticamente (para no gastar tokens). Pero:
|
|
110
|
+
|
|
111
|
+
- Hooks de SDD-ES actualizan después de `implementar`
|
|
112
|
+
- Validación perezosa (al inicio de otros comandos) detecta cambios
|
|
113
|
+
- Usuario puede forzar con `/sdd.mapear actualizar` cuando quiera
|
|
114
|
+
|
|
115
|
+
## Tips
|
|
116
|
+
|
|
117
|
+
- **Ignorar directorios**: Edita `.sdd/.mapeoignore` (sintaxis como `.gitignore`)
|
|
118
|
+
- **Debugging**: `/sdd.mapear validar` te muestra exactamente qué está desactualizado
|
|
119
|
+
- **Backup**: Los mapas anteriores se guardan como `.estructura.md.backup`, etc.
|
|
120
|
+
- **Espacio**: Los mapas son pequeños (~50KB típicamente), no hay problema de disk
|