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.
Files changed (47) hide show
  1. package/.agents/backend.md +419 -0
  2. package/.agents/frontend.md +577 -0
  3. package/.agents/producto.md +516 -0
  4. package/.commands/adoptar.md +323 -0
  5. package/.commands/ayuda.md +142 -0
  6. package/.commands/crear-tickets.md +55 -0
  7. package/.commands/documentar.md +285 -0
  8. package/.commands/explicar.md +234 -0
  9. package/.commands/implementar.md +383 -0
  10. package/.commands/inicio.md +824 -0
  11. package/.commands/nuevo/README.md +292 -0
  12. package/.commands/nuevo/questions-base.yaml +320 -0
  13. package/.commands/nuevo/responses-example.yaml +53 -0
  14. package/.commands/planificar.md +253 -0
  15. package/.commands/refinar.md +306 -0
  16. package/LICENSE +21 -0
  17. package/README.md +603 -0
  18. package/SETUP.md +351 -0
  19. package/install.sh +152 -0
  20. package/package.json +60 -0
  21. package/proyectos/_template/.gitkeep +1 -0
  22. package/proyectos/_template/ANEXOS.md +21 -0
  23. package/proyectos/_template/CONTRATO.md +26 -0
  24. package/proyectos/_template/context/.gitkeep +1 -0
  25. package/rules/development-rules.md +113 -0
  26. package/rules/environment-protection.md +97 -0
  27. package/rules/git-workflow.md +142 -0
  28. package/rules/session-protocol.md +121 -0
  29. package/scripts/README.md +129 -0
  30. package/scripts/analyze-project.sh +826 -0
  31. package/scripts/create-asana-tasks.sh +133 -0
  32. package/scripts/detect-project-type.sh +141 -0
  33. package/scripts/estimate-effort.sh +290 -0
  34. package/scripts/generate-asana-structure.sh +262 -0
  35. package/scripts/generate-contract.sh +360 -0
  36. package/scripts/generate-contrato.sh +555 -0
  37. package/scripts/install-git-hooks.sh +141 -0
  38. package/scripts/install-skills.sh +130 -0
  39. package/scripts/lib/asana-utils.sh +191 -0
  40. package/scripts/lib/jira-project-utils.sh +222 -0
  41. package/scripts/lib/questions.json +831 -0
  42. package/scripts/lib/render-contrato.py +195 -0
  43. package/scripts/lib/validate.sh +325 -0
  44. package/scripts/parse-contrato.sh +190 -0
  45. package/scripts/setup-mcp.sh +654 -0
  46. package/scripts/test-cuestionario.sh +428 -0
  47. package/setup.sh +458 -0
