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.
@@ -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. app-tienda
33
- 2. api-backend
34
- 3. dashboard-analytics
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** configurado en ~/.zshrc
212
- 3. **ASANA_WORKSPACE_GID** configurado (o se detecta automáticamente)
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
- # Verifica que está en tu ~/.zshrc
230
- grep ASANA_ACCESS_TOKEN ~/.zshrc
260
+ # Verificar que existe el .env y tiene el token
261
+ ls -la .env && grep ASANA .env
231
262
 
232
- # Si no está, agrégalo:
233
- echo 'export ASANA_ACCESS_TOKEN="tu-token-aqui"' >> ~/.zshrc
234
- source ~/.zshrc
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specleap-framework",
3
- "version": "2.1.14",
3
+ "version": "2.2.0",
4
4
  "description": "Spec-Driven Development Framework — Transform VSCode, Cursor, JetBrains into spec-first development machines",
5
5
  "keywords": [
6
6
  "spec-driven-development",
@@ -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
+ }