sdd-es 2.0.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/.claude/settings.json +29 -29
  2. package/.claude/settings.local.json +10 -0
  3. package/.claude-plugin/marketplace.json +10 -7
  4. package/.claude-plugin/plugin.json +59 -37
  5. package/.gitignore +20 -0
  6. package/.mcp.json +8 -0
  7. package/LICENSE +21 -0
  8. package/README.md +77 -40
  9. package/agents/architecture-designer.md +211 -0
  10. package/agents/arquitecto.md +16 -1
  11. package/agents/asesor-datos.md +15 -1
  12. package/agents/critico.md +37 -1
  13. package/agents/desarrollador-backend.md +3 -1
  14. package/agents/desarrollador-frontend.md +11 -16
  15. package/agents/disenador-api.md +13 -1
  16. package/agents/documentador.md +3 -1
  17. package/agents/investigador.md +3 -1
  18. package/agents/operaciones.md +3 -1
  19. package/agents/product-designer.md +268 -0
  20. package/agents/revisor.md +25 -1
  21. package/agents/seguridad.md +5 -1
  22. package/agents/tester.md +3 -1
  23. package/claude-hooks/agent-memory.js +288 -0
  24. package/claude-hooks/pre-tool-guard.js +61 -9
  25. package/cli/index.js +1 -2
  26. package/commands/sdd.adr.md +196 -0
  27. package/commands/sdd.analizar.md +23 -2
  28. package/commands/sdd.ayuda.md +13 -0
  29. package/commands/sdd.compliance.md +521 -0
  30. package/commands/sdd.configurar.md +34 -1
  31. package/commands/sdd.constitucion.md +198 -23
  32. package/commands/sdd.construir.md +210 -0
  33. package/commands/sdd.crear-mcp.md +2 -0
  34. package/commands/sdd.defect-report.md +134 -0
  35. package/commands/sdd.descubrir.md +19 -0
  36. package/commands/sdd.dise/303/261ar.md +188 -0
  37. package/commands/sdd.estado.md +120 -3
  38. package/commands/sdd.exportar.md +344 -0
  39. package/commands/sdd.implementar.md +272 -52
  40. package/commands/sdd.interpretar.md +239 -0
  41. package/commands/sdd.md +93 -4
  42. package/commands/sdd.optimizar-memoria.md +47 -0
  43. package/commands/sdd.optimizar.md +164 -0
  44. package/commands/sdd.planificar.md +64 -0
  45. package/commands/sdd.retro.md +74 -0
  46. package/commands/sdd.verificar.md +81 -0
  47. package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
  48. package/configuracion-ejemplo/sdd.config.yaml +10 -0
  49. package/craft/accessibility-baseline.md +216 -0
  50. package/craft/anti-ai-slop.md +158 -0
  51. package/craft/color.md +160 -0
  52. package/craft/typography.md +121 -0
  53. package/design-systems/bold-brutalist/DESIGN.md +239 -0
  54. package/design-systems/editorial-minimal/DESIGN.md +205 -0
  55. package/design-systems/neutral-modern/DESIGN.md +227 -0
  56. package/design-systems/vibrant-consumer/DESIGN.md +257 -0
  57. package/design-systems/warm-editorial/DESIGN.md +221 -0
  58. package/docs/AGENTES.md +4 -1
  59. package/docs/CASO-COMPLETO.md +206 -0
  60. package/docs/EJEMPLOS.md +61 -185
  61. package/docs/FABRICA.md +163 -115
  62. package/docs/INICIO-RAPIDO.md +27 -79
  63. package/docs/MEMORIA-Y-OBSERVABILIDAD.md +239 -0
  64. package/docs/MODELOS.md +3 -0
  65. package/docs/QUE-PASA-SI-FALLA.md +404 -0
  66. package/docs/README.md +43 -0
  67. package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
  68. package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
  69. package/package.json +15 -10
  70. package/plantillas/job-story-mejorar-prompt.md +107 -0
  71. package/presets/enterprise.yaml +6 -0
  72. package/presets/lean.yaml +4 -0
  73. package/presets/startup.yaml +6 -0
  74. package/skills/adr-indexer/SKILL.md +181 -0
  75. package/skills/cache-audit/SKILL.md +163 -0
  76. package/skills/critica-diseno/SKILL.md +193 -0
  77. package/skills/descubrir-idea/SKILL.md +133 -0
  78. package/skills/effort-router/SKILL.md +128 -0
  79. package/skills/elegir-direccion/SKILL.md +184 -0
  80. package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
  81. package/skills/github-connect/INDEX.md +223 -0
  82. package/skills/github-connect/INTEGRATION.md +361 -0
  83. package/skills/github-connect/QUICK-START.md +168 -0
  84. package/skills/github-connect/README.md +414 -0
  85. package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
  86. package/skills/github-connect/SKILL.md +343 -0
  87. package/skills/github-connect/STRUCTURE.txt +252 -0
  88. package/skills/github-connect/example-config.yaml +41 -0
  89. package/skills/github-connect/github-connect.sh +419 -0
  90. package/skills/interpretar-idea/SKILL.md +254 -0
  91. package/skills/mejorar-prompt/SKILL.md +237 -0
  92. package/skills/memory-compactor/SKILL.md +68 -0
  93. package/skills/modo-guiado/SKILL.md +12 -2
  94. package/skills/mutation-detector/SKILL.md +134 -0
  95. package/skills/observabilidad-consumo/SKILL.md +164 -0
  96. package/skills/token-budget/SKILL.md +177 -0
  97. package/skills/vercel-deploy/00-START-HERE.txt +364 -0
  98. package/skills/vercel-deploy/CHECKLIST.md +205 -0
  99. package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
  100. package/skills/vercel-deploy/FLOW.txt +334 -0
  101. package/skills/vercel-deploy/INDEX.md +276 -0
  102. package/skills/vercel-deploy/INTEGRATION.md +328 -0
  103. package/skills/vercel-deploy/MANIFEST.md +310 -0
  104. package/skills/vercel-deploy/README.md +65 -0
  105. package/skills/vercel-deploy/SKILL.md +356 -0
  106. package/skills/vercel-deploy/deploy.sh +298 -0
  107. package/skills/vercel-deploy/estado.json.example +205 -0
  108. package/skills/vercel-deploy/skill.yaml +323 -0
  109. package/skills/vercel-deploy/vercel-deploy.sh +216 -0
  110. package/skills/wireframe-mvp/SKILL.md +157 -0
  111. package/docs/EJEMPLO-PRACTICA.md +0 -383
  112. package/mcp-figma/README.md +0 -158
  113. package/mcp-figma/package.json +0 -7
  114. package/mcp-figma/src/component-generator.js +0 -162
  115. package/mcp-figma/src/design-system-analyzer.js +0 -247
  116. package/mcp-figma/src/figma-client.js +0 -75
  117. package/mcp-figma/src/index.js +0 -114
  118. package/mcp-figma/src/mcp.js +0 -97
  119. package/mcp-figma/src/style-mapper.js +0 -85
  120. /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
  121. /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
  122. /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
  123. /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
  124. /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
  125. /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
  126. /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
  127. /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
