chore(rag): separate lifecycle migrations from startup

This commit is contained in:
Paco POR-CORREO 2026-09-11 23:10:24 +02:00
parent 551cfe8816
commit 46a70ca145
9 changed files with 122 additions and 14 deletions

View file

@ -16,4 +16,4 @@ COPY --from=build /app/dist ./dist
COPY --from=build /app/migrations ./migrations
COPY public ./public
EXPOSE 3000
CMD ["sh", "-c", "node dist/modules/catalog/migrations.js && node dist/server.js"]
CMD ["node", "dist/server.js"]

View file

@ -4,7 +4,7 @@
**Modulo:** RAG
**Ultima actualizacion:** 2026-09-11
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
**Estado:** Punto 2 implementado localmente; pendiente de migracion y validacion en produccion
**Estado:** Punto 2 desplegado; pendiente de preparar PostgreSQL, migrar el corpus y validar en produccion
Esta guia explica como descubrir y consumir la API. El contrato tecnico completo y canonico se publica en OpenAPI 3.1.1; este documento prioriza el camino rapido, las decisiones de uso y los ejemplos habituales.

View file

@ -4,7 +4,7 @@
**Modulo:** RAG
**Ultima actualizacion:** 2026-09-08
**Ultima modificacion por:** Agente RAG 2
**Estado:** Diseño cerrado, pendiente de implementacion
**Estado:** Implementado y desplegado; pendiente de preparar PostgreSQL y ejecutar la migracion legacy
## Resultado esperado

View file

@ -4,7 +4,7 @@
**Modulo:** RAG
**Ultima actualizacion:** 2026-09-11
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
**Estado:** V1 desplegada en VPS2; ciclo de vida implementado localmente pendiente de migracion productiva
**Estado:** V1 desplegada en VPS2; ciclo de vida desplegado, pendiente de configurar PostgreSQL y migrar el corpus
---
@ -246,15 +246,21 @@ Ese archivo no debe versionarse porque contiene secretos reales.
- el estado persistente vectorial vive en `qdrant`
- desde el punto 2, el catalogo de fuentes y versiones vive en PostgreSQL
### Arranque con migraciones
### Migraciones SQL separadas del arranque
La imagen arranca ejecutando primero:
El servicio RAG arranca únicamente con:
```bash
node dist/modules/catalog/migrations.js && node dist/server.js
node dist/server.js
```
Si `POSTGRES_URL` no esta configurada, el migrador informa que omite migraciones. Si PostgreSQL esta configurado y una migracion falla o cambia su checksum, el servicio no debe completar el arranque.
Las migraciones SQL se ejecutan de forma explicita cuando corresponda:
```bash
npm run migrate:lifecycle
```
El comando comprueba `rag_schema_migrations`, aplica solo archivos nuevos y detiene el proceso si detecta un checksum cambiado. Un reinicio o deploy normal no modifica el esquema.
### Secuencia operativa del punto 2

View file