@@ -0,0 +1,113 @@
1
+ # Reglas de Desarrollo — SpecLeap
2
+
3
+ > Reglas obligatorias para todo desarrollo dentro de proyectos gestionados con SpecLeap.
4
+
5
+ ## 1. Centralización de Configuración
6
+
7
+ **NUNCA hardcodear valores.** Todo valor configurable debe estar en:
8
+
9
+ - Variables de entorno (`.env`)
10
+ - Archivos de configuración (`config/`)
11
+ - Constantes centralizadas
12
+
13
+ ```
14
+ ❌ $url = "https://api.example.com/v1";
15
+ ✅ $url = config('services.api.url');
16
+ ```
17
+
18
+ **Sin excepciones.** URLs, credenciales, puertos, rutas de archivos, claves API — todo centralizado.
19
+
20
+ ## 2. Non-Destructive Development
21
+
22
+ Antes de cualquier cambio, evaluar la **jerarquía de impacto**:
23
+
24
+ | Nivel | Pregunta | Acción requerida |
25
+ |-------|----------|-----------------|
26
+ | 🔴 Crítico | ¿Puede romper producción? | Review obligatorio + rollback plan |
27
+ | 🟡 Alto | ¿Afecta datos existentes? | Migración reversible + backup |
28
+ | 🟢 Medio | ¿Cambia API pública? | Deprecación primero, luego cambio |
29
+ | ⚪ Bajo | ¿Cambio interno sin impacto externo? | Proceder con tests |
30
+
31
+ **Reglas:**
32
+ - Toda migración de base de datos debe ser **reversible** (`up` + `down`)
33
+ - Nunca eliminar columnas/tablas sin período de deprecación
34
+ - Cambios en APIs públicas requieren versionado
35
+
36
+ ## 3. Análisis Previo Obligatorio
37
+
38
+ **ANTES de crear código nuevo:**
39
+
40
+ 1. **Buscar** si ya existe funcionalidad similar en el proyecto
41
+ 2. **Revisar** specs existentes relacionadas
42
+ 3. **Verificar** patrones establecidos en el código
43
+ 4. **Consultar** `context/conventions.md` del proyecto
44
+
45
+ ```bash
46
+ # Buscar código existente antes de crear
47
+ grep -r "función_similar" src/
48
+ # Revisar specs relacionadas
49
+ ls openspec/specs/functional/ | grep "tema"
50
+ ```
51
+
52
+ **Si existe algo similar:** reutilizar o extender, NO duplicar.
53
+
54
+ ## 4. Consistencia de Patrones
55
+
56
+ **Replicar EXACTAMENTE los patrones existentes del proyecto.**
57
+
58
+ - Si el proyecto usa Services → crear un Service, no inventar otra capa
59
+ - Si los Controllers siguen un formato → seguir ese formato exacto
60
+ - Si hay una convención de nombres → respetarla
61
+
62
+ **Antes de introducir un patrón nuevo:**
63
+ 1. Documentar por qué el patrón actual no sirve
64
+ 2. Proponer el nuevo patrón en una spec
65
+ 3. Obtener aprobación antes de implementar
66
+
67
+ ## 5. Comunicación de Errores
68
+
69
+ Cuando se detecta un error, documentar con esta estructura:
70
+
71
+ ```markdown
72
+ ### Error detectado
73
+ - **Causa:** [descripción técnica de la causa raíz]
74
+ - **Impacto:** [qué afecta y a quién]
75
+ - **Solución:** [qué se hizo para resolverlo]
76
+ - **Verificación:** [cómo se verificó que está resuelto]
77
+ - **Prevención:** [qué se puede hacer para evitarlo en el futuro]
78
+ ```
79
+
80
+ ## 6. Fix de Errores por Análisis
81
+
82
+ Al encontrar un error:
83
+
84
+ 1. **Primero:** Buscar código que YA funciona en el proyecto como referencia
85
+ 2. **Segundo:** Analizar la diferencia entre lo que funciona y lo que falla
86
+ 3. **Tercero:** Aplicar la corrección basándose en el patrón funcional
87
+ 4. **Nunca:** Copiar soluciones externas sin adaptarlas al proyecto
88
+
89
+ ## 7. Métodos Estáticos vs Instancia
90
+
91
+ Guía para decidir cuándo usar cada uno:
92
+
93
+ | Usar estático cuando | Usar instancia cuando |
94
+ |---------------------|----------------------|
95
+ | No necesita estado interno | Necesita estado o configuración |
96
+ | Es una utilidad pura (helper) | Tiene dependencias inyectadas |
97
+ | No necesita ser mockeado en tests | Debe ser testeable con mocks |
98
+ | Operación sin efectos secundarios | Interactúa con DB, APIs, filesystem |
99
+
100
+ ## 8. Prohibición de Archivos en Raíz
101
+
102
+ **JAMÁS crear archivos sueltos en la raíz del proyecto** sin autorización explícita.
103
+
104
+ Todo archivo debe ir en su carpeta correspondiente:
105
+ - Código → `src/`
106
+ - Tests → `tests/`
107
+ - Configuración → `config/`
108
+ - Documentación → `docs/`
109
+ - Specs → `openspec/specs/`
110
+
111
+ ---
112
+
113
+ *Estas reglas son obligatorias. Cualquier excepción debe ser aprobada y documentada en `context/decisions.md`.*
@@ -0,0 +1,97 @@
1
+ # Protección del Entorno — SpecLeap
2
+
3
+ > Reglas para proteger archivos críticos y mantener la integridad del proyecto.
4
+
5
+ ## Archivos Protegidos
6
+
7
+ Los siguientes archivos y carpetas requieren **confirmación explícita** antes de ser modificados:
8
+
9
+ ### 🔴 Nivel Máximo — Nunca modificar sin aprobación
10
+
11
+ | Archivo/Carpeta | Razón |
12
+ |----------------|-------|
13
+ | `openspec/specs/` | Contratos funcionales del proyecto |
14
+ | `openspec/changes/` | Historial de propuestas de cambio |
15
+ | `context/` | Memoria y contexto del proyecto |
16
+ | `.env` | Variables de entorno sensibles |
17
+ | `config/` | Configuración central |
18
+ | `main` branch | Rama de producción |
19
+
20
+ ### 🟡 Nivel Alto — Confirmar antes de modificar
21
+
22
+ | Archivo/Carpeta | Razón |
23
+ |----------------|-------|
24
+ | `rules/` | Reglas del proyecto |
25
+ | `AGENTS.md` | Configuración de agentes AI |
26
+ | `README.md` | Documentación principal |
27
+ | Migraciones de DB | Afectan datos existentes |
28
+
29
+ ## Reglas de Protección
30
+
31
+ ### 1. Specs como Fuente de Verdad
32
+
33
+ Las specs en `openspec/specs/` son **contratos**. Para modificar una spec:
34
+
35
+ 1. Crear una propuesta de cambio (`openspec/changes/`)
36
+ 2. Documentar QUÉ cambia y POR QUÉ
37
+ 3. Obtener aprobación
38
+ 4. Solo entonces modificar la spec
39
+
40
+ **NUNCA** modificar una spec directamente sin propuesta.
41
+
42
+ ### 2. Context como Memoria del Proyecto
43
+
44
+ Los archivos en `context/` documentan decisiones arquitectónicas. Para modificarlos:
45
+
46
+ 1. Verificar que el cambio refleja una decisión real (no una suposición)
47
+ 2. Documentar la fecha y razón del cambio
48
+ 3. Actualizar `context/decisions.md` con la nueva decisión
49
+
50
+ ### 3. Protección de Archivos en Producción
51
+
52
+ Antes de tocar archivos que afectan producción:
53
+
54
+ ```
55
+ ⚠️ PREGUNTA: ¿Este cambio puede afectar al entorno de producción?
56
+
57
+ SI → Requiere:
58
+ 1. Review de al menos 1 persona
59
+ 2. Plan de rollback documentado
60
+ 3. Ventana de mantenimiento acordada
61
+
62
+ NO → Proceder con el flujo normal
63
+ ```
64
+
65
+ ### 4. Archivos que NUNCA Deben Subirse al Repositorio
66
+
67
+ | Archivo | Razón |
68
+ |---------|-------|
69
+ | `.env` | Credenciales sensibles |
70
+ | `*.log` | Logs de desarrollo |
71
+ | `node_modules/` | Dependencias (se instalan) |
72
+ | `vendor/` | Dependencias PHP (se instalan) |
73
+ | `storage/*.key` | Claves privadas |
74
+ | `*.sqlite` | Bases de datos locales |
75
+
76
+ Verificar que `.gitignore` incluye todos estos patrones.
77
+
78
+ ### 5. Backups Antes de Cambios Destructivos
79
+
80
+ Antes de:
81
+ - Eliminar archivos o carpetas
82
+ - Modificar migraciones existentes
83
+ - Cambiar estructura de base de datos
84
+ - Resetear ramas
85
+
86
+ **Hacer backup:**
87
+ ```bash
88
+ # Backup de archivos
89
+ cp -r carpeta/ carpeta.backup/
90
+
91
+ # Backup de rama
92
+ git branch backup/nombre-rama
93
+ ```
94
+
95
+ ---
96
+
97
+ *La protección del entorno no es opcional. Estas reglas previenen pérdida de trabajo y datos.*
@@ -0,0 +1,142 @@
1
+ # Git Workflow — SpecLeap
2
+
3
+ > Protocolo completo de control de versiones. Todas las reglas son obligatorias.
4
+
5
+ ## Reglas Críticas
6
+
7
+ ### 1. NUNCA push sin autorización
8
+
9
+ ```
10
+ 🚫 PROHIBIDO hacer push directamente sin aprobación explícita del responsable.
11
+ ```
12
+
13
+ Flujo obligatorio:
14
+ 1. Desarrollar en rama local
15
+ 2. Verificar que tests pasan
16
+ 3. Solicitar aprobación
17
+ 4. Solo después de "aprobado" → push
18
+
19
+ ### 2. Reglas de Ramas Protegidas
20
+
21
+ | Rama | Protección | Quién puede mergear |
22
+ |------|-----------|---------------------|
23
+ | `main` | 🔴 Máxima — solo releases | Lead/CTO |
24
+ | `stage` | 🟡 Alta — solo PRs aprobados | Lead + reviewer |
25
+ | `feature/*` | 🟢 Normal — desarrollo activo | Desarrollador asignado |
26
+ | `fix/*` | 🟢 Normal — correcciones | Desarrollador asignado |
27
+
28
+ **NUNCA:**
29
+ - Hacer commit directo a `main`
30
+ - Hacer commit directo a `stage`
31
+ - Forzar push (`--force`) a ramas protegidas
32
+ - Eliminar ramas protegidas
33
+
34
+ ### 3. Crear Ramas desde Stage
35
+
36
+ **Toda rama nueva DEBE crearse desde `stage`:**
37
+
38
+ ```bash
39
+ git checkout stage
40
+ git pull origin stage
41
+ git checkout -b feature/SCRUM-XX-descripcion
42
+ ```
43
+
44
+ **Verificar** que la rama parte de stage:
45
+ ```bash
46
+ git log --oneline stage..HEAD # Debe mostrar solo tus commits
47
+ ```
48
+
49
+ ### 4. Convención de Nombres de Ramas
50
+
51
+ ```
52
+ tipo/TICKET-ID-descripcion-corta
53
+ ```
54
+
55
+ | Tipo | Uso |
56
+ |------|-----|
57
+ | `feature/` | Nueva funcionalidad |
58
+ | `fix/` | Corrección de bug |
59
+ | `refactor/` | Reestructuración sin cambio funcional |
60
+ | `docs/` | Solo documentación |
61
+ | `test/` | Solo tests |
62
+
63
+ **Ejemplos:**
64
+ ```
65
+ feature/SCRUM-23-integracion-jira
66
+ fix/SCRUM-45-error-login-timeout
67
+ refactor/SCRUM-12-optimizar-queries
68
+ ```
69
+
70
+ ### 5. Formato de Commits
71
+
72
+ ```
73
+ TICKET-ID: tipo(alcance): descripción
74
+
75
+ Cuerpo opcional con más detalle.
76
+
77
+ Refs: SPEC-XXX
78
+ ```
79
+
80
+ **Ejemplos:**
81
+ ```
82
+ SCRUM-23: feat(auth): implementar login con 2FA
83
+ SCRUM-45: fix(api): corregir timeout en endpoint /users
84
+ SCRUM-12: refactor(db): optimizar queries de dashboard
85
+ ```
86
+
87
+ **Tipos:** `feat`, `fix`, `refactor`, `docs`, `test`, `chore`, `style`
88
+
89
+ ### 6. Protocolo Antes de Operaciones Git
90
+
91
+ Antes de cualquier operación Git significativa (merge, rebase, push):
92
+
93
+ ```
94
+ 1. VERIFICAR → git status, git log, rama correcta
95
+ 2. PREGUNTAR → ¿Es seguro? ¿Afecta a otros?
96
+ 3. GUARDAR → Stash o commit de trabajo en progreso
97
+ 4. EJECUTAR → La operación Git
98
+ 5. VERIFICAR → Confirmar que todo está correcto
99
+ ```
100
+
101
+ ### 7. Acciones Post-Pull (Laravel)
102
+
103
+ Después de un `git pull` en proyectos Laravel:
104
+
105
+ ```bash
106
+ composer install # Dependencias PHP
107
+ npm install # Dependencias JS
108
+ php artisan migrate # Migraciones pendientes
109
+ php artisan cache:clear # Limpiar cache
110
+ php artisan config:clear # Limpiar config cache
111
+ php artisan view:clear # Limpiar vistas compiladas
112
+ ```
113
+
114
+ ### 8. Pull Requests
115
+
116
+ **Todo PR debe incluir:**
117
+
118
+ - Referencia al ticket: `SCRUM-XX`
119
+ - Referencia a la spec: `SPEC-XXX`
120
+ - Descripción de cambios
121
+ - Checklist de verificación:
122
+
123
+ ```markdown
124
+ ## Checklist
125
+ - [ ] Tests pasan localmente
126
+ - [ ] Spec actualizada si hubo cambios
127
+ - [ ] Sin archivos hardcodeados
128
+ - [ ] Code review solicitado
129
+ - [ ] Documentación actualizada
130
+ ```
131
+
132
+ ### 9. Merge Strategy
133
+
134
+ | Situación | Estrategia |
135
+ |-----------|-----------|
136
+ | Feature → stage | Squash merge (1 commit limpio) |
137
+ | Stage → main | Merge commit (preservar historial) |
138
+ | Hotfix → main | Cherry-pick + merge a stage |
139
+
140
+ ---
141
+
142
+ *Estas reglas son obligatorias para todos los contribuidores del proyecto.*
@@ -0,0 +1,121 @@
1
+ # Protocolo de Inicio de Sesión — SpecLeap
2
+
3
+ > Procedimiento obligatorio al iniciar cualquier sesión de desarrollo.
4
+
5
+ ## Al Iniciar Sesión
6
+
7
+ ### Paso 1: Identificar Proyecto
8
+
9
+ ```
10
+ ¿En qué proyecto vamos a trabajar?
11
+ ```
12
+
13
+ Cargar el contexto del proyecto desde `context/`:
14
+ - `context/brief.md` — Resumen del proyecto
15
+ - `context/tech-stack.md` — Stack y versiones
16
+ - `context/conventions.md` — Patrones y convenciones
17
+
18
+ ### Paso 2: Verificar Estado Git
19
+
20
+ ```bash
21
+ git status # ¿Hay cambios pendientes?
22
+ git branch # ¿En qué rama estamos?
23
+ git log --oneline -5 # ¿Últimos commits?
24
+ git stash list # ¿Hay stashes pendientes?
25
+ ```
26
+
27
+ Si hay trabajo en progreso sin commit → preguntar antes de continuar.
28
+
29
+ ### Paso 3: Identificar Tipo de Tarea
30
+
31
+ | Tipo | Flujo |
32
+ |------|-------|
33
+ | **Nueva feature** | Ticket → Spec → Rama → Implementar → Test → PR |
34
+ | **Fix/Bug** | Ticket → Analizar → Rama → Fix → Test → PR |
35
+ | **Refactor** | Ticket → Spec de cambio → Rama → Refactor → Test → PR |
36
+ | **Documentación** | Actualizar docs/context → Commit → PR |
37
+ | **Investigación** | Documentar hallazgos en context/ |
38
+
39
+ ### Paso 4: Verificar Ticket
40
+
41
+ ```
42
+ ¿Hay un ticket en Jira asociado a esta tarea?
43
+ ```
44
+
45
+ - **Sí** → Usar el ID del ticket (SCRUM-XX) en rama y commits
46
+ - **No** → Crear el ticket antes de empezar
47
+
48
+ **No se empieza desarrollo sin ticket.**
49
+
50
+ ### Paso 5: Verificar Spec
51
+
52
+ ```
53
+ ¿Existe una spec para esta funcionalidad?
54
+ ```
55
+
56
+ - **Sí** → Leerla antes de implementar
57
+ - **No** → Crearla con `openspec new` antes de codificar
58
+ - **Parcial** → Completarla antes de implementar
59
+
60
+ ## Al Finalizar Sesión
61
+
62
+ ### 1. Guardar Progreso
63
+
64
+ ```bash
65
+ git add -A
66
+ git commit -m "SCRUM-XX: wip: descripción del progreso"
67
+ ```
68
+
69
+ ### 2. Actualizar Contexto (si aplica)
70
+
71
+ Si durante la sesión se tomaron decisiones importantes:
72
+ - Actualizar `context/decisions.md`
73
+ - Actualizar specs si cambiaron requisitos
74
+
75
+ ### 3. Documentar Estado
76
+
77
+ Dejar nota clara de:
78
+ - Qué se completó
79
+ - Qué queda pendiente
80
+ - Bloqueos encontrados
81
+
82
+ ## Flujo Completo de Feature
83
+
84
+ ```
85
+ 1. TICKET (Jira)
86
+ └── Crear/asignar ticket SCRUM-XX
87
+
88
+ 2. SPEC (SpecLeap)
89
+ └── openspec new "feature"
90
+ └── Revisar spec → Aprobar
91
+
92
+ 3. PLANIFICACIÓN
93
+ └── openspec ff (genera design + tasks)
94
+ └── Revisar design → Aprobar
95
+
96
+ 4. DESARROLLO
97
+ ├── git checkout stage && git pull
98
+ ├── git checkout -b feature/SCRUM-XX-nombre
99
+ ├── Análisis previo (buscar código existente)
100
+ ├── Implementar siguiendo patrones del proyecto
101
+ └── Tests unitarios + integración
102
+
103
+ 5. VERIFICACIÓN
104
+ └── openspec verify
105
+
106
+ 6. REVIEW
107
+ ├── openspec code-review
108
+ └── PR con referencia a SCRUM-XX y SPEC-XXX
109
+
110
+ 7. MERGE
111
+ └── Squash merge a stage (con aprobación)
112
+
113
+ 8. POST-DESARROLLO
114
+ ├── Actualizar context/ si hubo decisiones
115
+ ├── Actualizar spec si cambió
116
+ └── Cerrar ticket en Jira
117
+ ```
118
+
119
+ ---
120
+
121
+ *Seguir este protocolo garantiza que ninguna tarea se ejecuta sin contexto, sin ticket, ni sin spec.*
@@ -0,0 +1,129 @@
1
+ # SpecLeap Scripts
2
+
3
+ Colección de scripts de automatización para SpecLeap.
4
+
5
+ ---
6
+
7
+ ## 📋 Scripts Disponibles
8
+
9
+ ### `install-git-hooks.sh`
10
+
11
+ **Propósito:** Instalar git hooks de validación automática en proyectos
12
+
13
+ **Uso:**
14
+ ```bash
15
+ # Desde la raíz del proyecto
16
+ bash scripts/install-git-hooks.sh
17
+
18
+ # O especificando ruta
19
+ bash scripts/install-git-hooks.sh /path/to/proyecto
20
+ ```
21
+
22
+ **Qué instala:**
23
+ - **Pre-commit hook** — Validación rápida antes de cada commit
24
+
25
+ **Validaciones incluidas:**
26
+ - ✅ Sintaxis PHP (php -l)
27
+ - ✅ ESLint (JS/TS)
28
+ - ✅ Prettier (formateo)
29
+ - ✅ PHPStan (análisis estático PHP)
30
+ - ✅ PHP-CS-Fixer (estilo PHP)
31
+ - ✅ CONTRATO.md no se modifica (es inmutable)
32
+ - ✅ No hay TODOs críticos
33
+ - ✅ No hay código debug (console.log, var_dump, dd())
34
+
35
+ **Tiempo de ejecución:** <5 segundos
36
+
37
+ **Saltarse validación (NO recomendado):**
38
+ ```bash
39
+ git commit --no-verify -m "mensaje"
40
+ ```
41
+
42
+ ---
43
+
44
+ ### `setup-mcp.sh`
45
+
46
+ **Propósito:** Instalación rápida de dependencias SpecLeap
47
+
48
+ **Uso:**
49
+ ```bash
50
+ bash scripts/setup-mcp.sh
51
+ ```
52
+
53
+ **Instala:**
54
+ - ✅ Cliente Asana (npm global)
55
+ - ✅ 20 Agent Skills TIER 1
56
+ - ✅ Context7 MCP (opcional)
57
+
58
+ **Tiempo:** ~5 minutos
59
+
60
+ ---
61
+
62
+ ### `install-skills.sh`
63
+
64
+ **Propósito:** Instalar Agent Skills manualmente
65
+
66
+ **Uso:**
67
+ ```bash
68
+ bash scripts/install-skills.sh
69
+ ```
70
+
71
+ **Instala:** 20 Agent Skills TIER 1 en `~/.skills/`
72
+
73
+ **Skills incluidas:**
74
+ - 5 skills de seguridad (SAST, STRIDE, OWASP)
75
+ - 3 skills de consistencia (verification-before-completion, DRY)
76
+ - 6 skills de diseño (Vercel-style, Tailwind, shadcn/ui)
77
+ - 6 skills de backend/dev (Laravel, React, TDD, API design)
78
+
79
+ ---
80
+
81
+ ## 🔧 Troubleshooting
82
+
83
+ ### Git hooks no se ejecutan
84
+
85
+ **Causa:** Permisos incorrectos
86
+
87
+ **Solución:**
88
+ ```bash
89
+ chmod +x .git/hooks/pre-commit
90
+ ```
91
+
92
+ ### ESLint no encontrado
93
+
94
+ **Solución:**
95
+ ```bash
96
+ npm install -D eslint
97
+ # o globalmente
98
+ npm install -g eslint
99
+ ```
100
+
101
+ ### PHPStan no encontrado
102
+
103
+ **Solución:**
104
+ ```bash
105
+ composer require --dev phpstan/phpstan
106
+ # o globalmente
107
+ composer global require phpstan/phpstan
108
+ ```
109
+
110
+ ### Hook muy lento
111
+
112
+ **Causa:** Demasiados archivos staged
113
+
114
+ **Solución:** Commit en batches más pequeños
115
+ ```bash
116
+ git add archivo1.js
117
+ git commit -m "feat: archivo 1"
118
+ git add archivo2.js
119
+ git commit -m "feat: archivo 2"
120
+ ```
121
+
122
+ ---
123
+
124
+ ## 📚 Referencias
125
+
126
+ - **Git Hooks:** https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
127
+ - **ESLint:** https://eslint.org
128
+ - **PHPStan:** https://phpstan.org
129
+ - **PHP-CS-Fixer:** https://cs.symfony.com