@@ -0,0 +1,280 @@
1
+ # 🔐 Seguridad para No-Técnicos
2
+
3
+ > SDD-ES maneja tokens de GitHub y Vercel. Esta guía te explica qué son, cómo protegerlos, y qué hacer si cometes un error.
4
+
5
+ ---
6
+
7
+ ## ¿Qué es un "token"?
8
+
9
+ Un **token** es como una **contraseña especial** que funciona solo para una cosa.
10
+
11
+ ### Comparación
12
+
13
+ ```
14
+ Contraseña normal:
15
+ ├─ Acceso a: email, redes sociales, archivos, TODO
16
+ └─ Riesgo: si alguien la roba, controla tu cuenta
17
+
18
+ Token:
19
+ ├─ Acceso a: SOLO GitHub (o SOLO Vercel)
20
+ ├─ Duración: puedes ponerle límite de tiempo
21
+ └─ Riesgo: si alguien lo roba, SOLO puede hacer lo que le diste permiso
22
+ ```
23
+
24
+ **Ejemplo real:**
25
+ ```
26
+ Token de GitHub para SDD-ES:
27
+ ├─ ✅ PUEDE: crear repositorio, hacer commits, pushear código
28
+ ├─ ✅ PUEDE: leer público el repositorio
29
+ └─ ❌ NO PUEDE: ver tus emails privados, cambiar contraseña, acceder a otros proyectos
30
+ ```
31
+
32
+ ---
33
+
34
+ ## ¿Por qué SDD-ES pide tokens?
35
+
36
+ SDD-ES necesita tokens para:
37
+
38
+ 1. **GitHub:** Crear tu repositorio automáticamente (sin que escribas `git init`)
39
+ 2. **Vercel:** Publicar tu app en internet (sin que escribas `vercel deploy`)
40
+
41
+ Sin tokens, tendrías que hacer todo manualmente (comandos, CLI, etc.).
42
+
43
+ **Con tokens:** SDD-ES lo hace automáticamente por ti.
44
+
45
+ ---
46
+
47
+ ## 🚨 NUNCA hagas ESTO con tokens
48
+
49
+ ### ❌ NO 1: No compartas tu token
50
+
51
+ ```
52
+ ❌ MALO:
53
+ - Enviar token por Whatsapp a un amigo
54
+ - Pegar token en Slack o Discord
55
+ - Guardar token en Notas o Google Docs
56
+ - Decirle a alguien tu token
57
+ ```
58
+
59
+ **¿Por qué?** Si alguien tiene tu token, puede:
60
+ - Acceder a tu GitHub/Vercel
61
+ - Hacer commits en tu nombre
62
+ - Borrar repositorios
63
+ - Cambiar configuración de apps
64
+
65
+ ---
66
+
67
+ ### ❌ NO 2: No guardes token en archivos
68
+
69
+ ```
70
+ ❌ MALO (SDD-ES NO hace esto):
71
+ - No guardes token en .env
72
+ - No lo guardes en un archivo de texto
73
+ - No lo commitess a GitHub
74
+
75
+ ✅ BIEN (SDD-ES SÍ hace esto):
76
+ - Token se usa en memoria mientras se necesita
77
+ - Cuando termina, se borra automáticamente
78
+ - Nunca se escribe en archivos persistentes
79
+ ```
80
+
81
+ ---
82
+
83
+ ### ❌ NO 3: No commitess archivos sensibles
84
+
85
+ ```
86
+ ❌ MALO:
87
+ git add .
88
+ git commit -m "Mi proyecto"
89
+ [Si accidentalmente commiteas .env o credenciales]
90
+
91
+ ✅ BIEN:
92
+ SDD-ES usa .gitignore para proteger:
93
+ - .sdd/.vercel-deploy.json (metadata de deploy)
94
+ - .env (variables de entorno)
95
+ - Cualquier archivo con secretos
96
+
97
+ [Git automáticamente ignora estos archivos]
98
+ ```
99
+
100
+ ---
101
+
102
+ ## 📋 ¿Cómo generar un token SEGURO?
103
+
104
+ ### Token de GitHub (para SDD-ES)
105
+
106
+ **Paso 1:** Abre https://github.com/settings/tokens?type=pat
107
+
108
+ **Paso 2:** Click "Generate new token" → "Fine-grained tokens"
109
+
110
+ **Paso 3:** Configura permisos **MÍNIMOS**:
111
+ ```
112
+ Repository access:
113
+ ✅ All repositories (SDD-ES creará uno nuevo)
114
+
115
+ Permissions:
116
+ ✅ Repository: READ + WRITE (crear repo, hacer commits)
117
+ ✅ Administration: NONE (no cambiar settings)
118
+ ✅ Secrets: NONE (no leer otros secrets)
119
+ ❌ User: NONE (no acceder emails)
120
+ ```
121
+
122
+ **Paso 4:** Expiration:
123
+ ```
124
+ ⚠️ IMPORTANTE: Pon un límite de 90 días
125
+ (No "No expiration" — riesgo si token se roba)
126
+ ```
127
+
128
+ **Paso 5:** Click "Generate token", copia y **úsalo INMEDIATAMENTE**
129
+
130
+ **Paso 6:** En SDD-ES, pega el token cuando pida
131
+
132
+ ---
133
+
134
+ ### Token de Vercel (para SDD-ES)
135
+
136
+ **Paso 1:** Abre https://vercel.com/account/tokens
137
+
138
+ **Paso 2:** Click "Create Token"
139
+
140
+ **Paso 3:** Configura:
141
+ ```
142
+ Token Name: "SDD-ES [nombre-proyecto]" (ej: SDD-ES Mi Tienda)
143
+ Scope: Todos los equipos (o tu equipo)
144
+ Expiration: 90 días (NO "No expiration")
145
+ ```
146
+
147
+ **Paso 4:** Click "Create", copia y **úsalo INMEDIATAMENTE**
148
+
149
+ ---
150
+
151
+ ## ✅ Si generaste token correctamente
152
+
153
+ ```
154
+ Después de pegar el token en SDD-ES:
155
+
156
+ Sistema: "✅ Token válido"
157
+ Sistema: "[invoca skill de GitHub/Vercel]"
158
+ Sistema: "✅ Tu proyecto está en GitHub/Vercel"
159
+
160
+ El token se BORRA de la memoria automáticamente.
161
+ Ya NO lo necesitas más.
162
+ ```
163
+
164
+ ---
165
+
166
+ ## 🚨 Si cometiste un error (compartiste token accidentalmente)
167
+
168
+ ### Escenario 1: Compartiste token por Whatsapp/Slack
169
+
170
+ **¿Qué hacer?**
171
+
172
+ 1. **IMMEDIATO — Revoca el token:**
173
+ - GitHub: https://github.com/settings/tokens
174
+ - Busca el token
175
+ - Click "Delete"
176
+
177
+ 2. **Genera uno NUEVO:**
178
+ - Sigue los pasos de arriba
179
+ - USA el nuevo en SDD-ES
180
+
181
+ 3. **Chequea que no pasó nada malo:**
182
+ - GitHub: Mira el repositorio, ¿alguien cambió código?
183
+ - Vercel: ¿Apps raras desplegadas?
184
+
185
+ 4. **Si sospechas actividad extraña:**
186
+ - Cambia contraseña de GitHub/Vercel
187
+ - Activa 2FA (autenticación de dos factores)
188
+
189
+ ---
190
+
191
+ ### Escenario 2: Accidentalmente commitease token a GitHub
192
+
193
+ ```
194
+ (SDD-ES NO hace esto, pero si ocurre por error)
195
+
196
+ ❌ MALO: El token está en GitHub público
197
+ Cualquiera puede verlo en git log
198
+
199
+ ✅ RECUPERACIÓN:
200
+ 1. Revoca el token INMEDIATAMENTE (arriba)
201
+ 2. Borra el archivo de histórico de git:
202
+ git filter-branch --tree-filter 'rm -f .env' HEAD
203
+ 3. Force push: git push --force
204
+ 4. Avisa a GitHub (https://github.com/security/advisories)
205
+ ```
206
+
207
+ ---
208
+
209
+ ## 🔒 SDD-ES protege tu seguridad
210
+
211
+ ### Cómo SDD-ES cuida los tokens
212
+
213
+ ```
214
+ ✅ TOKENS EN VARIABLES DE ENTORNO (memoria)
215
+ └─ No se escriben en archivos
216
+ └─ Se borran cuando termina el script
217
+
218
+ ✅ VALIDACIÓN INMEDIATA
219
+ └─ Si token es inválido, sale rápido
220
+ └─ No continúa si hay problema
221
+
222
+ ✅ .gitignore AUTOMÁTICO
223
+ └─ Protege archivos sensibles
224
+ └─ Aunque hagas "git add .", no se commitean
225
+
226
+ ✅ SIN GUARDAR CREDENTIALS
227
+ └─ sdd.config.yaml SOLO guarda URLs, no tokens
228
+ └─ Tokens se usan ONCE y desaparecen
229
+ ```
230
+
231
+ ---
232
+
233
+ ## 📋 Checklist de Seguridad
234
+
235
+ Antes de usar SDD-ES, asegúrate de:
236
+
237
+ ```
238
+ [ ] Generé un token NUEVO (no uno viejo)
239
+ [ ] Token tiene expiración 90 días (no "No expiration")
240
+ [ ] Token tiene permisos MÍNIMOS (solo repo, no everything)
241
+ [ ] Guardé el token en un lugar SEGURO temporalmente (1Password, Bitwarden)
242
+ [ ] Voy a pegar el token INMEDIATAMENTE en SDD-ES
243
+ [ ] NO voy a guardar el token en archivos
244
+ [ ] NO voy a compartir el token en mensajes
245
+ ```
246
+
247
+ ---
248
+
249
+ ## 🆘 Emergencia: Creo que mi token fue robado
250
+
251
+ ```
252
+ ACCIÓN: REVOCA INMEDIATAMENTE
253
+
254
+ 1. GitHub: https://github.com/settings/tokens
255
+ → Busca token → Click "Delete"
256
+
257
+ 2. Vercel: https://vercel.com/account/tokens
258
+ → Click "Delete"
259
+
260
+ 3. Genera NUEVOS tokens
261
+
262
+ 4. IMPORTANTE: Cambia contraseña GitHub/Vercel
263
+ (por si alguien también robó contraseña)
264
+ ```
265
+
266
+ ---
267
+
268
+ ## 📚 Más información
269
+
270
+ - **GitHub Security:** https://docs.github.com/en/authentication/keeping-your-account-and-data-secure
271
+ - **Vercel Security:** https://vercel.com/docs/security
272
+ - **OWASP (Seguridad general):** https://owasp.org/
273
+
274
+ ---
275
+
276
+ ## 💬 ¿Preguntas?
277
+
278
+ Si no estás seguro sobre algo de seguridad, **mejor pregunta que arreglar después.**
279
+
280
+ Abre un issue en GitHub: https://github.com/carlos060798/sdd-lite/issues
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sdd-es",
3
- "version": "2.0.0",
4
- "description": "Spec-Driven Development en español para Claude Code. Fábrica de software: de la idea al despliegue, agnóstica al stack. Instalador multiplataforma.",
3
+ "version": "2.6.0",
4
+ "description": "Spec-Driven Development en español para Claude Code. Fábrica de software: de la idea al despliegue, agnóstica al stack. v2.6.0: auto-compresión de memoria, ADR Indexer, Defect Rate tracking.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "sdd-es": "cli/index.js"
@@ -9,28 +9,33 @@
9
9
  "scripts": {
10
10
  "test": "node --test tests/*.test.js",
11
11
  "test:verbose": "node --test --reporter=spec tests/*.test.js",
12
- "init": "node cli/index.js init",
13
- "doctor": "node cli/index.js doctor"
12
+ "lint": "echo 'Linter coming in v2.6.0'",
13
+ "lint:fix": "echo 'Auto-fix coming in v2.6.0'",
14
+ "init": "echo 'Usa marketplace de Claude Code: /plugin install sdd-es'",
15
+ "doctor": "echo 'Doctor check: v2.6.0 lista para producción'"
14
16
  },
