═════════════════════════════════════════════════════════════════════════════════
   LICENSE ENFORCEMENT: v1.3.168 - VALIDACIÓN OBLIGATORIA
═════════════════════════════════════════════════════════════════════════════════

## CAMBIO IMPORTANTE

A partir de v1.3.168, la validación de licencia es **MÁS ESTRICTA**:

❌ ANTES (v1.3.142):
- Sin credenciales solo se bloqueaba si LICENSE_STRICT=true
- Podía ejecutar sin licencia con variable de entorno

✅ DESPUÉS (v1.3.168):
- Sin credenciales o sin licencia válida = SIEMPRE BLOQUEA
- No hay excepciones ni modo "gracia"
- License validation es OBLIGATORIA


═════════════════════════════════════════════════════════════════════════════════
## COMPORTAMIENTO AHORA (v1.3.168)
═════════════════════════════════════════════════════════════════════════════════

### ESCENARIO 1: Sin credenciales configuradas

```bash
$ export HAKA_LICENSE_EMAIL=""  # O no configurado
$ export HAKA_LICENSE_KEY=""    # O no configurado
$ haka-cli run features/
```

RESULTADO:
```
❌ HAKA_LICENSE_EMAIL o HAKA_LICENSE_KEY no configuradas
╔══════════════════════════════════════════════════════════╗
║  CREDENCIALES DE LICENCIA NO CONFIGURADAS               ║
║  Agrega: HAKA_LICENSE_EMAIL, HAKA_LICENSE_KEY en .env   ║
║  Contacto: contacto@hakalab.com                          ║
╚══════════════════════════════════════════════════════════╝

❌ LICENCIA NO VÁLIDA - No se puede ejecutar sin licencia habilitada.
   Configura HAKA_LICENSE_EMAIL y HAKA_LICENSE_KEY en tu .env

[Process exits with error]
```

**No se ejecuta nada.**


### ESCENARIO 2: Credenciales configuradas pero licencia bloqueada

```bash
$ export HAKA_LICENSE_EMAIL="user@company.com"
$ export HAKA_LICENSE_KEY="invalid_key_12345"
$ haka-cli run features/
```

RESULTADO:
```
🔍 Validando licencia con servicio Hakalab...
❌ Licencia bloqueada o inválida
╔══════════════════════════════════════════════════════════╗
║  LICENCIA NO VÁLIDA                                      ║
║  Comunícate con: contacto@hakalab.com                    ║
╚══════════════════════════════════════════════════════════╝

❌ LICENCIA NO VÁLIDA - No se puede ejecutar sin licencia habilitada.

[Process exits with error]
```

**No se ejecuta nada.**


### ESCENARIO 3: Licencia válida (primer acceso)

```bash
$ export HAKA_LICENSE_EMAIL="user@company.com"
$ export HAKA_LICENSE_KEY="valid_key_xyz789"
$ haka-cli run features/
```

RESULTADO:
```
🔍 Validando licencia con servicio Hakalab...
✅ Licencia válida - Empresa: Acme Corp

✅ Tests ejecutándose...
```

**Se ejecutan los tests. El resultado se cachea.**


### ESCENARIO 4: Licencia cacheda (dentro de 10 días)

```bash
$ export HAKA_LICENSE_EMAIL="user@company.com"
$ export HAKA_LICENSE_KEY="valid_key_xyz789"
$ haka-cli run features/  # 2do, 3er, ... ejecutar (dentro de 10 días)
```

RESULTADO:
```
✅ Licencia válida (en caché - próxima validación en 10 días)

✅ Tests ejecutándose...
```

**Se usan de inmediato, sin llamar a API.**


### ESCENARIO 5: Sin conexión + caché válido

```bash
$ export HAKA_LICENSE_EMAIL="user@company.com"
$ export HAKA_LICENSE_KEY="valid_key_xyz789"
$ haka-cli run features/  # Sin internet
```

