# Proceso de Release (Btec Core)

## Canary recomendado

1. Crear/ajustar release en `btec-core/releases/vX.Y.Z`.
2. Ejecutar `php -l` sobre archivos del core.
3. Identificar módulos `predeploy required` incluidos en la release.
4. Desplegar archivos cliente requeridos por esos módulos:
   - wrappers
   - helpers en `func/`
   - parches en `layout/`
5. Enlazar cliente canary:
   - `bin/link-client-release.sh /home/bitnami/htdocs/desert/btec_v1 vX.Y.Z`
6. Probar UI y flujo de módulos.
7. Validar activación desde `modulos-btec.php`.
8. Promover `current`:
   - `bin/promote-current.sh vX.Y.Z`
9. Actualizar resto de clientes por lotes.

## Módulos `predeploy required`

Un módulo es `predeploy required` cuando necesita archivos físicos en el cliente y no debe depender de escritura web sobre PHP.

Ejemplos típicos:

- wrappers como `modulos-btec.php`, `notificaciones.php`, `notification.php`
- helpers como `func/notifications.php`
- parches de `layout/navbar.php` o `layout/menu.php`
- endpoints públicos usados por el sitio web

Regla operativa:

1. Primero se despliega filesystem.
2. Después se activa en `modulos-btec.php`.

No invertir ese orden.

## Caso documentado: Notificaciones Internas

`notificaciones-internas` debe tratarse como `predeploy required`.

Archivos mínimos por cliente:

- `func/notifications.php`
- `notificaciones.php`
- `notification.php`
- `layout/navbar.php`

Riesgo si se omite el predeploy:

- el instalador desde UI puede fallar por permisos del proceso web
- el módulo queda a medias: tablas creadas, pero sin interfaz ni bootstrap en navbar

## Checklist de release por módulos

- release creada en `btec-core/releases/vX.Y.Z`
- `php -l` del core sin errores
- wrappers/parches cliente listos si aplica
- cliente canary enlazado
- instalación probada desde `modulos-btec.php`
- rollback claro si el módulo toca `layout/`
- promoción a resto de clientes por lote

## Clientes pinneados vs current

- `pinneado` (recomendado): cada cliente apunta a una release específica.
- `current`: útil para nuevos clientes o entornos internos.