@ -10,6 +10,75 @@
## Registro de sesion
### 2026-09-11 - Agente RAG 2 - Preparacion PostgreSQL
**Modelo:** gpt-5.6-luna
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Inspeccion de solo lectura completada por SSH en VPS2 usando el contenedor `ia_servicios_postgres-ia-servicios`.
- Creada la base `db_rag` y el usuario dedicado `usr_rag`, propietario de su base y con permisos completos sobre su esquema y objetos futuros.
- Verificado el acceso de `usr_rag` por TCP contra `db_rag`.
- Separada la ejecucion de migraciones SQL del arranque normal del servicio RAG.
- Actualizados el procedimiento de despliegue y los paquetes de mejoras diferidas.
**Validacion:**
- `npm run check` correcto.
- `npm test` correcto: 25/25.
- `npm run build` correcto.
- `git diff --check` correcto.
**Estado final:**
- PostgreSQL preparado a nivel de base y usuario.
- Pendiente configurar la conexion en EasyPanel, ejecutar explicitamente el esquema y verificar produccion.
- La contraseña se entrega fuera de este historial y no se persiste en documentacion.
**Archivos modificados:**
- `Dockerfile`
- `package.json`
- `docs/DESPLIEGUE_EASYPANEL.md`
- `docs/PENDIENTES_RAG.md`
- `docs/HISTORIAL_SESIONES.md`
### 2026-09-11 - Agente RAG 2 - Mejoras diferidas
**Modelo:** openai/gpt-6-astra
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Rol:** Continuidad operativa y evolutiva del RAG.
- Añadido paquete posterior de seguimiento del corpus por API y frontend al punto 2.
- Añadido paquete posterior de backups manuales al punto 7, limitado a RAG y Qdrant; la base de n8n queda fuera.
- Retirados los backups habituales del prerrequisito bloqueante PostgreSQL, conservando el snapshot propio de la migracion legacy.
- Estado: mejoras diferidas sin urgencia; preparacion PostgreSQL sigue como tarea actual.
- Archivos: `RAG/docs/PENDIENTES_RAG.md`, `RAG/docs/HISTORIAL_SESIONES.md`, `docs/HISTORIAL_SESIONES.md`.
### 2026-09-11 - Agente RAG 2
**Modelo:** gpt-5.6-luna
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Confirmado que PostgreSQL se introdujo con el punto 2 y que no existia una URL previa del RAG que se hubiera perdido.
- Detectada la omision de configuracion operativa de la nueva dependencia en EasyPanel.
- Documentado el incidente en `docs/REGISTRO_SITUACIONES.md`.
- Creado en `PENDIENTES_RAG.md` el prerrequisito bloqueante de preparar PostgreSQL, crear/verificar esquema, configurar conexion, revisar operacion y cargar las fuentes actuales.
- Actualizados los estados de la documentacion del punto 2.
**Estado final:**
- No se ejecutaran migraciones legacy, pruebas de ciclo de vida ni OCR hasta completar el prerrequisito PostgreSQL.
**Archivos modificados:**
- `RAG/docs/PENDIENTES_RAG.md`
- `RAG/docs/API_RAG.md`
- `RAG/docs/INGESTA.md`
- `RAG/docs/SISTEMA_RAG_BASE.md`
- `RAG/docs/CONTRATO_CICLO_VIDA_Y_OCR.md`
- `RAG/docs/DESPLIEGUE_EASYPANEL.md`
- `RAG/docs/HISTORIAL_SESIONES.md`
- `docs/REGISTRO_SITUACIONES.md`
### 2026-04-06 - Agente RAG 2
**Modelo:** gpt-5.4

View file

@ -4,7 +4,7 @@
**Modulo:** RAG
**Ultima actualizacion:** 2026-09-11
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
**Estado:** Punto 2 implementado localmente; pendiente de migracion y validacion en produccion
**Estado:** Punto 2 desplegado; pendiente de preparar PostgreSQL, migrar el corpus y validar en produccion
---

View file