RESULTADO:
```
🔍 Validando licencia con servicio Hakalab...
⚠️ No hay conexión con servicio. Intentando usar validación anterior...
✅ Usando caché anterior (sin conexión, pero caché válido)

✅ Tests ejecutándose...
```

**Se ejecutan porque tiene caché válido del último acceso exitoso.**


### ESCENARIO 6: Sin conexión + sin caché (licencia nunca validada)

```bash
$ export HAKA_LICENSE_EMAIL="user@company.com"
$ export HAKA_LICENSE_KEY="valid_key_xyz789"
$ haka-cli run features/  # Primera ejecución, sin internet
```

RESULTADO:
```
🔍 Validando licencia con servicio Hakalab...
⚠️ No hay conexión con servicio. Intentando usar validación anterior...
❌ Sin conexión con servicio y sin caché anterior. No se puede ejecutar.

❌ LICENCIA NO VÁLIDA - No se puede ejecutar sin licencia habilitada.

[Process exits with error]
```

**Se bloquea porque:**
- No hay conexión
- No hay caché anterior (nunca fue validada)


═════════════════════════════════════════════════════════════════════════════════
## ARCHIVOS MODIFICADOS
═════════════════════════════════════════════════════════════════════════════════

### 1. hakalab_framework/core/license_validator.py

```python
# CAMBIO: Validación sin excepciones

def validate(self) -> bool:
    # ⚠️ CRÍTICO: Sin credenciales → SIEMPRE bloquear
    if not self.license_email or not self.license_key:
        return False  # ← No hay forma de continuar
    
    # Si sin conexión y sin caché → BLOQUEAR
    if result['status'] == 'network_error':
        if not valid_cache:
            return False  # ← Se bloquea inmediatamente
```

### 2. hakalab_framework/behave_plugin.py

```python
# CAMBIO: Validación obligatoria (sin LICENSE_STRICT)

def before_all(context):
    license_valid = validate_license_on_startup()
    if not license_valid:  # ← SIEMPRE bloquea (sin condición)
        raise Exception("❌ LICENCIA NO VÁLIDA...")
```

ANTES:
```python
if not license_valid and os.getenv('LICENSE_STRICT', 'false') == 'true':
    # Solo bloqueaba si LICENSE_STRICT=true
```


═════════════════════════════════════════════════════════════════════════════════
## CASOS DE USO
═════════════════════════════════════════════════════════════════════════════════

### USUARIO: Empresa con licencia válida

✅ Primer acceso con internet:
  - API valida licencia
  - Se cachea por 10 días
  - Tests se ejecutan

✅ Accesos siguientes (10 días):
  - Usa caché (sin API call)
  - Tests se ejecutan rápido

✅ Sin internet en cliente:
  - Usa caché anterior válido
  - Tests se ejecutan

✅ Sin conexión + caché expirado:
  - API falla
  - Sin caché anterior → BLOQUEA


### USUARIO: Sin licencia

❌ Siempre se bloquea:
  - Sin credenciales → BLOQUEA
  - Credenciales inválidas → BLOQUEA
  - Sin conexión en primer acceso → BLOQUEA

💡 SOLUCIÓN:
  - Comprar/renovar licencia
  - Configurar credenciales correctas


═════════════════════════════════════════════════════════════════════════════════
## VARIABLE REMOVIDA: LICENSE_STRICT
═════════════════════════════════════════════════════════════════════════════════

En v1.3.142:
```bash
LICENSE_STRICT=true  # Habilitaba validación obligatoria
```

En v1.3.168:
```bash
# LICENSE_STRICT ya no existe
# La validación SIEMPRE es obligatoria
```

**NO es compatible hacia atrás** pero es el comportamiento correcto:
- Antes: podías ejecutar sin licencia
- Ahora: nunca sin licencia


═════════════════════════════════════════════════════════════════════════════════
## CONFIGURACIÓN REQUERIDA
═════════════════════════════════════════════════════════════════════════════════

