specleap-framework 2.1.14 → 2.2.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/.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 +43 -0
- package/package.json +1 -1
- package/scripts/create-asana-tasks.sh +9 -0
- package/scripts/generate-asana-structure.sh +11 -0
- 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/planificar.md
CHANGED
|
@@ -22,6 +22,30 @@ Esto incluye:
|
|
|
22
22
|
|
|
23
23
|
## Flujo
|
|
24
24
|
|
|
25
|
+
### 0. Cargar credenciales desde .env
|
|
26
|
+
|
|
27
|
+
**ANTES de cualquier comando que necesite Asana**, cargar las variables de entorno desde el `.env` del proyecto SpecLeap. `setup.sh` guarda allí `ASANA_ACCESS_TOKEN` y `ASANA_WORKSPACE_GID`, pero la shell de Claude Code no las carga automáticamente.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Cargar .env si existe (no fallar si no existe)
|
|
31
|
+
if [ -f .env ]; then
|
|
32
|
+
set -a
|
|
33
|
+
source .env
|
|
34
|
+
set +a
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
# Verificar que el token quedó cargado
|
|
38
|
+
if [ -z "${ASANA_ACCESS_TOKEN:-}" ]; then
|
|
39
|
+
echo "❌ ASANA_ACCESS_TOKEN no está configurado en .env ni en la shell"
|
|
40
|
+
echo " Re-ejecuta bash setup.sh para configurar Asana, o exporta manualmente."
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Importante:** los scripts `scripts/generate-asana-structure.sh` y `scripts/create-asana-tasks.sh` también cargan `.env` por su cuenta como red de seguridad. Pero comprobar aquí permite dar un mensaje claro al usuario antes de invocar el script.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
25
49
|
### 1. Identificar Proyecto
|
|
26
50
|
|
|
27
51
|
Si no se especifica ruta:
|
|
@@ -29,9 +53,9 @@ Si no se especifica ruta:
|
|
|
29
53
|
¿Para qué proyecto quieres crear el backlog?
|
|
30
54
|
|
|
31
55
|
**Proyectos disponibles:**
|
|
32
|
-
1.
|
|
33
|
-
2.
|
|
34
|
-
3.
|
|
56
|
+
1. task-manager
|
|
57
|
+
2. inventory-app
|
|
58
|
+
3. crm-suite
|
|
35
59
|
|
|
36
60
|
Responde con el número o nombre:
|
|
37
61
|
```
|
|
@@ -208,8 +232,14 @@ Edita `scripts/generate-asana-structure.sh`:
|
|
|
208
232
|
## Requisitos
|
|
209
233
|
|
|
210
234
|
1. **CONTRATO.md** existente
|
|
211
|
-
2. **ASANA_ACCESS_TOKEN**
|
|
212
|
-
|
|
235
|
+
2. **ASANA_ACCESS_TOKEN** y **ASANA_WORKSPACE_GID** en `.env` del proyecto SpecLeap (`setup.sh` lo crea al instalar)
|
|
236
|
+
|
|
237
|
+
Los scripts cargan `.env` automáticamente. Si necesitas verificar manualmente:
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
cd <ruta-proyecto-specleap>
|
|
241
|
+
cat .env | grep ASANA
|
|
242
|
+
```
|
|
213
243
|
|
|
214
244
|
---
|
|
215
245
|
|
|
@@ -218,20 +248,27 @@ Edita `scripts/generate-asana-structure.sh`:
|
|
|
218
248
|
### "Script no encontrado"
|
|
219
249
|
|
|
220
250
|
```bash
|
|
221
|
-
cd ~/specleap-framework
|
|
222
251
|
ls scripts/generate-asana-structure.sh
|
|
223
|
-
# Si no existe, verifica instalación
|
|
252
|
+
# Si no existe, verifica instalación o re-ejecuta setup.sh
|
|
224
253
|
```
|
|
225
254
|
|
|
226
255
|
### "ASANA_ACCESS_TOKEN no configurado"
|
|
227
256
|
|
|
257
|
+
El `.env` del proyecto SpecLeap no existe o no contiene el token. Soluciones:
|
|
258
|
+
|
|
228
259
|
```bash
|
|
229
|
-
#
|
|
230
|
-
grep
|
|
260
|
+
# Verificar que existe el .env y tiene el token
|
|
261
|
+
ls -la .env && grep ASANA .env
|
|
231
262
|
|
|
232
|
-
# Si
|
|
233
|
-
|
|
234
|
-
|
|
263
|
+
# Si falta o está vacío, re-ejecutar el paso de configuración Asana del setup
|
|
264
|
+
bash setup.sh
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Si por alguna razón prefieres exportar manualmente (sin pasar por `.env`):
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
export ASANA_ACCESS_TOKEN="tu-token-aqui"
|
|
271
|
+
export ASANA_WORKSPACE_GID="tu-workspace-gid"
|
|
235
272
|
```
|
|
236
273
|
|
|
237
274
|
### "Error: Not Authorized"
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,49 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.2.0] - 2026-05-02
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **`setup.sh` — el prompt del nombre de carpeta se movió a DESPUÉS del Paso 1 (idioma)**, antes del Paso 2 (GitHub). Ahora sale en el idioma elegido (sólo ES o sólo EN, no bilingüe a la vez como en v2.1.14). El comportamiento funcional es idéntico (Enter para mantener nombre actual con default `specleap-framework`, valida caracteres, renombra in-place si se cambia, salta si `SPECLEAP_INSTALL_PATH` ya está set por `bin/specleap`). Reportado por Styng tras testear v2.1.14: el bloque salía con texto bilingüe simultáneo porque se ejecutaba antes de saber qué idioma había elegido el usuario.
|
|
15
|
+
|
|
16
|
+
- **`.commands/inicio.md` — nuevo Paso 0 (antes de listar proyectos) que ofrece instalar `markitdown`** (Microsoft, MIT, Python 3.10+) como herramienta opcional. Convierte PDF/Word/Excel/PowerPoint/HTML/CSV/JSON/XML/EPUB a Markdown. Cuando SpecLeap procesa documentos no-markdown durante el flujo conversacional, esta conversión previa baja el consumo de tokens entre 20% y 50%. El prompt se ejecuta UNA SOLA VEZ por sesión "Hola", es bilingüe (ES default, EN si el usuario habla en inglés), y nunca bloquea el flujo principal: si el usuario dice "No" o "Más tarde" se sigue normalmente con el listado de proyectos. Si dice "Sí", se verifica con `command -v markitdown` y se muestran instrucciones de instalación (`pip install 'markitdown[all]'` o `pipx install`) si no está. Pedido por Styng tras validar v2.1.14: quería que tras "Hola" se ofreciera la herramienta antes de empezar el primer proyecto.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **Bug Asana: `.env` no se cargaba en sesiones nuevas de Claude Code.** `setup.sh` guarda `ASANA_ACCESS_TOKEN` y `ASANA_WORKSPACE_GID` en `.env` del proyecto SpecLeap, pero la shell que arranca Claude Code no lo carga automáticamente. Resultado: `crear-tickets` y `planificar` reportaban "ASANA_ACCESS_TOKEN no configurado" aunque el token sí existía en el `.env`.
|
|
21
|
+
- **Fix**: `scripts/generate-asana-structure.sh` y `scripts/create-asana-tasks.sh` cargan `.env` con `set -a && source .env && set +a` al inicio (red de seguridad).
|
|
22
|
+
- **Fix**: `.commands/planificar.md` instruye a la AI a hacer la misma carga ANTES de comprobar el token, dando un mensaje claro al usuario si falta.
|
|
23
|
+
- **Fix**: `setup.sh` exporta tanto `ASANA_WORKSPACE_ID` como `ASANA_WORKSPACE_GID` (mismo valor) en `.env`, porque distintos scripts usan distintos nombres y antes había que hacer un roundtrip a la API para resolverlo.
|
|
24
|
+
- **Reportado por Styng** durante test 2026-05-01 de v2.1.14.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- **Ejemplos sesgados en cuestionario y comandos sustituidos por nombres genéricos neutros.** Antes los ejemplos eran `casa-de-peli`, `app-tienda`, `Mi Proyecto Awesome`, `Casa de Películas`, `Tienda Online de Café`, `Juan Pérez`, etc. Cambiados a `task-manager`, `inventory-app`, `crm-suite`, `Task Manager Pro`, `María García`, etc. Afecta: `scripts/lib/questions.es.json`, `scripts/lib/questions.en.json`, `.commands/inicio.md`, `.commands/explicar.md`, `.commands/implementar.md`, `.commands/planificar.md`, `.commands/nuevo/README.md`, `.commands/nuevo/responses-example.yaml`. Reportado por Styng: los ejemplos eran reconocibles como proyectos suyos y eso confunde a usuarios nuevos.
|
|
29
|
+
- **Pregunta 9 (competidores) ahora explica el "para qué".** Antes el `help` decía solo "Productos similares que te sirven de inspiración" — el usuario no entendía por qué se preguntaba. Ahora dice "Si conoces apps similares, las usaré como referencia para sugerir features y patrones de UX. Si no, escribe `ninguno` o déjalo vacío".
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- **Tres modos de cuestionario al inicio del Flujo A (proyecto nuevo): MVP, Proyecto serio, Modo creativo.** Después de pedir el nombre del proyecto, `.commands/inicio.md` lanza un `AskUserQuestion` (Paso A0) preguntando qué tipo de proyecto se va a montar:
|
|
34
|
+
- **MVP** (58 preguntas, 15-20 min) — proyecto pequeño / prototipo / 1 persona o equipo pequeño. Es el comportamiento histórico.
|
|
35
|
+
- **Proyecto serio** (93 preguntas, 25-35 min) — equipo + departamentos + compliance + SLAs. Las 58 base + 35 nuevas: governance (5), departamentos involucrados (3), integraciones empresariales (5: SSO, ERP, CRM, BI, payroll), SLAs y resiliencia (5: uptime/RTO/RPO/DR/on-call), compliance (4: frameworks, DPO, audit log retention, data residency), roadmap por fases (3), procesos de release (3: feature flags, deploy strategy, rollback), observabilidad (3: APM/alerting/dashboards), multi-X (4: idiomas, tenant, regiones, i18n strategy).
|
|
36
|
+
- **Modo creativo** (5-10 min) — el usuario describe el proyecto en un párrafo libre; la AI extrae lo dicho con razonamiento estructurado, muestra un resumen para validar, y solo pregunta los **campos críticos** que no fueron mencionados (`scripts/lib/critical_fields.json` define 18 críticos para MVP y 11 extra para Serio).
|
|
37
|
+
|
|
38
|
+
- **Transiciones bidireccionales entre modos (Paso A9).** Tras generar el CONTRATO en cualquier modo, ofrecer al usuario:
|
|
39
|
+
- Mantener como está → seguir a `crear-tickets`.
|
|
40
|
+
- Pasar a Serio → contestar las 35 preguntas extra de governance/compliance/SLAs (manteniendo las respuestas existentes).
|
|
41
|
+
- Pasar a Creativo → describir matices en un párrafo libre que se añade como sección "Contexto Adicional" del CONTRATO.
|
|
42
|
+
El paso es iterativo: se puede repetir para ir construyendo el CONTRATO incrementalmente.
|
|
43
|
+
|
|
44
|
+
- **`scripts/lib/questions.es.json` y `scripts/lib/questions.en.json` ahora marcan cada pregunta con un campo `modes`.** Las 58 base llevan `["mvp", "serio"]` (aparecen en ambos modos); las 35 nuevas llevan `["serio"]` (solo en modo serio). El cuestionario filtra por modo elegido antes de renderizar.
|
|
45
|
+
|
|
46
|
+
- **Nuevo archivo `scripts/lib/critical_fields.json`** que define los campos mínimos que el modo creativo verifica tras la extracción del párrafo del usuario. Si falta alguno, la AI hace una pregunta dirigida con contexto explicando POR QUÉ se necesita.
|
|
47
|
+
|
|
48
|
+
### Removed
|
|
49
|
+
|
|
50
|
+
- **`composer.json`** — residual de un proyecto Laravel previo (`barryvdh/laravel-dompdf`). SpecLeap no usa Composer ni PHP en sus dependencias; el archivo nunca debió formar parte del paquete npm.
|
|
51
|
+
- **`package-lock.json`** — sin sentido en un paquete que no declara `dependencies` ni `devDependencies` en `package.json`. Solo añadía ruido al diff.
|
|
52
|
+
|
|
10
53
|
## [2.1.14] - 2026-05-01
|
|
11
54
|
|
|
12
55
|
### Changed
|
package/package.json
CHANGED
|
@@ -8,6 +8,15 @@ set -euo pipefail
|
|
|
8
8
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
9
|
ASANA_UTILS="$SCRIPT_DIR/lib/asana-utils.sh"
|
|
10
10
|
|
|
11
|
+
# Auto-cargar .env desde el root del proyecto SpecLeap.
|
|
12
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
13
|
+
if [[ -f "$PROJECT_ROOT/.env" ]]; then
|
|
14
|
+
set -a
|
|
15
|
+
# shellcheck disable=SC1090
|
|
16
|
+
source "$PROJECT_ROOT/.env"
|
|
17
|
+
set +a
|
|
18
|
+
fi
|
|
19
|
+
|
|
11
20
|
source "$ASANA_UTILS"
|
|
12
21
|
|
|
13
22
|
# Colores
|
|
@@ -4,6 +4,17 @@
|
|
|
4
4
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
5
|
source "$SCRIPT_DIR/../.specleap/i18n.sh"
|
|
6
6
|
|
|
7
|
+
# Auto-cargar .env desde el root del proyecto SpecLeap.
|
|
8
|
+
# setup.sh guarda ASANA_ACCESS_TOKEN/ASANA_WORKSPACE_GID en .env, pero las
|
|
9
|
+
# shells nuevas (ej: las que arranca Claude Code) no lo cargan automáticamente.
|
|
10
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
11
|
+
if [[ -f "$PROJECT_ROOT/.env" ]]; then
|
|
12
|
+
set -a
|
|
13
|
+
# shellcheck disable=SC1090
|
|
14
|
+
source "$PROJECT_ROOT/.env"
|
|
15
|
+
set +a
|
|
16
|
+
fi
|
|
17
|
+
|
|
7
18
|
# SpecLeap — Generador de estructura Asana
|
|
8
19
|
# Convierte CONTRATO.md → proyecto Asana con secciones y tareas
|
|
9
20
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"metadata": {
|
|
3
|
+
"version": "1.0",
|
|
4
|
+
"description": "Campos mínimos que el modo 'creativo' verifica tras extraer información del párrafo del usuario. Si falta alguno, la AI pregunta sólo ese (no las 58/93 completas). Las claves apuntan a IDs de questions.{es,en}.json."
|
|
5
|
+
},
|
|
6
|
+
"mvp_critical": [
|
|
7
|
+
"project.name",
|
|
8
|
+
"project.display_name",
|
|
9
|
+
"project.responsible",
|
|
10
|
+
"identity.objective",
|
|
11
|
+
"identity.target_audience",
|
|
12
|
+
"stack.backend.framework",
|
|
13
|
+
"stack.frontend.framework",
|
|
14
|
+
"stack.database.engine",
|
|
15
|
+
"features.core",
|
|
16
|
+
"features.auth.enabled",
|
|
17
|
+
"design.responsive",
|
|
18
|
+
"design.primary_color",
|
|
19
|
+
"deployment.hosting",
|
|
20
|
+
"deployment.ssl",
|
|
21
|
+
"security.level",
|
|
22
|
+
"security.gdpr_compliant",
|
|
23
|
+
"testing.coverage_target",
|
|
24
|
+
"constraints.time_limit"
|
|
25
|
+
],
|
|
26
|
+
"serio_critical_extra": [
|
|
27
|
+
"governance.product_owner",
|
|
28
|
+
"governance.release_approver",
|
|
29
|
+
"departments.list",
|
|
30
|
+
"compliance.frameworks",
|
|
31
|
+
"sla.uptime_target",
|
|
32
|
+
"sla.rto",
|
|
33
|
+
"roadmap.phases",
|
|
34
|
+
"release.deploy_strategy",
|
|
35
|
+
"observability.apm_logs_metrics",
|
|
36
|
+
"multi.tenant",
|
|
37
|
+
"multi.regions"
|
|
38
|
+
]
|
|
39
|
+
}
|