@ -1,6 +1,6 @@
# Pendientes priorizados del RAG
**Ultima actualizacion:** 2026-09-08
**Ultima actualizacion:** 2026-09-11
**Responsable de la priorizacion:** Usuario
**Estado:** Activo
@ -17,7 +17,20 @@ Este documento es la fuente canonica del orden de trabajo pendiente del modulo R
## 2. Ciclo de vida del conocimiento
**Diseño:** Contrato de implementacion cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](./CONTRATO_CICLO_VIDA_Y_OCR.md). Pendiente de implementar y validar en produccion antes de iniciar el punto 3.
**Estado:** Implementado y desplegado; bloqueado por la preparacion operativa de PostgreSQL y la migracion controlada del corpus.
El contrato de implementacion esta cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](./CONTRATO_CICLO_VIDA_Y_OCR.md). Antes de ejecutar las pruebas de migracion o activar el ciclo de vida hay que completar este prerrequisito:
### Prerrequisito bloqueante: preparar PostgreSQL
- Confirmar que existe la instancia y la base de datos que usara RAG en EasyPanel.
- Obtener el hostname interno, puerto, nombre de base de datos, usuario y requisitos SSL.
- Configurar `POSTGRES_URL`, `POSTGRES_SSL` y `LIFECYCLE_ADMIN_TOKEN` en el servicio RAG.
- Arrancar las migraciones del esquema y verificar las tablas, permisos y `SELECT 1` desde RAG.
- Revisar que no falten variables, red interna, credenciales, almacenamiento persistente o permisos de migracion. La configuracion de backups queda diferida al paquete del punto 7.
- Inventariar las fuentes actuales de Qdrant y preparar su carga en el catalogo PostgreSQL.
No ejecutar la migracion legacy, activar enforcement ni iniciar OCR hasta cerrar este prerrequisito.
- Crear un catalogo de fuentes y versiones ingeridas.
- Saber que documento esta vigente, obsoleto, reemplazado o pendiente de reingesta.
@ -25,6 +38,16 @@ Este documento es la fuente canonica del orden de trabajo pendiente del modulo R
- Registrar fecha de indexacion, modelo de embeddings, proveedor y version del contenido.
- Facilitar el reemplazo o rollback de una fuente sin depender de operaciones manuales dificiles de auditar.
### Paquete de mejora posterior: seguimiento del corpus en API y frontend
**Prioridad:** Diferida, sin urgencia; no bloquea la preparacion de PostgreSQL ni el cierre funcional del punto 2. Retomar al trabajar en el frontend de gestion.
- Exponer por API los documentos que componen cada version de una fuente.
- Exponer el historial de intentos de ingesta, resultados y errores.
- Incluir fechas y detalles de error de las versiones en las respuestas de la API.
- Ampliar la vista basica del playground a una gestion de fuentes, documentos, versiones e ingestas con su estado e historial.
- Incorporar al frontend las operaciones ya disponibles por API: activacion, rollback, reintento y purga.
## 3. OCR integrado en la ingesta
**Diseño:** Contrato de implementacion cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](./CONTRATO_CICLO_VIDA_Y_OCR.md). Su ejecucion queda bloqueada hasta completar el punto 2.
@ -68,6 +91,16 @@ Este documento es la fuente canonica del orden de trabajo pendiente del modulo R
- Revisar copias temporales o backups asociados a la migracion antes de eliminarlos.
- Mantener un procedimiento fiable de despliegue, verificacion y rollback.
### Paquete de mejora posterior: backups manuales del RAG
**Prioridad:** Diferida, sin urgencia; no bloquea la preparacion actual de PostgreSQL. Sin programacion automatica.
- Configurar el destino de backups y diagnosticar el error observado al crearlo en EasyPanel.
- Preparar copias manuales de la nueva base del RAG y snapshots de Qdrant; `db_gestion_flujos_n8n` es ajena a este alcance.
- Definir una ventana sin escrituras para obtener copias coherentes de ambos almacenes.
- Documentar y comprobar la restauracion, incluyendo la recuperacion de los permisos necesarios.
- Este paquete difiere la solucion habitual de backups; el snapshot previo exigido por la migracion legacy sigue formando parte de esa operacion.
## 8. Sistema de evaluacion
- Revisar periodicamente los logs de evaluacion almacenados en Qdrant.

View file

@ -4,7 +4,7 @@
**Modulo:** RAG
**Ultima actualizacion:** 2026-09-11
**Ultima modificacion por:** Agente RAG 2
**Estado:** V1 operativa; ciclo de vida implementado localmente y pendiente de despliegue
**Estado:** V1 operativa; ciclo de vida desplegado y pendiente de preparar PostgreSQL y migrar el corpus
---
@ -111,7 +111,7 @@ Cada fuente dispone de versiones controladas en PostgreSQL, mientras Qdrant cons
Esto permite actualizar una fuente sin mezclar contenido antiguo y nuevo, detectar ingestas identicas, conservar versiones anteriores y hacer rollback sin recalcular embeddings. Los parametros de consulta actuales no cambian.
Esta mejora esta implementada y validada localmente. Falta desplegarla y registrar el corpus existente como version inicial antes de activarla en produccion.
Esta mejora esta implementada y desplegada. Falta preparar PostgreSQL, registrar el corpus existente como version inicial y validarla antes de activar enforcement en produccion.
Los pendientes vigentes, su prioridad y su estado se mantienen en [`PENDIENTES_RAG.md`](./PENDIENTES_RAG.md).

View file

@ -6,7 +6,7 @@
"scripts": {
"dev": "tsx watch src/server.ts",
"build": "tsc -p tsconfig.json",
"start": "node dist/modules/catalog/migrations.js && node dist/server.js",
"start": "node dist/server.js",
"migrate:lifecycle": "node dist/modules/catalog/migrations.js",
"migrate:legacy:lifecycle": "node dist/scripts/migrate-legacy-lifecycle.js",
"test": "NODE_ENV=test tsx --test tests/**/*.test.ts",