En tu archivo `.env`:

```bash
# OBLIGATORIO (sin estos, se bloquea)
HAKA_LICENSE_EMAIL=tu_email@empresa.com
HAKA_LICENSE_KEY=tu_clave_de_licencia

# OPCIONAL (si es necesario debugging)
LOGGING_LEVEL=DEBUG
```

IMPORTANTE:
- HAKA_LICENSE_EMAIL no puede estar vacío
- HAKA_LICENSE_KEY no puede estar vacío
- Si faltan o están vacíos → BLOQUEA inmediatamente


═════════════════════════════════════════════════════════════════════════════════
## FLUJO DE VALIDACIÓN (v1.3.168)
═════════════════════════════════════════════════════════════════════════════════

```
┌─────────────────────────────────────┐
│  Iniciando framework (before_all)   │
└────────┬────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────┐
│  ¿Tienen credenciales configuradas? │
└────┬──────────────────────────┬─────┘
     │ NO                       │ SÍ
     │                          │
     ▼                          ▼
  ❌ BLOQUEA             ┌───────────────────────┐
                         │ ¿Es necesario validar?│
                         │ (> 10 días o sin caché)
                         └────┬──────────────┬───┘
                              │ NO (usar caché)
                              │              │ SÍ (consultar API)
                              │              │
                              ▼              ▼
                         ┌─────────┐  ┌─────────────────┐
                         │ Usa     │  │ Llamada a API   │
                         │ caché   │  │ de licencia     │
                         └────┬────┘  └────┬────────┬───┘
                              │            │        │
                              ▼            ▼        ▼
                        ┌──────────────┐  ✅        ❌ ó error red
                        │ ¿Caché es    │           │
                        │ válido?      │      ┌────┴────┐
                        └────┬─────┬───┘      │          │
                             │ SÍ │ NO   ✅ Valida   Error conexión
                             │    │       │          │
                             ▼    ▼       ▼          ▼
                            ✅   ❌      Cachea    ¿Caché prev?
                                                │    │
                                                ✅    ❌
                                                     │
                                                     ▼
                                                    ❌ BLOQUEA

✅ = Tests se ejecutan
❌ = Tests NO se ejecutan (proceso termina con error)
```


═════════════════════════════════════════════════════════════════════════════════
## IMPACTO EN USUARIOS
═════════════════════════════════════════════════════════════════════════════════

### ANTES (v1.3.142)
- Podían ejecutar sin licencia si LICENSE_STRICT no estaba set
- Testing sin licencia = posible

### DESPUÉS (v1.3.168)
- SIEMPRE necesita licencia válida
- Cualquier ejecución requiere validación exitosa
- Framework es más seguro


═════════════════════════════════════════════════════════════════════════════════
## SOPORTE Y TROUBLESHOOTING
═════════════════════════════════════════════════════════════════════════════════

### Error: "HAKA_LICENSE_EMAIL o HAKA_LICENSE_KEY no configuradas"

**Solución:**
```bash
# En tu .env (crear si no existe)
HAKA_LICENSE_EMAIL=user@company.com
HAKA_LICENSE_KEY=ABC123XYZ789...
```

### Error: "LICENCIA NO VÁLIDA"

**Verificar:**
- Email exactamente igual al registrado
- Key exactamente igual (incluir espacios/caracteres)
- License no ha expirado
- License no está revocada

**Contacto:** contacto@hakalab.com


### Error: "Sin conexión con servicio y sin caché"

**Solución:**
1. Primer acceso debe ser con internet
2. Se cachea automáticamente
3. Luego funciona offline


═════════════════════════════════════════════════════════════════════════════════
VERSION: 1.3.168
CHANGE TYPE: Breaking Change (comportamiento más estricto)
STATUS: ACTIVE
═════════════════════════════════════════════════════════════════════════════════
