specleap-framework 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/.agents/backend.md +419 -0
- package/.agents/frontend.md +577 -0
- package/.agents/producto.md +516 -0
- package/.commands/adoptar.md +323 -0
- package/.commands/ayuda.md +142 -0
- package/.commands/crear-tickets.md +55 -0
- package/.commands/documentar.md +285 -0
- package/.commands/explicar.md +234 -0
- package/.commands/implementar.md +383 -0
- package/.commands/inicio.md +824 -0
- package/.commands/nuevo/README.md +292 -0
- package/.commands/nuevo/questions-base.yaml +320 -0
- package/.commands/nuevo/responses-example.yaml +53 -0
- package/.commands/planificar.md +253 -0
- package/.commands/refinar.md +306 -0
- package/LICENSE +21 -0
- package/README.md +603 -0
- package/SETUP.md +351 -0
- package/install.sh +152 -0
- package/package.json +60 -0
- package/proyectos/_template/.gitkeep +1 -0
- package/proyectos/_template/ANEXOS.md +21 -0
- package/proyectos/_template/CONTRATO.md +26 -0
- package/proyectos/_template/context/.gitkeep +1 -0
- package/rules/development-rules.md +113 -0
- package/rules/environment-protection.md +97 -0
- package/rules/git-workflow.md +142 -0
- package/rules/session-protocol.md +121 -0
- package/scripts/README.md +129 -0
- package/scripts/analyze-project.sh +826 -0
- package/scripts/create-asana-tasks.sh +133 -0
- package/scripts/detect-project-type.sh +141 -0
- package/scripts/estimate-effort.sh +290 -0
- package/scripts/generate-asana-structure.sh +262 -0
- package/scripts/generate-contract.sh +360 -0
- package/scripts/generate-contrato.sh +555 -0
- package/scripts/install-git-hooks.sh +141 -0
- package/scripts/install-skills.sh +130 -0
- package/scripts/lib/asana-utils.sh +191 -0
- package/scripts/lib/jira-project-utils.sh +222 -0
- package/scripts/lib/questions.json +831 -0
- package/scripts/lib/render-contrato.py +195 -0
- package/scripts/lib/validate.sh +325 -0
- package/scripts/parse-contrato.sh +190 -0
- package/scripts/setup-mcp.sh +654 -0
- package/scripts/test-cuestionario.sh +428 -0
- package/setup.sh +458 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# Comando: planificar
|
|
2
|
+
|
|
3
|
+
**Sintaxis:** `planificar` o `planificar <ruta-proyecto>`
|
|
4
|
+
|
|
5
|
+
**Objetivo:** Generar secciones y tareas desde el CONTRATO.md y subirlas a Asana.
|
|
6
|
+
|
|
7
|
+
**Motor:** Usa `scripts/generate-asana-structure.sh` (CLI) para generación de backlog.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 🌐 Idioma
|
|
12
|
+
|
|
13
|
+
**TODOS los mensajes de feedback deben estar en ESPAÑOL.**
|
|
14
|
+
|
|
15
|
+
Esto incluye:
|
|
16
|
+
- Mensajes de progreso ("Generando backlog...", "Analizando CONTRATO...")
|
|
17
|
+
- Vista previa de épicas y stories
|
|
18
|
+
- Mensajes de confirmación
|
|
19
|
+
- Errores y advertencias
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Flujo
|
|
24
|
+
|
|
25
|
+
### 1. Identificar Proyecto
|
|
26
|
+
|
|
27
|
+
Si no se especifica ruta:
|
|
28
|
+
```markdown
|
|
29
|
+
¿Para qué proyecto quieres crear el backlog?
|
|
30
|
+
|
|
31
|
+
**Proyectos disponibles:**
|
|
32
|
+
1. app-tienda
|
|
33
|
+
2. api-backend
|
|
34
|
+
3. dashboard-analytics
|
|
35
|
+
|
|
36
|
+
Responde con el número o nombre:
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### 2. Leer CONTRATO.md
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cat proyectos/[proyecto]/CONTRATO.md
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Extraer:
|
|
48
|
+
- Nombre del proyecto
|
|
49
|
+
- Features core
|
|
50
|
+
- Features secundarias
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
### 3. Generar Backlog (Usar CLI)
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
cd specleap
|
|
58
|
+
./scripts/generate-asana-structure.sh -p proyectos/[proyecto]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Esto genera:
|
|
62
|
+
- Proyecto en Asana
|
|
63
|
+
- Secciones (Infraestructura, Backend, Frontend, Testing)
|
|
64
|
+
- Tareas (3-8 por sección)
|
|
65
|
+
- Story points asignados en notas
|
|
66
|
+
- Prioridades
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### 4. Confirmación
|
|
71
|
+
|
|
72
|
+
Mostrar al usuario:
|
|
73
|
+
```markdown
|
|
74
|
+
📊 **Backlog Generado — Preview**
|
|
75
|
+
|
|
76
|
+
**Proyecto:** [Nombre]
|
|
77
|
+
|
|
78
|
+
🛠️ **Infraestructura** (3 tareas, 11 pts)
|
|
79
|
+
- Setup inicial del proyecto [3 pts]
|
|
80
|
+
- Configurar CI/CD [5 pts]
|
|
81
|
+
- Configurar entornos (dev/staging/prod) [3 pts]
|
|
82
|
+
|
|
83
|
+
⚙️ **Backend** (5-8 tareas, 25-40 pts)
|
|
84
|
+
- Implementar API REST básica [8 pts]
|
|
85
|
+
- Implementar autenticación [5 pts]
|
|
86
|
+
- Implementar autorización (roles) [5 pts]
|
|
87
|
+
- ...
|
|
88
|
+
|
|
89
|
+
🎨 **Frontend** (3 tareas, 16 pts)
|
|
90
|
+
- Implementar sistema de diseño base [8 pts]
|
|
91
|
+
- Implementar autenticación UI [5 pts]
|
|
92
|
+
- Implementar navegación principal [3 pts]
|
|
93
|
+
|
|
94
|
+
🧪 **Testing** (3 tareas, 13 pts)
|
|
95
|
+
- Tests unitarios backend (>=90% coverage) [5 pts]
|
|
96
|
+
- Tests E2E críticos [5 pts]
|
|
97
|
+
- Tests de integración [3 pts]
|
|
98
|
+
|
|
99
|
+
**Resumen:**
|
|
100
|
+
- Secciones: 4
|
|
101
|
+
- Tareas: 14-17
|
|
102
|
+
- Story Points: 65-80
|
|
103
|
+
- Esfuerzo estimado: ~40-50 días
|
|
104
|
+
|
|
105
|
+
¿Crear este backlog en Asana? (s/n)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### 5A. Si el usuario acepta: Crear en Asana
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Crear proyecto y tareas en Asana
|
|
114
|
+
./scripts/generate-asana-structure.sh -p proyectos/[proyecto]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Esto:
|
|
118
|
+
- Crea proyecto en Asana
|
|
119
|
+
- Crea secciones (Infraestructura, Backend, Frontend, Testing)
|
|
120
|
+
- Crea tareas vinculadas a secciones
|
|
121
|
+
- Asigna story points en notas
|
|
122
|
+
|
|
123
|
+
**Mostrar confirmación:**
|
|
124
|
+
```markdown
|
|
125
|
+
✅ **Backlog creado en Asana**
|
|
126
|
+
|
|
127
|
+
**Proyecto:** https://app.asana.com/0/[PROJECT_GID]
|
|
128
|
+
|
|
129
|
+
**Secciones creadas:**
|
|
130
|
+
- 🛠️ Infraestructura (3 tareas)
|
|
131
|
+
- ⚙️ Backend (5-8 tareas)
|
|
132
|
+
- 🎨 Frontend (3 tareas)
|
|
133
|
+
- 🧪 Testing (3 tareas)
|
|
134
|
+
|
|
135
|
+
**Actualizar CONTRATO.md con metadata:**
|
|
136
|
+
```yaml
|
|
137
|
+
asana:
|
|
138
|
+
project_gid: "[PROJECT_GID]"
|
|
139
|
+
section_count: 4
|
|
140
|
+
task_count: 14-17
|
|
141
|
+
synced_at: 2026-03-06T20:00:00Z
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
✅ CONTRATO.md actualizado.
|
|
145
|
+
|
|
146
|
+
**Próximos pasos:**
|
|
147
|
+
1. Revisa el proyecto en Asana
|
|
148
|
+
2. Prioriza las tareas
|
|
149
|
+
3. Asigna tareas a miembros del equipo
|
|
150
|
+
4. Ejecuta `implementar` cuando estés listo
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
### 5B. Si el usuario NO acepta: Modo Dry-Run
|
|
156
|
+
|
|
157
|
+
Usuario puede usar modo dry-run para ver preview sin crear nada:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
./scripts/generate-asana-structure.sh -p proyectos/[proyecto] --dry-run
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
```markdown
|
|
164
|
+
💾 **Preview generado (sin crear en Asana)**
|
|
165
|
+
|
|
166
|
+
Ejecuta sin `--dry-run` cuando estés listo para crear el backlog real.
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Ejecuta sin `--dry-run` cuando estés listo para crear el backlog real.
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Comandos CLI/Scripts Usados
|
|
175
|
+
|
|
176
|
+
| Comando | Propósito |
|
|
177
|
+
|---------|-----------|
|
|
178
|
+
| `scripts/generate-asana-structure.sh` | Generar proyecto y tareas en Asana desde CONTRATO.md |
|
|
179
|
+
| `scripts/create-asana-tasks.sh` | Crear tareas individuales en Asana |
|
|
180
|
+
| `scripts/lib/asana-utils.sh` | Utilidades de API Asana |
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Personalización
|
|
185
|
+
|
|
186
|
+
### Ajustar generación de tareas
|
|
187
|
+
|
|
188
|
+
Edita `scripts/generate-asana-structure.sh`:
|
|
189
|
+
- Líneas 145-200: Secciones y tareas generadas
|
|
190
|
+
- Story points asignados por tipo de tarea
|
|
191
|
+
- Nombres de secciones personalizados
|
|
192
|
+
|
|
193
|
+
### Crear tareas individuales
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# Listar proyectos
|
|
197
|
+
./scripts/create-asana-tasks.sh --listar
|
|
198
|
+
|
|
199
|
+
# Crear tarea
|
|
200
|
+
./scripts/create-asana-tasks.sh \
|
|
201
|
+
-p [PROJECT_GID] \
|
|
202
|
+
-t "Nombre de la tarea" \
|
|
203
|
+
-P 5
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Requisitos
|
|
209
|
+
|
|
210
|
+
1. **CONTRATO.md** existente
|
|
211
|
+
2. **ASANA_ACCESS_TOKEN** configurado en ~/.zshrc
|
|
212
|
+
3. **ASANA_WORKSPACE_GID** configurado (o se detecta automáticamente)
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Troubleshooting
|
|
217
|
+
|
|
218
|
+
### "Script no encontrado"
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
cd ~/.openclaw/workspace/specleap
|
|
222
|
+
ls scripts/generate-asana-structure.sh
|
|
223
|
+
# Si no existe, verifica instalación
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### "ASANA_ACCESS_TOKEN no configurado"
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Verifica que está en tu ~/.zshrc
|
|
230
|
+
grep ASANA_ACCESS_TOKEN ~/.zshrc
|
|
231
|
+
|
|
232
|
+
# Si no está, agrégalo:
|
|
233
|
+
echo 'export ASANA_ACCESS_TOKEN="tu-token-aqui"' >> ~/.zshrc
|
|
234
|
+
source ~/.zshrc
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### "Error: Not Authorized"
|
|
238
|
+
|
|
239
|
+
Tu token de Asana puede haber expirado. Genera uno nuevo en:
|
|
240
|
+
https://app.asana.com/0/my-apps
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Workflow Típico
|
|
245
|
+
|
|
246
|
+
1. `/inicio` → genera CONTRATO.md
|
|
247
|
+
2. **`planificar`** → crea backlog en Asana ✅ **ESTÁS AQUÍ**
|
|
248
|
+
3. Asigna tareas en Asana
|
|
249
|
+
4. `implementar` → desarrolla features
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
**Próximo paso:** Revisa el proyecto en Asana y asigna tareas
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# Comando: refinar
|
|
2
|
+
|
|
3
|
+
**Sintaxis:** `refinar [TASK_GID]` o `refinar [nombre-tarea]`
|
|
4
|
+
|
|
5
|
+
**Objetivo:** Refinar una tarea de Asana para que sea completa, específica y lista para implementación técnica.
|
|
6
|
+
|
|
7
|
+
**Motor:** Usa `openspec enrich` (CLI) para el refinamiento con AI.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 🌐 Idioma
|
|
12
|
+
|
|
13
|
+
**TODOS los mensajes y análisis deben estar en ESPAÑOL.**
|
|
14
|
+
|
|
15
|
+
Esto incluye:
|
|
16
|
+
- User stories refinadas
|
|
17
|
+
- Criterios de aceptación
|
|
18
|
+
- Preguntas de clarificación
|
|
19
|
+
- Análisis de complejidad
|
|
20
|
+
- Recomendaciones
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Flujo
|
|
25
|
+
|
|
26
|
+
### 1. Leer Tarea de Asana
|
|
27
|
+
|
|
28
|
+
**Obtener tarea por GID:**
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
source scripts/lib/asana-utils.sh
|
|
32
|
+
curl -s -H "Authorization: Bearer $ASANA_ACCESS_TOKEN" \
|
|
33
|
+
"https://app.asana.com/api/1.0/tasks/[TASK_GID]" | jq '.data'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Si el usuario proporciona nombre de tarea:**
|
|
37
|
+
|
|
38
|
+
Buscar en el proyecto:
|
|
39
|
+
```bash
|
|
40
|
+
source scripts/lib/asana-utils.sh
|
|
41
|
+
asana_list_tasks [PROJECT_GID] | grep -i "[nombre-tarea]"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Si no se encuentra:**
|
|
45
|
+
```markdown
|
|
46
|
+
No encontré esa tarea en Asana.
|
|
47
|
+
|
|
48
|
+
Por favor, proporciona:
|
|
49
|
+
1. El GID de la tarea (número largo)
|
|
50
|
+
2. O el título exacto de la tarea
|
|
51
|
+
3. O pega aquí el contenido completo de la tarea
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Espera la respuesta del usuario.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### 2. Leer Contexto del Proyecto
|
|
59
|
+
|
|
60
|
+
Lee los siguientes archivos para entender el proyecto:
|
|
61
|
+
|
|
62
|
+
1. `proyectos/[proyecto-actual]/CONTRATO.md`
|
|
63
|
+
2. `proyectos/[proyecto-actual]/context/architecture.md`
|
|
64
|
+
3. `proyectos/[proyecto-actual]/context/tech-stack.md`
|
|
65
|
+
4. `proyectos/[proyecto-actual]/context/conventions.md`
|
|
66
|
+
|
|
67
|
+
**Nota:** El proyecto actual se determina por el último comando `/inicio` ejecutado, o pregunta cuál es si no está claro.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### 3. Preparar Input para CLI
|
|
72
|
+
|
|
73
|
+
Crea un archivo temporal con la user story + contexto:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
cat > /tmp/user-story-input.md <<EOF
|
|
77
|
+
# User Story Original
|
|
78
|
+
$TICKET_CONTENT
|
|
79
|
+
|
|
80
|
+
# Contexto del Proyecto
|
|
81
|
+
|
|
82
|
+
## Stack
|
|
83
|
+
$TECH_STACK
|
|
84
|
+
|
|
85
|
+
## Arquitectura
|
|
86
|
+
$ARCHITECTURE
|
|
87
|
+
|
|
88
|
+
## Convenciones
|
|
89
|
+
$CONVENTIONS
|
|
90
|
+
EOF
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### 4. Refinar con CLI
|
|
96
|
+
|
|
97
|
+
Ejecuta el refinamiento usando CLI:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
openspec enrich --file /tmp/user-story-input.md --output /tmp/user-story-refined.md
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Esto genera una user story completa con:
|
|
104
|
+
- Contexto técnico
|
|
105
|
+
- Criterios de aceptación (GIVEN/WHEN/THEN)
|
|
106
|
+
- Especificación técnica (endpoints, componentes, DB)
|
|
107
|
+
- Validaciones
|
|
108
|
+
- Reglas de negocio
|
|
109
|
+
- Estimación
|
|
110
|
+
- Riesgos
|
|
111
|
+
- Fuera de alcance
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### 5. Mostrar Preview
|
|
116
|
+
|
|
117
|
+
Lee el resultado:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
cat /tmp/user-story-refined.md
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Muestra al usuario:
|
|
124
|
+
|
|
125
|
+
```markdown
|
|
126
|
+
📋 **Tarea Refinada (Preview):**
|
|
127
|
+
|
|
128
|
+
[Primeras 30 líneas del contenido refinado]
|
|
129
|
+
|
|
130
|
+
...
|
|
131
|
+
|
|
132
|
+
**¿Aprobar y actualizar Asana?** (s/n)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Espera confirmación del usuario.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
### 6A. Si el usuario aprueba: Actualizar Asana
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Actualizar tarea en Asana
|
|
143
|
+
source scripts/lib/asana-utils.sh
|
|
144
|
+
|
|
145
|
+
# Leer contenido refinado
|
|
146
|
+
REFINED_CONTENT=$(cat /tmp/user-story-refined.md)
|
|
147
|
+
|
|
148
|
+
# Actualizar notas de la tarea
|
|
149
|
+
curl -s -X PUT \
|
|
150
|
+
-H "Authorization: Bearer $ASANA_ACCESS_TOKEN" \
|
|
151
|
+
-H "Content-Type: application/json" \
|
|
152
|
+
-d "{\"data\": {\"notes\": \"$REFINED_CONTENT\"}}" \
|
|
153
|
+
"https://app.asana.com/api/1.0/tasks/[TASK_GID]"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**También guardar localmente:**
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
cp /tmp/user-story-refined.md proyectos/[proyecto]/specs/task-[TASK_GID]_refined.md
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Mostrar confirmación:**
|
|
163
|
+
```markdown
|
|
164
|
+
✅ **Tarea actualizada en Asana**
|
|
165
|
+
|
|
166
|
+
📋 **Local:** `proyectos/[proyecto]/specs/task-[TASK_GID]_refined.md`
|
|
167
|
+
|
|
168
|
+
📊 **Ver en Asana:** https://app.asana.com/0/[PROJECT_GID]/[TASK_GID]
|
|
169
|
+
|
|
170
|
+
**Próximos pasos:**
|
|
171
|
+
1. Revisa la tarea refinada en Asana
|
|
172
|
+
2. Asigna la tarea a un desarrollador
|
|
173
|
+
3. Ejecuta `implementar` cuando estés listo
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### 6B. Si el usuario NO aprueba: Editar
|
|
179
|
+
|
|
180
|
+
```markdown
|
|
181
|
+
**¿Qué quieres modificar?**
|
|
182
|
+
|
|
183
|
+
Puedes decir cosas como:
|
|
184
|
+
- "Agrega que debe soportar OAuth"
|
|
185
|
+
- "Cambia la estimación a 5 días"
|
|
186
|
+
- "Elimina el criterio de aceptación 3"
|
|
187
|
+
- "Agrega validación de email único"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Espera feedback, edita `/tmp/user-story-refined.md` y vuelve al paso 5.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### 7. Confirmar Actualización
|
|
195
|
+
|
|
196
|
+
```markdown
|
|
197
|
+
✅ **Tarea refinada exitosamente.**
|
|
198
|
+
|
|
199
|
+
**Agregado:**
|
|
200
|
+
- ✅ [X] criterios de aceptación (GIVEN/WHEN/THEN)
|
|
201
|
+
- ✅ Especificación técnica completa
|
|
202
|
+
- ✅ Validaciones (server + client)
|
|
203
|
+
- ✅ Estimación: [X días]
|
|
204
|
+
|
|
205
|
+
**Ubicación:**
|
|
206
|
+
- Asana: https://app.asana.com/0/[PROJECT_GID]/[TASK_GID]
|
|
207
|
+
- Local: `proyectos/[proyecto]/specs/task-[TASK_GID]_refined.md`
|
|
208
|
+
|
|
209
|
+
🔄 **Próximo paso:**
|
|
210
|
+
- Ejecuta `implementar` para comenzar el desarrollo
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Ejemplos de Uso
|
|
216
|
+
|
|
217
|
+
### Ejemplo 1: Con GID de Asana
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
Usuario: "refinar 1234567890123456"
|
|
221
|
+
|
|
222
|
+
IA:
|
|
223
|
+
📥 Leyendo tarea de Asana...
|
|
224
|
+
✅ Tarea leída: "Implementar sistema de login"
|
|
225
|
+
|
|
226
|
+
📚 Cargando contexto del proyecto...
|
|
227
|
+
✅ CONTRATO.md, architecture.md, tech-stack.md, conventions.md cargados.
|
|
228
|
+
|
|
229
|
+
🤖 Refinando con openspec enrich...
|
|
230
|
+
✅ Tarea refinada (7 criterios de aceptación, 4 endpoints API, validaciones).
|
|
231
|
+
|
|
232
|
+
📋 Preview:
|
|
233
|
+
[Muestra primeras 30 líneas]
|
|
234
|
+
|
|
235
|
+
¿Aprobar y actualizar Asana? (s/n)
|
|
236
|
+
|
|
237
|
+
Usuario: "s"
|
|
238
|
+
|
|
239
|
+
IA:
|
|
240
|
+
✅ Tarea actualizada en Asana.
|
|
241
|
+
✅ Guardada localmente en specs/task-1234567890123456_refined.md
|
|
242
|
+
|
|
243
|
+
Próximo: implementar
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Ejemplo 2: Por nombre de tarea
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
Usuario: "refinar login"
|
|
250
|
+
|
|
251
|
+
IA:
|
|
252
|
+
🔍 Buscando tarea 'login' en el proyecto...
|
|
253
|
+
✅ Encontrada: "Implementar sistema de login" (GID: 1234567890123456)
|
|
254
|
+
|
|
255
|
+
📚 Cargando contexto...
|
|
256
|
+
✅ Contexto cargado.
|
|
257
|
+
|
|
258
|
+
🤖 Refinando con openspec enrich...
|
|
259
|
+
✅ Tarea refinada.
|
|
260
|
+
|
|
261
|
+
📋 Preview:
|
|
262
|
+
[Muestra contenido]
|
|
263
|
+
|
|
264
|
+
¿Aprobar? (s/n)
|
|
265
|
+
|
|
266
|
+
Usuario: "s"
|
|
267
|
+
|
|
268
|
+
IA:
|
|
269
|
+
✅ Tarea actualizada en Asana
|
|
270
|
+
✅ Guardado en specs/task-1234567890123456_refined.md
|
|
271
|
+
|
|
272
|
+
📊 Ver en Asana: https://app.asana.com/0/[PROJECT_GID]/1234567890123456
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Comandos CLI Usados
|
|
278
|
+
|
|
279
|
+
| Comando | Propósito |
|
|
280
|
+
|---------|-----------|
|
|
281
|
+
| `scripts/lib/asana-utils.sh` | Utilidades para API de Asana |
|
|
282
|
+
| `curl ... /api/1.0/tasks/[GID]` | Leer tarea de Asana |
|
|
283
|
+
| `openspec enrich --file <input> --output <output>` | Refinar tarea con AI |
|
|
284
|
+
| `curl -X PUT ... /api/1.0/tasks/[GID]` | Actualizar tarea en Asana |
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## Reglas Críticas
|
|
289
|
+
|
|
290
|
+
1. **SIEMPRE usar CLI** — Delegar refinamiento a `openspec enrich`
|
|
291
|
+
2. **Leer CONTRATO.md** — Alinear refinamiento con contrato
|
|
292
|
+
3. **Preview antes de actualizar** — Pedir confirmación al usuario
|
|
293
|
+
4. **Guardar localmente** — Siempre guardar en specs/ además de actualizar Asana
|
|
294
|
+
5. **No asumir** — Si falta contexto, preguntar
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Agente Relacionado
|
|
299
|
+
|
|
300
|
+
- `.agents/producto.md` — El CLI `openspec enrich` sigue este rol
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## Próximo Comando
|
|
305
|
+
|
|
306
|
+
- `implementar` — Comenzar el desarrollo de la tarea refinada
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SpecLeap Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|