# Core update y paso a preproduccion

Fecha de referencia: 1 de abril de 2026.

Esta guia describe el flujo actual para generar un `core-update`, llevarlo a preproduccion y validarlo antes de seguir con plugins o produccion.

## Que es un core update

Es un ZIP del nucleo completo de la intranet, generado desde una instalacion fuente y aplicable sobre otra instalacion compatible.

El paquete contiene, como minimo:

- `core-update.json`
- `payload/`
- `payload-manifest.json`

Y opcionalmente:

- `migrations/001_manual.sql`
- `GUIA-ACTUALIZACIONES-CORE.md`
- `GUIA-ACTUALIZACIONES-CORE.html`
- `docs/`

Codigo relacionado:

- [`../base/updates/index.php`](../base/updates/index.php)
- [`../common/plugin_store.php`](../common/plugin_store.php)

## Que debe estar bien antes de generarlo

Checklist minimo:

- login correcto
- dashboard correcto
- instalador funcional
- plugin builder y gestor de plugins operativos
- documentacion base actualizada en `docs/`
- cambios del nucleo revisados

## Configuracion necesaria en la maquina que genera

Ruta recomendada:

- `/etc/intranet/intranet-config.php`

Ejemplo:

```php
<?php

define('CORE_UPDATE_BUILD_ENABLED', true);
define('PLUGIN_STORE_BASE_URL', 'https://sede.example.org/plugin-store/');
define('PLUGIN_STORE_PUBLISH_URL', 'https://sede.example.org/plugin-store/api/publish-core-update.php');
define('PLUGIN_STORE_PUBLISH_TOKEN', 'AQUI_EL_TOKEN_REAL');
```

Fallback legacy:

- `/etc/csif/intranet-config.php`

## Que muestra la pantalla de actualizaciones

La pantalla permite:

- ver la version actual
- ver builds locales
- ver actualizaciones remotas
- subir un ZIP
- aplicar un ZIP local o remoto
- generar paquete
- generar y publicar en Store

Tambien incluye diagnostico sobre:

- si la generacion esta habilitada
- host detectado
- version local
- ultima version remota

## Construccion del paquete

La version destino se propone con formato:

- `YYYY.MM.DD.R`

Ejemplos:

- `2026.04.01.1`
- `2026.04.01.2`

Durante la generacion, el sistema puede incluir:

- descripcion del cambio
- SQL manual
- guia Markdown y HTML
- `docs/`

## Que incluye y que preserva

El ZIP copia el nucleo al `payload/`, pero al aplicarse respeta contenido local sensible.

Puntos importantes:

- se puede preservar `styles/css/theme-vars.css`
- se pueden preservar logos e imagenes locales
- `apps/` se conserva
- `plugins/` se conserva
- `config/installed.lock` se conserva

La idea es actualizar el nucleo sin machacar contenido local de cada sede.

## SQL dentro del core update

El flujo actual admite SQL manual adjunto:

- se empaqueta como `migrations/001_manual.sql`
- puede ejecutarse al aplicar el paquete si se marca la opcion correspondiente

Recomendacion:

- usa SQL de core solo para cambios claros del nucleo
- deja el SQL de plugins dentro de su propio ciclo
- documenta siempre si la build incluye SQL

## Que hace la aplicacion al actualizar

Al aplicar un core update, el sistema:

1. extrae el ZIP a un directorio temporal
2. valida `core-update.json`
3. localiza `payload/`
4. calcula reglas de preservacion
5. crea un backup ZIP previo
6. copia archivos al destino
7. opcionalmente ejecuta SQL
8. registra la operacion

## Flujo recomendado

### Desarrollo

1. cerrar cambios del nucleo
2. actualizar `docs/`
3. revisar diagnostico
4. generar paquete
5. publicar en Store si procede

### Preproduccion

Antes de aplicar:

- backup de archivos
- backup de base de datos
- ventana de mantenimiento

Ejemplo:

```bash
mysqldump -u intranet -p intranet > preproduccion_antes_core_update.sql
```

Despues:

1. entrar en `Administracion > Actualizaciones`
2. subir el ZIP o elegir uno remoto
3. revisar preservacion de tema e imagenes
4. decidir si se aplicara SQL
5. ejecutar la actualizacion

## Validacion posterior

Revisa:

- `login.php`
- `dashboard.php`
- `Administracion > Actualizaciones`
- `Administracion > Plugins`
- estilos, logos y colores
- modulos tocados recientemente

Tambien conviene revisar:

- logs de Apache
- logs de PHP-FPM
- logs de MariaDB si hubo SQL

## Riesgos tipicos

### Generar la build demasiado pronto

- empaquetar un nucleo todavia inestable

### Incluir SQL sin documentarlo

- diferencias entre entornos
- cambios inesperados en BD

### Sobrescribir contenido local

- perder tema, logos o personalizaciones

Mitigacion:

- revisar opciones de preservacion
- conservar backup previo

## Relacion con otras guias

- [instalacion-intranet-en-ubuntu.md](./instalacion-intranet-en-ubuntu.md)
- [entorno-ubuntu-24-mariadb-php84.md](./entorno-ubuntu-24-mariadb-php84.md)
- [pluginbuilder-y-ciclo-de-vida-de-plugins.md](./pluginbuilder-y-ciclo-de-vida-de-plugins.md)
