sdd-es 2.5.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.
- package/.claude/settings.json +24 -0
- package/.claude/settings.local.json +10 -0
- package/.claude-plugin/marketplace.json +34 -0
- package/.claude-plugin/plugin.json +119 -0
- package/.gitignore +20 -0
- package/.mcp.json +8 -0
- package/README.md +27 -20
- package/agents/architecture-designer.md +37 -0
- package/agents/desarrollador-frontend.md +8 -15
- package/agents/product-designer.md +36 -0
- package/claude-hooks/agent-memory.js +137 -3
- package/claude-hooks/pre-tool-guard.js +61 -9
- package/commands/sdd.adr.md +196 -0
- package/commands/sdd.ayuda.md +13 -0
- package/commands/sdd.compliance.md +5 -0
- package/commands/sdd.configurar.md +1 -1
- package/commands/sdd.crear-mcp.md +2 -0
- package/commands/sdd.defect-report.md +134 -0
- package/commands/sdd.descubrir.md +19 -0
- package/commands/sdd.estado.md +52 -2
- package/commands/sdd.implementar.md +71 -31
- package/commands/sdd.md +23 -3
- package/commands/sdd.optimizar-memoria.md +47 -0
- package/commands/sdd.retro.md +74 -0
- package/commands/sdd.verificar.md +71 -0
- package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
- package/configuracion-ejemplo/sdd.config.yaml +10 -0
- package/docs/CASO-COMPLETO.md +206 -0
- package/docs/EJEMPLOS.md +88 -0
- package/docs/FABRICA.md +5 -6
- package/docs/INICIO-RAPIDO.md +27 -79
- package/docs/MEMORIA-Y-OBSERVABILIDAD.md +12 -10
- package/docs/README.md +43 -0
- package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
- package/package.json +11 -8
- package/plantillas/job-story-mejorar-prompt.md +107 -0
- package/presets/enterprise.yaml +6 -0
- package/presets/lean.yaml +4 -0
- package/presets/startup.yaml +6 -0
- package/skills/adr-indexer/SKILL.md +181 -0
- package/skills/cache-audit/SKILL.md +1 -1
- package/skills/critica-diseno/SKILL.md +1 -1
- package/skills/descubrir-idea/SKILL.md +1 -1
- package/skills/effort-router/SKILL.md +1 -1
- package/skills/elegir-direccion/SKILL.md +1 -1
- package/skills/interpretar-idea/SKILL.md +1 -1
- package/skills/mejorar-prompt/SKILL.md +237 -0
- package/skills/memory-compactor/SKILL.md +34 -80
- package/skills/mutation-detector/SKILL.md +134 -0
- package/skills/observabilidad-consumo/SKILL.md +1 -1
- package/skills/token-budget/SKILL.md +24 -1
- package/skills/wireframe-mvp/SKILL.md +1 -1
- package/mcp-figma/README.md +0 -158
- package/mcp-figma/package.json +0 -7
- package/mcp-figma/src/component-generator.js +0 -162
- package/mcp-figma/src/design-system-analyzer.js +0 -247
- package/mcp-figma/src/figma-client.js +0 -75
- package/mcp-figma/src/index.js +0 -114
- package/mcp-figma/src/mcp.js +0 -97
- package/mcp-figma/src/style-mapper.js +0 -85
|
@@ -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
|
package/presets/enterprise.yaml
CHANGED
|
@@ -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
|
package/presets/startup.yaml
CHANGED
|
@@ -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
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Audita los archivos de agentes (.claude/agents/*.md) para detectar bloques estables susceptibles de cache_control y los 3 patrones que invalidan caché silenciosamente (timestamps dinámicos, UUIDs, contenido JSONL embebido). Produce una lista de oportunidades de caché ordenadas por impacto.
|
|
3
|
-
model:
|
|
3
|
+
model: haiku
|
|
4
4
|
allowed-tools: Read, Bash
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Auto-crítica del wireframe generado. Evalúa en 5 dimensiones con score 1-5. Si score < 4 y iteraciones < 3, refina el artefacto y repite. Adaptado de critique-theater de open-design.
|
|
3
|
-
model:
|
|
3
|
+
model: sonnet
|
|
4
4
|
allowed-tools: Read, Write
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Dado el nombre de la fase SDD actual, recomienda effort (low/medium/high/max) y modelo (Haiku/Sonnet/Opus) para cada agente. Evita pagar Opus cuando Sonnet o Haiku son suficientes — ahorro típico del 60-75% en fases mecánicas.
|
|
3
|
-
model:
|
|
3
|
+
model: haiku
|
|
4
4
|
allowed-tools: Read
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Direction picker inspirado en open-design. Selecciona 3 de las 5 direcciones visuales disponibles según el tipo de producto y audiencia del IR, y el usuario elige una antes de generar cualquier diseño.
|
|
3
|
-
model:
|
|
3
|
+
model: sonnet
|
|
4
4
|
allowed-tools: Read, Write
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Convierte una idea en texto libre a un IR (Interpreted Requirement) JSON validado. Trabaja en 2 fases - razonamiento libre + extracción JSON. Lee .sdd/descubrimiento.md si existe.
|
|
3
|
-
model:
|
|
3
|
+
model: opus
|
|
4
4
|
allowed-tools: Read, Write
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Transforma un prompt vago en versión profesional siguiendo los 7 patrones
|
|
3
|
+
de Claude Code (Contexto · Tarea · Restricciones · Formato · Verificación). Detecta
|
|
4
|
+
si el prompt solicita algo fuera de la spec activa y advierte antes de continuar.
|
|
5
|
+
model: sonnet
|
|
6
|
+
allowed-tools: Read, Bash
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill: Mejorar Prompt
|
|
10
|
+
|
|
11
|
+
## Propósito
|
|
12
|
+
|
|
13
|
+
Un prompt vago produce resultados impredecibles. Claude Code toma decisiones discrecionales
|
|
14
|
+
sobre alcance, enfoque y dependencias cuando las instrucciones son ambiguas. Esta skill
|
|
15
|
+
cierra esa brecha: toma la intención del usuario y la convierte en un prompt profesional
|
|
16
|
+
con los componentes necesarios para obtener resultados predecibles y dentro de la spec activa.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Lo que lees primero
|
|
21
|
+
|
|
22
|
+
Antes de reescribir el prompt, lee el estado del proyecto:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Fase y feature activa
|
|
26
|
+
cat .sdd/estado.json 2>/dev/null || echo "SIN_ESTADO"
|
|
27
|
+
|
|
28
|
+
# Spec activa (si existe estado)
|
|
29
|
+
SPEC_ID=$(cat .sdd/estado.json 2>/dev/null | grep -o '"spec_activa":"[^"]*"' | cut -d'"' -f4)
|
|
30
|
+
[ -n "$SPEC_ID" ] && cat ".sdd/especificaciones/${SPEC_ID}/spec.md" 2>/dev/null | head -40
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Si no existe `.sdd/estado.json`: continúa sin validación de scope. No inventes un estado.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Los 7 patrones
|
|
38
|
+
|
|
39
|
+
Identifica cuál de estos patrones aplica al prompt del usuario antes de reescribirlo:
|
|
40
|
+
|
|
41
|
+
| # | Patrón | Cuándo aplica |
|
|
42
|
+
|---|--------|---------------|
|
|
43
|
+
| 1 | **Implementar feature** | "añade X", "crea Y", "implementa Z" |
|
|
44
|
+
| 2 | **Depurar problema** | "no funciona", "hay un error", "falla cuando" |
|
|
45
|
+
| 3 | **Refactorizar** | "reorganiza", "limpia", "extrae", "mejora la estructura" |
|
|
46
|
+
| 4 | **Explorar proyecto** | "explícame", "cómo funciona", "qué hace", "analiza" |
|
|
47
|
+
| 5 | **Escribir tests** | "testea", "añade pruebas", "cobertura" |
|
|
48
|
+
| 6 | **Documentar** | "documenta", "escribe el README", "añade JSDoc" |
|
|
49
|
+
| 7 | **Pedir justificación** | "por qué hiciste", "qué alternativas", "justifica" |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Flujo de mejora
|
|
54
|
+
|
|
55
|
+
### PASO 1 — Clasifica el prompt
|
|
56
|
+
|
|
57
|
+
Lee el prompt del usuario. Identifica:
|
|
58
|
+
- El **patrón** de los 7 que mejor aplica
|
|
59
|
+
- La **intención concreta** (qué quiere lograr, no cómo lo dice)
|
|
60
|
+
- Las **entidades** mencionadas (qué módulos, archivos, funciones afecta)
|
|
61
|
+
|
|
62
|
+
### PASO 2 — Verifica el scope
|
|
63
|
+
|
|
64
|
+
Si existe `.sdd/estado.json`:
|
|
65
|
+
- Extrae la feature activa y la fase actual
|
|
66
|
+
- Compara con lo que el prompt pide
|
|
67
|
+
|
|
68
|
+
**Si el prompt está FUERA del scope:**
|
|
69
|
+
```
|
|
70
|
+
⚠️ Alerta de scope: "{lo que pide}" parece estar fuera de la spec activa ("{feature}").
|
|
71
|
+
|
|
72
|
+
Opciones antes de continuar:
|
|
73
|
+
1. Escribe /sdd.especificar para abrir una spec nueva
|
|
74
|
+
2. Confirma explícitamente que esto forma parte de la feature actual
|
|
75
|
+
|
|
76
|
+
No continuaré hasta recibir confirmación.
|
|
77
|
+
```
|
|
78
|
+
Detente aquí. No reescribas el prompt.
|
|
79
|
+
|
|
80
|
+
**Si el prompt está DENTRO del scope o no hay spec activa:** continúa al PASO 3.
|
|
81
|
+
|
|
82
|
+
### PASO 3 — Evalúa el prompt actual
|
|
83
|
+
|
|
84
|
+
Cuenta cuántos de los 5 componentes ya están presentes:
|
|
85
|
+
|
|
86
|
+
| Componente | ¿Presente? |
|
|
87
|
+
|---|---|
|
|
88
|
+
| Contexto (qué proyecto/stack/estado existe ya) | sí / no |
|
|
89
|
+
| Tarea (qué hay que hacer exactamente, acotado) | sí / no |
|
|
90
|
+
| Restricciones (qué no tocar, qué no instalar) | sí / no |
|
|
91
|
+
| Formato (cómo quiere el resultado) | sí / no |
|
|
92
|
+
| Verificación (cómo confirmar que funcionó) | sí / no |
|
|
93
|
+
|
|
94
|
+
Si el prompt tiene **≥ 4 componentes**: responde "Este prompt ya está bien estructurado
|
|
95
|
+
(X/5 componentes). Solo falta: [el que falta]." y detente.
|
|
96
|
+
|
|
97
|
+
### PASO 4 — Construye la versión profesional
|
|
98
|
+
|
|
99
|
+
Para los componentes faltantes, infiere el contenido a partir de:
|
|
100
|
+
- El estado del proyecto (`.sdd/estado.json`, `package.json`, estructura de carpetas)
|
|
101
|
+
- Las convenciones del proyecto (naming, testing framework, estructura de módulos)
|
|
102
|
+
- El patrón detectado en PASO 1
|
|
103
|
+
|
|
104
|
+
Aplica el esquema del patrón correspondiente:
|
|
105
|
+
|
|
106
|
+
**Patrón 1 — Implementar feature:**
|
|
107
|
+
```
|
|
108
|
+
Contexto: [proyecto, stack, qué existe ya relevante para esta feature]
|
|
109
|
+
|
|
110
|
+
Tarea: Implementa [feature] con estos requisitos:
|
|
111
|
+
- [requisito concreto 1]
|
|
112
|
+
- [requisito concreto 2]
|
|
113
|
+
|
|
114
|
+
Restricciones:
|
|
115
|
+
- [qué no cambiar]
|
|
116
|
+
- [dependencias que no instalar]
|
|
117
|
+
- [patrones del proyecto a respetar]
|
|
118
|
+
|
|
119
|
+
Verificación: [tests a crear y ejecutar, o comando para comprobar]
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Patrón 2 — Depurar problema:**
|
|
123
|
+
```
|
|
124
|
+
Contexto: [qué estaba haciendo cuando ocurrió]
|
|
125
|
+
|
|
126
|
+
Tarea: Tengo este error:
|
|
127
|
+
[pegar el error completo con stack trace]
|
|
128
|
+
Archivo: [archivo y línea si lo sabes]
|
|
129
|
+
|
|
130
|
+
Formato: Antes de corregir nada:
|
|
131
|
+
1. Identifica la causa raíz, no el síntoma
|
|
132
|
+
2. Explica por qué ocurre
|
|
133
|
+
3. Propón el fix y justifícalo
|
|
134
|
+
4. ¿Qué más podría verse afectado?
|
|
135
|
+
|
|
136
|
+
Verificación: Añade un test que reproduzca el bug antes del fix y pase después.
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Patrón 3 — Refactorizar:**
|
|
140
|
+
```
|
|
141
|
+
Contexto: [qué módulo y por qué refactorizarlo]
|
|
142
|
+
|
|
143
|
+
Tarea: Refactoriza [archivo/módulo] para [objetivo concreto].
|
|
144
|
+
|
|
145
|
+
Restricciones:
|
|
146
|
+
- La API pública NO debe cambiar
|
|
147
|
+
- Los tests existentes deben seguir pasando sin modificarlos
|
|
148
|
+
- Sigue el patrón [patrón del proyecto]
|
|
149
|
+
|
|
150
|
+
Formato: Antes de tocar código, muéstrame qué cambiarías y por qué.
|
|
151
|
+
|
|
152
|
+
Verificación: Ejecuta todos los tests sin cambiarlos. Si alguno falla, el refactoring rompió algo.
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Patrón 4 — Explorar proyecto:**
|
|
156
|
+
```
|
|
157
|
+
Tarea: Analiza [proyecto/módulo] y responde:
|
|
158
|
+
- [pregunta sobre estructura]
|
|
159
|
+
- [pregunta sobre patrones]
|
|
160
|
+
|
|
161
|
+
Formato: [resumen breve por pregunta + diagrama ASCII si aplica]
|
|
162
|
+
|
|
163
|
+
Restricciones: No modifiques nada. Solo lectura.
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Patrón 5 — Escribir tests:**
|
|
167
|
+
```
|
|
168
|
+
Contexto: [qué módulo/servicio y qué hace]
|
|
169
|
+
|
|
170
|
+
Tarea: Genera tests para [archivo]. Para cada función pública:
|
|
171
|
+
- Un test del caso normal (happy path)
|
|
172
|
+
- Un test de caso edge [ejemplos]
|
|
173
|
+
- Un test de error [ejemplos]
|
|
174
|
+
|
|
175
|
+
Restricciones: [framework de testing del proyecto]
|
|
176
|
+
|
|
177
|
+
Verificación: Ejecuta los tests. Muéstrame la cobertura del archivo.
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Patrón 6 — Documentar:**
|
|
181
|
+
```
|
|
182
|
+
Contexto: [quién va a leer esta doc y para qué]
|
|
183
|
+
|
|
184
|
+
Tarea: Genera documentación para [archivo/módulo/API] incluyendo:
|
|
185
|
+
- [secciones necesarias]
|
|
186
|
+
|
|
187
|
+
Formato: [Markdown, JSDoc, README, etc.]
|
|
188
|
+
|
|
189
|
+
Verificación: Compara el resultado con el código real. Si falta algo, añádelo.
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Patrón 7 — Pedir justificación:**
|
|
193
|
+
```
|
|
194
|
+
Sobre [la implementación que acabas de hacer]:
|
|
195
|
+
1. ¿Qué alternativas consideraste y por qué elegiste esta?
|
|
196
|
+
2. ¿Qué trade-offs tiene tu decisión?
|
|
197
|
+
3. ¿Qué podría fallar con este enfoque?
|
|
198
|
+
4. ¿Qué harías diferente con más tiempo o a mayor escala?
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### PASO 5 — Presenta el resultado
|
|
202
|
+
|
|
203
|
+
Muestra la respuesta completa con esta estructura:
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
## Prompt original
|
|
207
|
+
[lo que escribió el usuario, sin cambios]
|
|
208
|
+
|
|
209
|
+
## Patrón detectado
|
|
210
|
+
[nombre del patrón] — [una frase de por qué aplica este patrón]
|
|
211
|
+
|
|
212
|
+
## Prompt profesional
|
|
213
|
+
|
|
214
|
+
[versión mejorada completa, lista para copiar y pegar]
|
|
215
|
+
|
|
216
|
+
## Por qué funciona
|
|
217
|
+
- **Contexto:** [qué se añadió y por qué]
|
|
218
|
+
- **Tarea:** [cómo se acotó y por qué]
|
|
219
|
+
- **Restricciones:** [qué se protegió y por qué]
|
|
220
|
+
- **Verificación:** [cómo cierra el ciclo]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Notas
|
|
226
|
+
|
|
227
|
+
**Prompt ya profesional:** Si el usuario envía un prompt con ≥4 componentes, confírmalo
|
|
228
|
+
y ofrece solo el componente que falta, sin reescribir lo demás.
|
|
229
|
+
|
|
230
|
+
**Prompt ambiguo:** Si la intención no está clara (ej. "arregla el código"), pregunta
|
|
231
|
+
una sola cosa antes de continuar: "¿Qué parte específica no funciona como esperabas?"
|
|
232
|
+
|
|
233
|
+
**Sin proyecto SDD:** Si no existe `.sdd/`, omite la validación de scope y el componente
|
|
234
|
+
de restricciones relacionado con la spec. Aún aplica los 4 componentes restantes.
|
|
235
|
+
|
|
236
|
+
**Cadena de patrones:** Cuando la tarea implica varias etapas, sugiere la cadena natural:
|
|
237
|
+
Explorar → Implementar → Tests → Justificar → Documentar. Un prompt por etapa.
|