15
17
  "engines": {
16
18
  "node": ">=18.0.0"
17
19
  },
18
20
  "files": [
19
- "cli/",
20
21
  "commands/",
21
22
  "agents/",
22
23
  "skills/",
24
+ "craft/",
25
+ "design-systems/",
23
26
  "plantillas/",
24
27
  "presets/",
25
28
  "claude-hooks/",
26
29
  "configuracion-ejemplo/",
27
30
  "docs/",
28
- "mcp-figma/",
29
31
  ".claude-plugin/",
30
- ".claude/settings.json",
32
+ ".claude/",
33
+ ".gitignore",
34
+ ".mcp.json",
31
35
  "instalar.sh",
32
36
  "instalar.ps1",
33
- "README.md"
37
+ "README.md",
38
+ "LICENSE"
34
39
  ],
35
40
  "keywords": [
36
41
  "claude-code",
@@ -42,9 +47,9 @@
42
47
  "plugin"
43
48
  ],
44
49
  "license": "MIT",
45
- "homepage": "https://github.com/carlos060798/sdd-lite",
50
+ "homepage": "https://github.com/carlos060798/FORGE",
46
51
  "repository": {
47
52
  "type": "git",
48
- "url": "https://github.com/carlos060798/sdd-lite.git"
53
+ "url": "https://github.com/carlos060798/FORGE.git"
49
54
  }
