From 46a70ca1458e45ce9b80320f1d919268ef6640b5 Mon Sep 17 00:00:00 2001 From: Paco POR-CORREO Date: Fri, 11 Sep 2026 23:10:24 +0200 Subject: [PATCH] chore(rag): separate lifecycle migrations from startup --- Dockerfile | 2 +- docs/API_RAG.md | 2 +- docs/CONTRATO_CICLO_VIDA_Y_OCR.md | 2 +- docs/DESPLIEGUE_EASYPANEL.md | 16 ++++--- docs/HISTORIAL_SESIONES.md | 69 +++++++++++++++++++++++++++++++ docs/INGESTA.md | 2 +- docs/PENDIENTES_RAG.md | 37 ++++++++++++++++- docs/SISTEMA_RAG_BASE.md | 4 +- package.json | 2 +- 9 files changed, 122 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index e06f719..98012ae 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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"] diff --git a/docs/API_RAG.md b/docs/API_RAG.md index 26f7717..b73755f 100644 --- a/docs/API_RAG.md +++ b/docs/API_RAG.md @@ -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. diff --git a/docs/CONTRATO_CICLO_VIDA_Y_OCR.md b/docs/CONTRATO_CICLO_VIDA_Y_OCR.md index a7a5fb5..efbc87b 100644 --- a/docs/CONTRATO_CICLO_VIDA_Y_OCR.md +++ b/docs/CONTRATO_CICLO_VIDA_Y_OCR.md @@ -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 diff --git a/docs/DESPLIEGUE_EASYPANEL.md b/docs/DESPLIEGUE_EASYPANEL.md index f8420cc..5a1967c 100644 --- a/docs/DESPLIEGUE_EASYPANEL.md +++ b/docs/DESPLIEGUE_EASYPANEL.md @@ -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 diff --git a/docs/HISTORIAL_SESIONES.md b/docs/HISTORIAL_SESIONES.md index b776bc7..a5a693f 100644 --- a/docs/HISTORIAL_SESIONES.md +++ b/docs/HISTORIAL_SESIONES.md @@ -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 diff --git a/docs/INGESTA.md b/docs/INGESTA.md index 601c734..85f4c11 100644 --- a/docs/INGESTA.md +++ b/docs/INGESTA.md @@ -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 --- diff --git a/docs/PENDIENTES_RAG.md b/docs/PENDIENTES_RAG.md index 5448ccd..9fff8c9 100644 --- a/docs/PENDIENTES_RAG.md +++ b/docs/PENDIENTES_RAG.md @@ -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. diff --git a/docs/SISTEMA_RAG_BASE.md b/docs/SISTEMA_RAG_BASE.md index 44166b8..851e14f 100644 --- a/docs/SISTEMA_RAG_BASE.md +++ b/docs/SISTEMA_RAG_BASE.md @@ -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). diff --git a/package.json b/package.json index 4b47062..84284b9 100644 --- a/package.json +++ b/package.json @@ -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",