specleap-framework 2.1.14 → 2.2.1
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/.commands/compliance.md +1 -1
- package/.commands/explicar.md +3 -3
- package/.commands/implementar.md +2 -2
- package/.commands/inicio.md +381 -24
- package/.commands/nuevo/README.md +4 -4
- package/.commands/nuevo/responses-example.yaml +17 -17
- package/.commands/planificar.md +49 -12
- package/CHANGELOG.md +56 -0
- package/CLAUDE.md +1 -1
- package/README.md +2 -2
- package/SETUP.md +5 -5
- package/package.json +1 -1
- package/scripts/README.md +1 -1
- package/scripts/create-asana-tasks.sh +9 -0
- package/scripts/generate-asana-structure.sh +11 -0
- package/scripts/install-skills.sh +20 -3
- package/scripts/lib/critical_fields.json +39 -0
- package/scripts/lib/questions.en.json +871 -61
- package/scripts/lib/questions.es.json +872 -62
- package/setup.sh +114 -72
package/.commands/compliance.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
## Qué dimensiones se auditan
|
|
10
10
|
|
|
11
11
|
1. **Version** — El `package.json.version` coincide con el último tag de git.
|
|
12
|
-
2. **Skills** — El número de carpetas en `~/.skills/` coincide con los counters declarados en `CLAUDE.md`, `README.md` y `.quality/baselines/baseline.json`.
|
|
12
|
+
2. **Skills** — El número de carpetas en `~/.claude/skills/` (o `~/.skills/` si es instalación legacy) coincide con los counters declarados en `CLAUDE.md`, `README.md` y `.quality/baselines/baseline.json`.
|
|
13
13
|
3. **i18n** — Todas las claves de `.specleap/i18n/es.json` existen en `.specleap/i18n/en.json` y viceversa.
|
|
14
14
|
4. **Hooks** — `.claude/hooks/spec-guard.sh` existe, tiene shebang, es ejecutable y está referenciado en `.claude/settings.json.template`.
|
|
15
15
|
5. **Baseline** — `.quality/baselines/baseline.json.repo_snapshot` no difiere >20% de los counters reales del repo.
|
package/.commands/explicar.md
CHANGED
|
@@ -91,14 +91,14 @@ Usuario: "explicar cómo funciona el sistema de autenticación"
|
|
|
91
91
|
IA:
|
|
92
92
|
🔍 Leyendo contexto del proyecto...
|
|
93
93
|
|
|
94
|
-
cat proyectos/
|
|
94
|
+
cat proyectos/task-manager/CONTRATO.md:
|
|
95
95
|
Sistema de Usuarios → Autenticación: Laravel Sanctum (SPA)
|
|
96
96
|
|
|
97
|
-
cat proyectos/
|
|
97
|
+
cat proyectos/task-manager/context/tech-stack.md:
|
|
98
98
|
Autenticación: Laravel Sanctum 4.x
|
|
99
99
|
Frontend: React 18 con axios
|
|
100
100
|
|
|
101
|
-
cat proyectos/
|
|
101
|
+
cat proyectos/task-manager/context/architecture.md:
|
|
102
102
|
API stateless, tokens en localStorage
|
|
103
103
|
|
|
104
104
|
---
|
package/.commands/implementar.md
CHANGED
|
@@ -116,8 +116,8 @@ Pregunta dónde está el código:
|
|
|
116
116
|
¿En qué directorio está el código del proyecto?
|
|
117
117
|
|
|
118
118
|
Ejemplo:
|
|
119
|
-
- `/path/to/
|
|
120
|
-
- `/path/to/
|
|
119
|
+
- `/path/to/task-manager-backend`
|
|
120
|
+
- `/path/to/task-manager-frontend`
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
---
|
package/.commands/inicio.md
CHANGED
|
@@ -8,8 +8,167 @@
|
|
|
8
8
|
|
|
9
9
|
## Flujo Completo
|
|
10
10
|
|
|
11
|
+
### Paso 0: Ofrecer Instalación de markitdown (Herramienta Opcional)
|
|
12
|
+
|
|
13
|
+
**ANTES de listar proyectos**, preguntar al usuario si quiere instalar **markitdown** (herramienta opcional de Microsoft que convierte PDF/Word/Excel/PowerPoint/HTML a Markdown). Esta conversión reduce significativamente el consumo de tokens cuando SpecLeap procesa documentos no-markdown durante el flujo (briefs en PDF, requisitos en Word, etc.).
|
|
14
|
+
|
|
15
|
+
**Importante:** Este paso solo se ejecuta UNA VEZ por sesión "Hola". Si el usuario ya respondió antes en la misma sesión, saltar este paso.
|
|
16
|
+
|
|
17
|
+
#### Detectar idioma del usuario
|
|
18
|
+
|
|
19
|
+
Por defecto, el idioma de SpecLeap es **español** (ver `CLAUDE.md`). Si el usuario te ha hablado en inglés o ha configurado el framework en inglés, usa la versión en inglés del prompt.
|
|
20
|
+
|
|
21
|
+
#### Texto del prompt (Español)
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
¡Hola! 👋 Antes de empezar con tu proyecto, una pregunta rápida:
|
|
25
|
+
|
|
26
|
+
🔧 **Herramienta opcional disponible: markitdown**
|
|
27
|
+
|
|
28
|
+
`markitdown` es una utilidad de Microsoft (open source, MIT) que convierte:
|
|
29
|
+
- 📄 PDF → Markdown
|
|
30
|
+
- 📝 Word (.docx) → Markdown
|
|
31
|
+
- 📊 Excel (.xlsx) / PowerPoint (.pptx) → Markdown
|
|
32
|
+
- 🌐 HTML, CSV, JSON, XML, EPUB → Markdown
|
|
33
|
+
|
|
34
|
+
**¿Por qué te interesa?** Cuando trabajemos con documentos (briefs, requisitos, contratos antiguos en PDF/Word), si los conviertes primero a Markdown con esta herramienta, el consumo de tokens baja entre **20% y 50%** y yo entiendo mejor el contenido.
|
|
35
|
+
|
|
36
|
+
**Requisitos:** Python 3.10+ y `pip` instalados.
|
|
37
|
+
|
|
38
|
+
**¿Quieres instalarlo ahora?** (Sí / No / Ya está instalado)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
#### Texto del prompt (English)
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
Hi! 👋 Before we start with your project, a quick question:
|
|
45
|
+
|
|
46
|
+
🔧 **Optional tool available: markitdown**
|
|
47
|
+
|
|
48
|
+
`markitdown` is a Microsoft utility (open source, MIT) that converts:
|
|
49
|
+
- 📄 PDF → Markdown
|
|
50
|
+
- 📝 Word (.docx) → Markdown
|
|
51
|
+
- 📊 Excel (.xlsx) / PowerPoint (.pptx) → Markdown
|
|
52
|
+
- 🌐 HTML, CSV, JSON, XML, EPUB → Markdown
|
|
53
|
+
|
|
54
|
+
**Why does this matter?** When we work with documents (briefs, requirements, legacy contracts in PDF/Word), converting them to Markdown first with this tool reduces token consumption by **20%–50%** and I understand the content better.
|
|
55
|
+
|
|
56
|
+
**Requirements:** Python 3.10+ and `pip` installed.
|
|
57
|
+
|
|
58
|
+
**Do you want to install it now?** (Yes / No / Already installed)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
#### Acción según respuesta
|
|
62
|
+
|
|
63
|
+
**Si el usuario responde "Sí" / "Yes":**
|
|
64
|
+
|
|
65
|
+
1. Verificar si ya está instalado ejecutando:
|
|
66
|
+
```bash
|
|
67
|
+
command -v markitdown
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
2. **Si NO está instalado**, mostrar comando de instalación según OS:
|
|
71
|
+
|
|
72
|
+
**Español:**
|
|
73
|
+
```markdown
|
|
74
|
+
📦 **Instalación de markitdown**
|
|
75
|
+
|
|
76
|
+
Ejecuta en tu terminal (fuera de Claude Code):
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
pip install 'markitdown[all]'
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Si usas pipx (recomendado para CLIs Python):**
|
|
83
|
+
```bash
|
|
84
|
+
pipx install 'markitdown[all]'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Si tienes Python 3.10+ pero no `pip`:**
|
|
88
|
+
- macOS: `brew install python` (incluye pip)
|
|
89
|
+
- Linux: `sudo apt install python3-pip` (Debian/Ubuntu)
|
|
90
|
+
- Windows: descarga desde [python.org](https://www.python.org/downloads/)
|
|
91
|
+
|
|
92
|
+
Una vez instalado, podrás usar:
|
|
93
|
+
```bash
|
|
94
|
+
bash scripts/convert-docs.sh archivo.pdf
|
|
95
|
+
bash scripts/convert-docs.sh carpeta/
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**¿Sigo con la creación del proyecto?** (Sí / Espera, voy a instalarlo primero)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**English:**
|
|
102
|
+
```markdown
|
|
103
|
+
📦 **Install markitdown**
|
|
104
|
+
|
|
105
|
+
Run in your terminal (outside Claude Code):
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
pip install 'markitdown[all]'
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**If you use pipx (recommended for Python CLIs):**
|
|
112
|
+
```bash
|
|
113
|
+
pipx install 'markitdown[all]'
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**If you have Python 3.10+ but no `pip`:**
|
|
117
|
+
- macOS: `brew install python` (includes pip)
|
|
118
|
+
- Linux: `sudo apt install python3-pip` (Debian/Ubuntu)
|
|
119
|
+
- Windows: download from [python.org](https://www.python.org/downloads/)
|
|
120
|
+
|
|
121
|
+
Once installed, you'll be able to use:
|
|
122
|
+
```bash
|
|
123
|
+
bash scripts/convert-docs.sh file.pdf
|
|
124
|
+
bash scripts/convert-docs.sh folder/
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Continue with project creation?** (Yes / Wait, I'll install it first)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
3. **Si YA está instalado**, confirmar y seguir:
|
|
131
|
+
|
|
132
|
+
**Español:**
|
|
133
|
+
```markdown
|
|
134
|
+
✅ `markitdown` ya está instalado en tu sistema. Perfecto, sigamos con tu proyecto.
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**English:**
|
|
138
|
+
```markdown
|
|
139
|
+
✅ `markitdown` is already installed on your system. Great, let's continue with your project.
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Si el usuario responde "No":**
|
|
143
|
+
|
|
144
|
+
**Español:**
|
|
145
|
+
```markdown
|
|
146
|
+
👍 Sin problema. Si más adelante quieres instalarlo, puedes ejecutar `pip install 'markitdown[all]'` o leer `scripts/convert-docs.sh --help`.
|
|
147
|
+
|
|
148
|
+
Sigamos con tu proyecto.
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**English:**
|
|
152
|
+
```markdown
|
|
153
|
+
👍 No problem. If you want to install it later, run `pip install 'markitdown[all]'` or read `scripts/convert-docs.sh --help`.
|
|
154
|
+
|
|
155
|
+
Let's continue with your project.
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Si el usuario responde "Ya está instalado" / "Already installed":**
|
|
159
|
+
|
|
160
|
+
Verificar con `command -v markitdown`. Si está → confirmar. Si no → mostrar instrucciones de instalación.
|
|
161
|
+
|
|
162
|
+
#### Después de la respuesta
|
|
163
|
+
|
|
164
|
+
Continúa con **Paso 1** (listar proyectos) sin importar la respuesta. La instalación de markitdown nunca bloquea el flujo principal.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
11
168
|
### Paso 1: Listar Proyectos Disponibles
|
|
12
169
|
|
|
170
|
+
> **Nota:** Si el usuario va a crear un proyecto nuevo (Flujo A más adelante), antes de empezar el cuestionario lanzaremos el **Paso A0 — Selección de Modo** (MVP / Serio / Creativo). Si va a trabajar en un proyecto existente o adoptar legacy, ese paso se omite.
|
|
171
|
+
|
|
13
172
|
Ejecuta bash para listar proyectos:
|
|
14
173
|
|
|
15
174
|
```bash
|
|
@@ -19,9 +178,9 @@ ls proyectos/
|
|
|
19
178
|
**Output esperado:**
|
|
20
179
|
```
|
|
21
180
|
_template
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
181
|
+
task-manager
|
|
182
|
+
inventory-app
|
|
183
|
+
crm-suite
|
|
25
184
|
...
|
|
26
185
|
```
|
|
27
186
|
|
|
@@ -53,6 +212,44 @@ Usar `AskUserQuestion` (modal interactivo):
|
|
|
53
212
|
|
|
54
213
|
## Flujo A: Proyecto Nuevo (Cuestionario Interactivo)
|
|
55
214
|
|
|
215
|
+
### Paso A0: Selección de Modo de Trabajo
|
|
216
|
+
|
|
217
|
+
**ANTES de pedir el nombre del proyecto**, preguntar al usuario qué tipo de proyecto va a montar. Esto determina cuántas preguntas se le harán y por qué carriles.
|
|
218
|
+
|
|
219
|
+
Usar `AskUserQuestion`:
|
|
220
|
+
|
|
221
|
+
```markdown
|
|
222
|
+
## Tipo de proyecto que vas a crear
|
|
223
|
+
|
|
224
|
+
○ **MVP** — proyecto pequeño, prototipo o piloto.
|
|
225
|
+
- 58 preguntas estructuradas (~15-20 min).
|
|
226
|
+
- Ideal para 1 persona o equipo pequeño.
|
|
227
|
+
|
|
228
|
+
○ **Proyecto serio** — equipo grande, varios departamentos, compliance, SLAs.
|
|
229
|
+
- 93 preguntas estructuradas (~25-35 min).
|
|
230
|
+
- Cubre governance, integraciones empresariales, SLAs, compliance, roadmap por fases, observabilidad, multi-tenant/i18n.
|
|
231
|
+
|
|
232
|
+
○ **Modo creativo** — describes tu proyecto en un párrafo, yo extraigo y solo te pregunto los huecos.
|
|
233
|
+
- 5-10 minutos.
|
|
234
|
+
- Ideal si ya tienes claro qué quieres construir y prefieres conversar antes que rellenar formulario.
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Guardar la elección como variable de sesión `MODE` (valores: `mvp`, `serio`, `creativo`).
|
|
238
|
+
|
|
239
|
+
#### Si elige MVP
|
|
240
|
+
|
|
241
|
+
Continúa con Paso A1 normal. El cuestionario filtra `questions.es.json` por `modes` que contengan `"mvp"` (= 58 preguntas).
|
|
242
|
+
|
|
243
|
+
#### Si elige Proyecto serio
|
|
244
|
+
|
|
245
|
+
Continúa con Paso A1 normal. El cuestionario filtra por `modes` que contengan `"serio"` (= 93 preguntas, las 58 de MVP + 35 nuevas de governance/compliance/SLAs/etc.).
|
|
246
|
+
|
|
247
|
+
#### Si elige Modo creativo
|
|
248
|
+
|
|
249
|
+
**Saltar Paso A1, A2, A3.** Ir directamente al Paso A1.5 (Modo Creativo) descrito más abajo.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
56
253
|
### Paso A1: Nombre del Proyecto
|
|
57
254
|
|
|
58
255
|
Usar `AskUserQuestion`:
|
|
@@ -63,10 +260,10 @@ Usar `AskUserQuestion`:
|
|
|
63
260
|
¿Cuál es el nombre del nuevo proyecto?
|
|
64
261
|
|
|
65
262
|
○ **Nombre con guiones** (Recomendado)
|
|
66
|
-
Ejemplo:
|
|
263
|
+
Ejemplo: task-manager, inventory-app, crm-suite
|
|
67
264
|
|
|
68
265
|
○ **Nombre simple**
|
|
69
|
-
Ejemplo: portfolio, dashboard,
|
|
266
|
+
Ejemplo: portfolio, dashboard, analytics
|
|
70
267
|
|
|
71
268
|
○ **Other**
|
|
72
269
|
```
|
|
@@ -78,10 +275,10 @@ Luego preguntar:
|
|
|
78
275
|
```markdown
|
|
79
276
|
¿Cuál es el nombre exacto del proyecto?
|
|
80
277
|
|
|
81
|
-
Por ejemplo: `
|
|
278
|
+
Por ejemplo: `task-manager`, `inventory-app`, `crm-suite`, `landing-corporativa`
|
|
82
279
|
```
|
|
83
280
|
|
|
84
|
-
Esperar nombre (ej: "
|
|
281
|
+
Esperar nombre (ej: "task-manager")
|
|
85
282
|
|
|
86
283
|
**Validar nombre:**
|
|
87
284
|
- Solo minúsculas, números y guiones
|
|
@@ -93,7 +290,7 @@ Si es inválido:
|
|
|
93
290
|
```markdown
|
|
94
291
|
❌ **Error:** El nombre debe tener solo minúsculas, números y guiones.
|
|
95
292
|
|
|
96
|
-
Ejemplo válido: `
|
|
293
|
+
Ejemplo válido: `task-manager`, `inventory-app`, `crm-suite`
|
|
97
294
|
|
|
98
295
|
Por favor, intenta de nuevo:
|
|
99
296
|
```
|
|
@@ -102,12 +299,115 @@ Si es válido, continuar.
|
|
|
102
299
|
|
|
103
300
|
---
|
|
104
301
|
|
|
105
|
-
### Paso
|
|
302
|
+
### Paso A1.5: Modo Creativo (solo si `MODE = creativo`)
|
|
303
|
+
|
|
304
|
+
**Si el usuario eligió MVP o Serio en el Paso A0, saltar este paso e ir directamente al Paso A2.**
|
|
305
|
+
|
|
306
|
+
#### A1.5.1 — Pedir descripción libre
|
|
307
|
+
|
|
308
|
+
```markdown
|
|
309
|
+
🎨 **Modo Creativo activado.**
|
|
310
|
+
|
|
311
|
+
Cuéntame tu proyecto en un párrafo (o varios). No te preocupes por el orden ni por dejarte cosas — yo extraeré lo que dijiste y te preguntaré solo lo que falte.
|
|
312
|
+
|
|
313
|
+
**Ideas que me ayudan:** qué hace, para quién es, qué stack imaginas, qué prioridades tienes, fechas, presupuesto, qué NO quieres, restricciones legales, integraciones que necesitas, equipo que lo va a usar.
|
|
314
|
+
|
|
315
|
+
**Tu descripción:**
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
Esperar a que el usuario escriba su párrafo. Aceptar respuestas multi-línea hasta que pulse Enter sobre línea vacía o escriba `FIN` en una línea propia.
|
|
319
|
+
|
|
320
|
+
#### A1.5.2 — Extracción estructurada
|
|
321
|
+
|
|
322
|
+
Sobre el texto del usuario, hacer una pasada de extracción mapeando lo dicho a los IDs de `questions.es.json` (`.en.json`). Llenar un dict interno `extracted = {id: valor}`.
|
|
323
|
+
|
|
324
|
+
**Reglas de extracción:**
|
|
325
|
+
|
|
326
|
+
- **No alucinar.** Si el usuario no mencionó algo, ese ID se queda vacío.
|
|
327
|
+
- **Inferencias seguras**: si dice "una app web React + Laravel", inferir `stack.backend.framework: laravel`, `stack.frontend.framework: react`. Si dice "una app", NO inferir framework.
|
|
328
|
+
- **Para texto libre** (como `identity.objective`, `identity.problem_solved`), usar las frases del usuario lo más literal posible, recortando a los `max_length` permitidos.
|
|
329
|
+
- **Para selects/multiselects**, mapear a las opciones canónicas del JSON. Si el usuario usa sinónimos (ej: "PostgreSQL 16" → `stack.database.engine: postgresql` + `stack.database.version: 16.x`), normalizar.
|
|
330
|
+
- **Confianza**: si una inferencia tiene <70% certeza, NO la rellenes — pregúntala después.
|
|
331
|
+
|
|
332
|
+
#### A1.5.3 — Mostrar resumen extraído al usuario
|
|
106
333
|
|
|
107
334
|
```markdown
|
|
108
|
-
|
|
335
|
+
✅ **Esto es lo que entendí de tu descripción:**
|
|
336
|
+
|
|
337
|
+
[Renderizar como tabla o lista los IDs extraídos con su valor]
|
|
338
|
+
|
|
339
|
+
| Campo | Valor |
|
|
340
|
+
|-------|-------|
|
|
341
|
+
| Nombre proyecto | [extracted.project.name] |
|
|
342
|
+
| Audiencia | [extracted.identity.target_audience] |
|
|
343
|
+
| Stack backend | [extracted.stack.backend.framework] |
|
|
344
|
+
| ... | ... |
|
|
345
|
+
|
|
346
|
+
**¿Está bien?** Responde:
|
|
347
|
+
- **Sí** — sigamos con las preguntas que faltan
|
|
348
|
+
- **Corregir [ID]** — quiero cambiar X
|
|
349
|
+
- **Reescribir** — déjame describir el proyecto otra vez
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
Si el usuario corrige, actualizar `extracted` y volver a mostrar.
|
|
353
|
+
|
|
354
|
+
#### A1.5.4 — Pedir solo los huecos críticos
|
|
355
|
+
|
|
356
|
+
Leer `scripts/lib/critical_fields.json` y filtrar:
|
|
357
|
+
|
|
358
|
+
- Si MODE original era `creativo` puro → usar `mvp_critical` (18 campos).
|
|
359
|
+
- Si el usuario después decide subir a serio (ver Paso A6 transiciones) → usar `mvp_critical + serio_critical_extra` (29 campos).
|
|
360
|
+
|
|
361
|
+
Para cada campo crítico que NO esté en `extracted` o esté vacío:
|
|
362
|
+
|
|
363
|
+
1. Buscar la pregunta correspondiente en `questions.es.json` por su `id`.
|
|
364
|
+
2. Renderizarla igual que en Paso A3 (con su `text`, `help`, `example`).
|
|
365
|
+
3. Encabezar con un mensaje contextual explicando POR QUÉ se pregunta:
|
|
366
|
+
|
|
367
|
+
```markdown
|
|
368
|
+
🔍 **Falta info clave**: [resumen del por qué importa].
|
|
369
|
+
|
|
370
|
+
[Renderizar pregunta normal con text + help + example]
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
Ejemplo:
|
|
374
|
+
|
|
375
|
+
```markdown
|
|
376
|
+
🔍 **Falta info clave**: no mencionaste si el sistema necesita responsive design. Es importante porque afecta directamente al diseño de los componentes.
|
|
377
|
+
|
|
378
|
+
### Pregunta — Diseño
|
|
379
|
+
|
|
380
|
+
**¿Diseño responsive (mobile-first)?**
|
|
381
|
+
|
|
382
|
+
○ sí
|
|
383
|
+
○ no
|
|
384
|
+
|
|
385
|
+
💡 **Ayuda:** Si esperas usuarios en móvil, recomendado.
|
|
386
|
+
```
|
|
109
387
|
|
|
110
|
-
|
|
388
|
+
#### A1.5.5 — Generar CONTRATO con lo extraído + huecos rellenados
|
|
389
|
+
|
|
390
|
+
Continuar con el Paso A4 normal (Generar CONTRATO.md), usando como respuestas la unión `extracted + huecos rellenados`.
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
### Paso A2: Iniciar Cuestionario
|
|
395
|
+
|
|
396
|
+
**Cuántas preguntas:**
|
|
397
|
+
|
|
398
|
+
- Modo `mvp`: 58 preguntas (filtradas por `modes` que contengan `"mvp"`).
|
|
399
|
+
- Modo `serio`: 93 preguntas (filtradas por `modes` que contengan `"serio"`).
|
|
400
|
+
- Modo `creativo`: este paso se salta — ver Paso A1.5.
|
|
401
|
+
|
|
402
|
+
**Tiempo estimado:**
|
|
403
|
+
|
|
404
|
+
- MVP: 15-20 minutos.
|
|
405
|
+
- Serio: 25-35 minutos.
|
|
406
|
+
|
|
407
|
+
```markdown
|
|
408
|
+
Perfecto, vamos a crear el proyecto **task-manager** en modo **[MODE]**.
|
|
409
|
+
|
|
410
|
+
Para generar el CONTRATO completo, necesito hacerte **[N] preguntas** sobre el proyecto.
|
|
111
411
|
|
|
112
412
|
⏱️ **Tiempo estimado:** 15-20 minutos
|
|
113
413
|
💾 **Guardado automático:** Cada 10 preguntas
|
|
@@ -122,7 +422,11 @@ Esperar confirmación (usuario responde: "Sí", "Adelante", "Ok", etc.)
|
|
|
122
422
|
|
|
123
423
|
### Paso A3: Preguntas (Leer desde questions.json)
|
|
124
424
|
|
|
125
|
-
**IMPORTANTE:**
|
|
425
|
+
**IMPORTANTE:**
|
|
426
|
+
|
|
427
|
+
1. Leer `scripts/lib/questions.es.json` (o `.en.json` según el idioma elegido en setup) y procesar las preguntas en orden.
|
|
428
|
+
2. **Filtrar por modo**: solo procesar preguntas cuyo array `modes` contenga el modo elegido por el usuario (`mvp`, `serio`, o `creativo` — aunque creativo no usa este flujo).
|
|
429
|
+
3. Las preguntas con `modes: ["mvp", "serio"]` aparecen en ambos modos (las 58 base). Las preguntas con `modes: ["serio"]` solo aparecen en modo serio (las 35 nuevas de governance/compliance/SLAs/etc.).
|
|
126
430
|
|
|
127
431
|
#### Estructura de cada pregunta:
|
|
128
432
|
|
|
@@ -419,7 +723,7 @@ Crear estructura del proyecto:
|
|
|
419
723
|
|
|
420
724
|
```bash
|
|
421
725
|
# Copiar template
|
|
422
|
-
cp -r proyectos/_template proyectos/
|
|
726
|
+
cp -r proyectos/_template proyectos/task-manager
|
|
423
727
|
|
|
424
728
|
# Guardar CONTRATO.md
|
|
425
729
|
# (Usar Write con el contenido generado)
|
|
@@ -431,7 +735,7 @@ Generar archivos adicionales:
|
|
|
431
735
|
|
|
432
736
|
**context/brief.md:**
|
|
433
737
|
```markdown
|
|
434
|
-
# Brief —
|
|
738
|
+
# Brief — task-manager
|
|
435
739
|
|
|
436
740
|
**Proyecto:** [project.display_name]
|
|
437
741
|
**Responsable:** [project.responsible]
|
|
@@ -463,7 +767,7 @@ Generar archivos adicionales:
|
|
|
463
767
|
|
|
464
768
|
**context/tech-stack.md:**
|
|
465
769
|
```markdown
|
|
466
|
-
# Tech Stack —
|
|
770
|
+
# Tech Stack — task-manager
|
|
467
771
|
|
|
468
772
|
## Backend
|
|
469
773
|
|
|
@@ -500,7 +804,7 @@ Generar archivos adicionales:
|
|
|
500
804
|
|
|
501
805
|
**context/architecture.md:**
|
|
502
806
|
```markdown
|
|
503
|
-
# Arquitectura —
|
|
807
|
+
# Arquitectura — task-manager
|
|
504
808
|
|
|
505
809
|
## Patrón Arquitectónico
|
|
506
810
|
|
|
@@ -527,7 +831,7 @@ Generar archivos adicionales:
|
|
|
527
831
|
|
|
528
832
|
**context/conventions.md:**
|
|
529
833
|
```markdown
|
|
530
|
-
# Convenciones —
|
|
834
|
+
# Convenciones — task-manager
|
|
531
835
|
|
|
532
836
|
## Nomenclatura
|
|
533
837
|
|
|
@@ -556,7 +860,7 @@ Generar archivos adicionales:
|
|
|
556
860
|
|
|
557
861
|
**context/decisions.md:**
|
|
558
862
|
```markdown
|
|
559
|
-
# Decisiones —
|
|
863
|
+
# Decisiones — task-manager
|
|
560
864
|
|
|
561
865
|
**Fecha:** [fecha actual]
|
|
562
866
|
|
|
@@ -621,12 +925,12 @@ Generar archivos adicionales:
|
|
|
621
925
|
### Paso A7: Confirmar Creación
|
|
622
926
|
|
|
623
927
|
```markdown
|
|
624
|
-
✅ **Proyecto
|
|
928
|
+
✅ **Proyecto task-manager creado exitosamente**
|
|
625
929
|
|
|
626
930
|
**Estructura creada:**
|
|
627
931
|
|
|
628
932
|
```
|
|
629
|
-
proyectos/
|
|
933
|
+
proyectos/task-manager/
|
|
630
934
|
├── CONTRATO.md (🔒 inmutable — 58 preguntas procesadas)
|
|
631
935
|
├── ANEXOS.md (✏️ editable)
|
|
632
936
|
├── README.md
|
|
@@ -701,6 +1005,59 @@ cd proyectos/[nombre-proyecto]
|
|
|
701
1005
|
|
|
702
1006
|
---
|
|
703
1007
|
|
|
1008
|
+
### Paso A9: Transición a otro modo (opcional, después de generar CONTRATO)
|
|
1009
|
+
|
|
1010
|
+
**Después de que el CONTRATO se haya generado en cualquier modo (MVP, Serio o Creativo)**, ofrecer al usuario la posibilidad de ampliar/refinar mediante otro modo. Esto es opcional — si el usuario ya está conforme, sigue al Paso A8 normal (crear tickets).
|
|
1011
|
+
|
|
1012
|
+
#### A9.1 — Ofrecer transición
|
|
1013
|
+
|
|
1014
|
+
Usar `AskUserQuestion`:
|
|
1015
|
+
|
|
1016
|
+
```markdown
|
|
1017
|
+
✅ CONTRATO generado en modo **[MODE]**.
|
|
1018
|
+
|
|
1019
|
+
¿Quieres ampliarlo o refinarlo?
|
|
1020
|
+
|
|
1021
|
+
○ **Mantener como está** — ir directo a `crear-tickets`.
|
|
1022
|
+
|
|
1023
|
+
○ **Pasar a modo Serio** — añadir preguntas de governance, compliance, SLAs, integraciones empresariales, multi-tenant. (~35 preguntas extra, 15-20 min).
|
|
1024
|
+
- Disponible si vienes de MVP o Creativo.
|
|
1025
|
+
- Si vienes de Serio, esta opción no aparece.
|
|
1026
|
+
|
|
1027
|
+
○ **Pasar a modo Creativo** — describir aspectos extra del proyecto en un párrafo libre. Útil si quieres añadir contexto, decisiones que no estaban en el cuestionario, anotaciones para el equipo.
|
|
1028
|
+
- Disponible siempre.
|
|
1029
|
+
```
|
|
1030
|
+
|
|
1031
|
+
#### A9.2 — Si el usuario elige "Pasar a modo Serio"
|
|
1032
|
+
|
|
1033
|
+
1. Mantener todas las respuestas existentes (no preguntar de nuevo).
|
|
1034
|
+
2. Filtrar las preguntas de `questions.es.json` por `modes` que contengan `"serio"` y que NO tengan respuesta aún en `extracted`.
|
|
1035
|
+
3. Renderizar y procesar SOLO esas preguntas extra (las 35 nuevas).
|
|
1036
|
+
4. Regenerar el CONTRATO.md con las respuestas anteriores + las nuevas.
|
|
1037
|
+
5. Actualizar el campo `meta.mode` en el frontmatter del CONTRATO a `serio`.
|
|
1038
|
+
6. Mostrar diff resumido al usuario antes de sobrescribir.
|
|
1039
|
+
|
|
1040
|
+
#### A9.3 — Si el usuario elige "Pasar a modo Creativo"
|
|
1041
|
+
|
|
1042
|
+
1. Pedir párrafo libre con un prompt diferente al inicial:
|
|
1043
|
+
|
|
1044
|
+
```markdown
|
|
1045
|
+
🎨 Tu CONTRATO ya tiene la base. Ahora cuéntame en un párrafo cualquier matiz, contexto, decisión o detalle que NO te haya preguntado y quieras dejar registrado. Lo añadiré a una sección **"Contexto Adicional"** del CONTRATO.
|
|
1046
|
+
```
|
|
1047
|
+
|
|
1048
|
+
2. Tomar el párrafo del usuario y añadirlo al CONTRATO.md como una sección nueva titulada `## Contexto Adicional`, debajo de `## Restricciones`.
|
|
1049
|
+
3. Actualizar el campo `meta.mode` del frontmatter a `[modo_anterior]+creativo` (ej: `mvp+creativo`, `serio+creativo`).
|
|
1050
|
+
|
|
1051
|
+
#### A9.4 — Si el usuario elige "Mantener como está"
|
|
1052
|
+
|
|
1053
|
+
Ir al Paso A8 (crear tickets).
|
|
1054
|
+
|
|
1055
|
+
#### A9.5 — Iteración
|
|
1056
|
+
|
|
1057
|
+
El Paso A9 puede repetirse: tras pasar a Serio o añadir Contexto Adicional, volver a ofrecer A9 hasta que el usuario diga "Mantener". Esto permite construir el CONTRATO de forma incremental.
|
|
1058
|
+
|
|
1059
|
+
---
|
|
1060
|
+
|
|
704
1061
|
## Flujo B: Proyecto Existente (Trabajar en proyecto ya creado)
|
|
705
1062
|
|
|
706
1063
|
### Paso B1: Seleccionar Proyecto
|
|
@@ -709,9 +1066,9 @@ cd proyectos/[nombre-proyecto]
|
|
|
709
1066
|
**¿En cuál proyecto vas a trabajar?**
|
|
710
1067
|
|
|
711
1068
|
Proyectos disponibles:
|
|
712
|
-
1.
|
|
713
|
-
2.
|
|
714
|
-
3.
|
|
1069
|
+
1. task-manager
|
|
1070
|
+
2. inventory-app
|
|
1071
|
+
3. crm-suite
|
|
715
1072
|
|
|
716
1073
|
Responde con el número o el nombre:
|
|
717
1074
|
```
|
|
@@ -750,7 +1107,7 @@ Responde A o B:
|
|
|
750
1107
|
**¿Qué ticket vas a trabajar?**
|
|
751
1108
|
|
|
752
1109
|
Opciones:
|
|
753
|
-
- Dime el ID del ticket (ejemplo:
|
|
1110
|
+
- Dime el ID del ticket (ejemplo: task-manager-23)
|
|
754
1111
|
- O describe la tarea que vas a hacer
|
|
755
1112
|
|
|
756
1113
|
**Comandos disponibles:**
|
|
@@ -256,8 +256,8 @@ cd /path/to/specleap
|
|
|
256
256
|
# Output esperado:
|
|
257
257
|
# ✅ CONTRATO.md generado exitosamente
|
|
258
258
|
# 📁 Archivos creados:
|
|
259
|
-
# - proyectos/
|
|
260
|
-
# - proyectos/
|
|
259
|
+
# - proyectos/task-manager/CONTRATO.md
|
|
260
|
+
# - proyectos/task-manager/context/brief.md
|
|
261
261
|
# - ...
|
|
262
262
|
```
|
|
263
263
|
|
|
@@ -265,10 +265,10 @@ cd /path/to/specleap
|
|
|
265
265
|
|
|
266
266
|
```bash
|
|
267
267
|
# Ver frontmatter
|
|
268
|
-
head -n 100 proyectos/
|
|
268
|
+
head -n 100 proyectos/task-manager/CONTRATO.md
|
|
269
269
|
|
|
270
270
|
# Ver estructura completa
|
|
271
|
-
cat proyectos/
|
|
271
|
+
cat proyectos/task-manager/CONTRATO.md
|
|
272
272
|
```
|
|
273
273
|
|
|
274
274
|
## 🔧 Próximos Pasos (Fase 2)
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
# Este archivo muestra cómo se guardan las respuestas del cuestionario
|
|
3
3
|
|
|
4
4
|
# ===== IDENTIDAD =====
|
|
5
|
-
project_name:
|
|
6
|
-
project_display_name:
|
|
7
|
-
project_objective:
|
|
8
|
-
problem_solved: Los
|
|
9
|
-
target_audience:
|
|
10
|
-
competitors:
|
|
5
|
+
project_name: task-manager
|
|
6
|
+
project_display_name: Task Manager Pro
|
|
7
|
+
project_objective: Aplicación web para gestionar tareas en equipo con asignación, prioridades y seguimiento de tiempo
|
|
8
|
+
problem_solved: Los equipos pierden tiempo coordinando tareas en herramientas dispersas (email, chat, hojas de cálculo) y no tienen visibilidad clara del progreso
|
|
9
|
+
target_audience: team
|
|
10
|
+
competitors: Notion, Trello, Linear
|
|
11
11
|
|
|
12
12
|
# ===== STACK TECNOLÓGICO =====
|
|
13
13
|
backend_framework: laravel
|
|
@@ -18,17 +18,17 @@ css_framework: tailwind
|
|
|
18
18
|
|
|
19
19
|
# ===== FUNCIONALIDADES =====
|
|
20
20
|
core_features:
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
21
|
+
- Autenticación de usuarios y equipos
|
|
22
|
+
- CRUD de tareas con estados y prioridades
|
|
23
|
+
- Asignación de tareas a miembros
|
|
24
|
+
- Búsqueda y filtros avanzados
|
|
25
|
+
- Notificaciones en-app
|
|
26
26
|
|
|
27
27
|
secondary_features:
|
|
28
|
-
-
|
|
29
|
-
- Recomendaciones basadas en gustos
|
|
28
|
+
- Exportar a CSV
|
|
30
29
|
- Modo oscuro
|
|
31
|
-
-
|
|
30
|
+
- Atajos de teclado
|
|
31
|
+
- Integraciones con Slack/Email
|
|
32
32
|
|
|
33
33
|
needs_auth: email_password
|
|
34
34
|
needs_admin_panel: basic
|
|
@@ -41,13 +41,13 @@ visual_style: modern
|
|
|
41
41
|
# ===== DESPLIEGUE =====
|
|
42
42
|
hosting: hostinger
|
|
43
43
|
needs_ssl: true
|
|
44
|
-
custom_domain:
|
|
44
|
+
custom_domain: taskmanager.example.com
|
|
45
45
|
|
|
46
46
|
# ===== RESTRICCIONES =====
|
|
47
47
|
time_limit: 3 meses
|
|
48
48
|
budget_limit: 500 USD
|
|
49
49
|
out_of_scope:
|
|
50
|
-
- Streaming de películas (no reproducción)
|
|
51
50
|
- App móvil nativa
|
|
51
|
+
- Videoconferencia integrada
|
|
52
52
|
- Sistema de pagos
|
|
53
|
-
- Chat entre usuarios
|
|
53
|
+
- Chat entre usuarios en tiempo real
|