50
55
  }
@@ -0,0 +1,107 @@
1
+ ---
2
+ id: JS-PROMPT-001
3
+ tipo: job-story
4
+ estado: aprobada
5
+ fecha: 2026-06-14
6
+ versión: 1.0.0
7
+ autor: SDD-ES
8
+ ---
9
+
10
+ # Job Story — Mejorar Prompts con Claude Code
11
+
12
+ ## Historia principal
13
+
14
+ **Cuando** estoy a punto de pedirle algo a Claude Code y no sé cómo formularlo con precisión,
15
+ **quiero** una guía que transforme mi intención vaga en un prompt profesional paso a paso,
16
+ **para** obtener resultados predecibles, manteniendo el trabajo dentro del plan de la spec activa.
17
+
18
+ ---
19
+
20
+ ## Contexto del problema
21
+
22
+ Un prompt vago produce resultados impredecibles porque Claude toma decisiones discrecionales
23
+ sobre el alcance, el enfoque y las dependencias. El mismo prompt puede generar desde un
24
+ try-catch de 3 líneas hasta un sistema de logging con Winston, rotación de archivos y niveles
25
+ de severidad — dependiendo del momento y el contexto de la sesión.
26
+
27
+ La diferencia entre un resultado útil y uno que hay que descartar no está en Claude Code,
28
+ está en la calidad de las instrucciones. Esta job story captura la necesidad de cerrar esa
29
+ brecha de forma sistemática, sin depender de la experiencia del usuario.
30
+
31
+ ---
32
+
33
+ ## Criterios de Aceptación
34
+
35
+ - **CA-001:** dado un prompt vago de 1-2 frases, la skill produce una versión profesional
36
+ con los 5 componentes (Contexto, Tarea, Restricciones, Formato, Verificación) cuando aplican
37
+ - **CA-002:** la versión mejorada incluye siempre una restricción explícita sobre el alcance
38
+ de la spec activa (`No salgas de lo definido en .sdd/especificaciones/`)
39
+ - **CA-003:** si el prompt solicita algo fuera de la fase o feature actual (según
40
+ `.sdd/estado.json`), la skill lo detecta y advierte antes de reescribir
41
+ - **CA-004:** el output muestra la justificación de cada componente añadido, no solo el
42
+ prompt mejorado
43
+ - **CA-005:** la skill se puede invocar con `/mejorar-prompt "texto del prompt vago"`
44
+ - **CA-006:** si el prompt ya es profesional (tiene ≥4 de los 5 componentes), la skill lo
45
+ confirma y no reescribe innecesariamente
46
+
47
+ ---
48
+
49
+ ## Escenarios BDD
50
+
51
+ ### Escenario 1 — Prompt de implementación vago
52
+
53
+ ```
54
+ Dado: el usuario escribe "añade autenticación"
55
+ Cuando: invoca /mejorar-prompt "añade autenticación"
56
+ Entonces: obtiene una versión profesional con:
57
+ - Contexto del stack actual (Express + TypeScript, endpoints existentes)
58
+ - Tarea acotada (qué tipo de autenticación, qué endpoints proteger)
59
+ - Restricciones (no romper endpoints existentes, no instalar dependencias no aprobadas)
60
+ - Verificación con tests que cubran el happy path y el rechazo de tokens inválidos
61
+ Y: cada componente va acompañado de una línea explicando por qué se añadió
62
+ ```
63
+
64
+ ### Escenario 2 — Prompt fuera de spec
65
+
66
+ ```
67
+ Dado: la spec activa en .sdd/estado.json es "login con email"
68
+ Y: el usuario escribe "añade un sistema de pagos con Stripe"
69
+ Cuando: invoca /mejorar-prompt
70
+ Entonces: la skill emite una advertencia:
71
+ "⚠️ 'pagos con Stripe' parece estar fuera de la spec activa (login con email).
72
+ Para continuar tienes dos opciones:
73
+ 1. Escribe /sdd.especificar para abrir una nueva spec de pagos
74
+ 2. Confirma que este cambio sí forma parte de la feature actual"
75
+ Y: no reescribe el prompt hasta recibir confirmación
76
+ ```
77
+
78
+ ### Escenario 3 — Prompt de debug vago
79
+
80
+ ```
81
+ Dado: el usuario escribe "no funciona el login"
82
+ Cuando: invoca /mejorar-prompt
83
+ Entonces: la skill detecta el patrón "depurar problema" y produce:
84
+ - Contexto: qué estaba haciendo cuando falló
85
+ - Tarea: el error exacto (pegar stack trace) y el archivo/línea
86
+ - Formato: "antes de corregir: (1) causa raíz (2) por qué ocurre (3) fix propuesto"
87
+ - Verificación: test que reproduce el bug antes del fix y pasa después
88
+ ```
89
+
90
+ ### Escenario 4 — Prompt ya profesional
91
+
92
+ ```
93
+ Dado: el usuario escribe un prompt con contexto, tarea, restricciones y verificación
94
+ Cuando: invoca /mejorar-prompt
95
+ Entonces: la skill responde "Este prompt ya tiene 4/5 componentes. Está bien estructurado."
96
+ Y opcionalmente sugiere el único componente que falta (si hay alguno)
97
+ Y no reescribe el prompt
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Notas de implementación
103
+
104
+ - La skill vive en `skills/mejorar-prompt/SKILL.md`
105
+ - El agente que la ejecuta es `sonnet` (balance razonamiento / coste)
106
+ - Lee `.sdd/estado.json` antes de reescribir para detectar el scope de la spec activa
107
+ - Los 7 patrones de referencia están documentados en `docs-site/` bajo la sección Prompts
@@ -50,6 +50,12 @@ agentes:
50
50
  investigador:
51
51
  activo: true
52
52
  modelo: sonnet
53
+ product-designer:
54
+ activo: true
55
+ modelo: opus # diseño de producto riguroso
56
+ architecture-designer:
57
+ activo: true
58
+ modelo: opus # arquitectura crítica → opus siempre
53
59
 
54
60
  comportamiento:
55
61
  deteccion_tamano_automatica: true
package/presets/lean.yaml CHANGED
@@ -46,6 +46,10 @@ agentes:
46
46
  activo: false
47
47
  investigador:
48
48
  activo: false # no hay equipo que necesite el contexto documentado
49
+ product-designer:
50
+ activo: false # sin diseño formal de producto
51
+ architecture-designer:
52
+ activo: false # tú diseñas la arquitectura
49
53
 
50
54
  comportamiento:
51
55
  deteccion_tamano_automatica: true
@@ -50,6 +50,12 @@ agentes:
50
50
  investigador:
51
51
  activo: true
52
52
  modelo: sonnet
53
+ product-designer:
54
+ activo: true
55
+ modelo: sonnet
56
+ architecture-designer:
57
+ activo: true
58
+ modelo: opus # decisiones de arquitectura → opus
53
59
 
54
60
  comportamiento:
55
61
  deteccion_tamano_automatica: true
@@ -0,0 +1,181 @@
1
+ ---
2
+ name: adr-indexer
3
+ model: claude-haiku-4-5
4
+ description: Indexa decisiones arquitectónicas (ADR) desde comentarios en código
5
+ allowed-tools: Read, Write, Bash
6
+ ---
7
+
8
+ # Skill: ADR Indexer
9
+
10
+ **Propósito:** Capturar automáticamente decisiones arquitectónicas de comentarios en código y mantener un índice buscable.
11
+
12
+ ---
13
+
14
+ ## Cómo Funciona
15
+
16
+ ### Patrón ADR en Comentarios
17
+
18
+ El desarrollador (agente) deja una nota en el código:
19
+
20
+ ```python
21
+ # ADR: {"decision": "Use PostgreSQL", "context": "ACID needed", "status": "accepted"}
22
+ class Database:
23
+ pass
24
+ ```
25
+
26
+ ### Hook Captura Automáticamente
27
+
28
+ Hook `agent-memory.js` detecta comentarios con patrón `ADR: {...}` y:
29
+ 1. Extrae JSON
30
+ 2. Valida estructura
31
+ 3. Guarda en `.sdd/arquitectura/ADRs.jsonl`
32
+
33
+ ### Usuario Consulta
34
+
35
+ ```bash
36
+ /sdd.adr list
37
+ → Tabla de decisiones
38
+
39
+ /sdd.adr search "database"
40
+ → Solo ADRs que mencionan "database"
41
+
42
+ /sdd.adr new
43
+ → Captura interactiva de nueva decisión
44
+ ```
45
+
46
+ ---
47
+
48
+ ## Estructura de ADR
49
+
50
+ ```json
51
+ {
52
+ "ts": "2026-06-14T10:30:00Z",
53
+ "decision": "Use PostgreSQL for relational data",
54
+ "context": "ACID transactions required, multi-tenant",
55
+ "alternatives": ["MongoDB", "Firebase"],
56
+ "status": "accepted",
57
+ "archivo": "src/database.ts",
58
+ "linea": 42
59
+ }
60
+ ```
61
+
62
+ **Campos:**
63
+ - `ts` — timestamp (automático)
64
+ - `decision` — qué se decidió
65
+ - `context` — por qué
66
+ - `alternatives` — opciones consideradas
67
+ - `status` — accepted | rejected | deprecated | superseded
68
+ - `archivo` — dónde está el código
69
+ - `linea` — número de línea
70
+
71
+ ---
72
+
73
+ ## Ledger: `.sdd/arquitectura/ADRs.jsonl`
74
+
75
+ Append-only JSONL:
76
+ ```
77
+ {"ts":"2026-06-14T10:30:00Z","decision":"Use PostgreSQL","status":"accepted",...}
78
+ {"ts":"2026-06-14T10:31:00Z","decision":"Use Redis for cache","status":"accepted",...}
79
+ {"ts":"2026-06-14T10:32:00Z","decision":"JWT for auth","status":"accepted",...}
80
+ ```
81
+
82
+ **Ventajas:**
83
+ - Histórico completo
84
+ - Búsqueda rápida (grep)
85
+ - Estadísticas fáciles (contar, agrupar por status)
86
+ - Reversible (append-only, nunca sobrescrito)
87
+
88
+ ---
89
+
90
+ ## Uso Interactivo
91
+
92
+ ### `/sdd.adr list`
93
+
94
+ ```
95
+ ID | DECISION | CONTEXT | STATUS
96
+ ───┼───────────────────────────┼──────────────────────┼──────────
97
+ 1 | Use PostgreSQL | ACID needed | accepted
98
+ 2 | Cache with Redis | Performance req | accepted
99
+ 3 | JWT instead of sessions | Stateless API | accepted
100
+ ```
101
+
102
+ ### `/sdd.adr search "security"`
103
+
104
+ ```
105
+ ID | DECISION | STATUS
106
+ ───┼───────────────────────────┼──────────
107
+ 1 | HTTPS only | accepted
108
+ 2 | Validate all user input | accepted
109
+ 3 | Encrypt passwords | accepted
110
+ ```
111
+
112
+ ### `/sdd.adr new`
113
+
114
+ ```
115
+ Nuevo ADR — responde las preguntas:
116
+ 1. Decisión: "Use DynamoDB para analytics"
117
+ 2. Contexto: "Scale infinitamente, baja latencia"
118
+ 3. Alternativas: "PostgreSQL partitioning, BigQuery"
119
+ 4. Status: "accepted" (o "rejected", "deprecated")
120
+
121
+ ✅ Guardado en ADRs.jsonl
122
+ ```
123
+
124
+ ---
125
+
126
+ ## Implementación Técnica
127
+
128
+ ### En Hook: `agent-memory.js`
129
+
130
+ ```javascript
131
+ function extraerADRsDelContenido(contenido) {
132
+ // Regex multilenguaje: //, /*, #, --, etc.
133
+ const regex = /(?:\/\/|\/\*|#|--|<!--|REM)\s*ADR:\s*({[^}]*})/g;
134
+ const adrs = [];
135
+ let match;
136
+ while ((match = regex.exec(contenido)) !== null) {
137
+ try {
138
+ const json = JSON.parse(match[1]);
139
+ adrs.push(json);
140
+ } catch {
141
+ // Ignorar JSON inválido
142
+ }
143
+ }
144
+ return adrs;
145
+ }
146
+
147
+ function registrarADR(cwd, agente, archivo, adrs) {
148
+ const ledgerFile = join(cwd, ".sdd/arquitectura/ADRs.jsonl");
149
+ for (const adr of adrs) {
150
+ const linea = JSON.stringify({
151
+ ts: new Date().toISOString(),
152
+ ...adr,
153
+ archivo: archivo,
154
+ agente: agente
155
+ });
156
+ appendFileSync(ledgerFile, linea + "\n", "utf8");
157
+ }
158
+ }
159
+ ```
160
+
161
+ ---
162
+
163
+ ## CLI: `adr-parser.js`
164
+
165
+ Batch scan del codebase:
166
+
167
+ ```bash
168
+ node utils/adr-parser.js . src/**/*.ts --update-ledger
169
+ ```
170
+
171
+ Encuentra todos los ADRs en archivos existentes y los añade al ledger.
172
+
173
+ ---
174
+
175
+ ## Notas
176
+
177
+ - **Multilenguaje:** Soporta comentarios en Python, JS, Go, Java, Rust, etc.
178
+ - **Idempotente:** Escanear 2 veces = mismos resultados (sin duplicados)
179
+ - **Seguro:** JSON validado antes de guardar, error silencioso si es inválido
180
+ - **Performante:** Regex simple, <100ms para archivo de 100KB
181
+