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,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