rag-service/docs/HISTORIAL_SESIONES.md

773 lines
52 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Historial de sesiones
**Proyecto:** Workspace de tools IA para empresas
**Modulo:** RAG
**Ultima actualizacion:** 2026-09-16
**Ultima modificacion por:** Subagente Actualizacion Operativa OCR
**Estado:** Activo
---
## Registro de sesion
### 2026-09-16 - Subagente Actualizacion Operativa OCR
**Agent:** Subagente Actualizacion Operativa OCR · **Model:** ollama/glm-5.3:cloud · **Session:** `ses_f5662ce40ffepxlOg2W0v9zrYv` (subagente de `ses_29bdbd003ffeLrLjUlFgnp08Y7`)
**Responsibility:** Corregir el estado operativo verificado no secreto de EasyPanel/RAG/OCR y fijar el orden seguro de despliegue, sin commit ni push (el agente principal los entrega despues).
**Work:** Actualizado `docs/OPERATIVA.md` con fecha 2026-09-16 y estado verificado: `KNOWLEDGE_LIFECYCLE_ENFORCED=true` (eliminada la redaccion obsoleta de `false`/pendiente de activar), `OCR_INGEST_ENABLED=false`, `OCR_SERVICE_URL` hacia el servicio privado `ocr-service`, token compartido OCR configurado sin revelar su valor, volumen duradero `/data/ingestions`, volumen transitorio `/data/jobs` y 29 variables del RAG verificadas sin duplicados. Sustituido el orden obsoleto por el orden seguro real: Git main, OCR primero con verificacion live/ready + trabajo real autenticado con resultado ligado por integridad y limpieza, RAG segundo con flag en false y verificacion nativa, solo entonces `OCR_INGEST_ENABLED=true` con nuevo deploy, y PDF de FacturaTech como candidato de revision no activado con `sourceRef` logico `Errores Junio 2026 - OCR verificado.md` (aprobacion humana obligatoria). Conservado el rollback de emergencia (OCR en false, deploy RAG, version activa intacta) y documentada la eliminacion transitoria de filas/PDF/resultados del OCR tras la transferencia duradera o automaticamente a las 24 horas. La advertencia de rotacion de credenciales expuestas se mantiene y no se afirma que se hayan rotado.
**Redaction:** Ningun secreto, token, URL con credenciales, huella, hash ni valor leido de `.env*` fue incluido; no se accedio a `.env*`.
**Validation:** Consistencia estructural del documento verificada; busqueda de redaccion obsoleta de lifecycle en `false` o de orden antiguo sin resultados; comprobacion de espacios limitada a los dos documentos editados.
**Files:** `docs/OPERATIVA.md` (corregido), `docs/HISTORIAL_SESIONES.md` (esta entrada).
---
### 2026-09-15 - Subagente Document RAG Environment
**Agent:** Subagente Document RAG Environment · **Model:** ollama/glm-5.3:cloud · **Session:** `ses_f5aa57a88ffeYnnL4d6X1gXTiu`
**Responsibility:** Crear documentacion operativa segura del entorno RAG/EasyPanel, con redaccion estricta de secretos y plan de salida por etapas del OCR derivado del codigo real.
**Work:** Creado `docs/OPERATIVA.md` con lista rapida de EasyPanel, accion de rotacion de credenciales expuestas en chat (sin afirmar que ya se hayan rotado), configuracion actual no secreta (incluye `KNOWLEDGE_LIFECYCLE_ENFORCED=false` e `INGEST_WRITES_ENABLED=true`), nombres de variables secretas con la nota "Configurada en EasyPanel; nunca copiarla en documentacion", y salida por etapas del OCR: `OCR_INGEST_ENABLED=false` antes del deploy, requisitos previos (servicio OCR privado, `OCR_INTERNAL_TOKEN`, `OCR_SERVICE_URL`, volumen `/data/ingestions`), limites opcionales con sus valores por defecto del codigo (`OCR_MAX_UPLOAD_BYTES=52428800`, `OCR_MAX_PAGES=100`, `OCR_PAGE_TIMEOUT_MS=60000`, `OCR_TOTAL_TIMEOUT_MS=900000`) y orden seguro de activacion con desactivacion en caso de fallo conservando el corpus activo. Documentado que el deploy es manual (boton `Deploy` de EasyPanel) y que no existe accion automatizada documentada.
**Redaction:** Ningun valor secreto, parcial, hash ni huella fue copiado, mostrado o persistido. No se accedio a `.env*`, `llaves`, `backups/` ni `docs.zip`.
**Validation:** Verificacion estructural del documento creado y comprobacion de espacios en Markdown. Inspeccion del `git diff` confirmo que no contiene ningun valor de las variables secretas.
**Files:** `docs/OPERATIVA.md` (nuevo), `docs/HISTORIAL_SESIONES.md` (esta entrada).
---
### 2026-09-16 - Subagente Implementacion Runtime OCR
**Agent:** Subagente Implementacion Runtime OCR · **Model:** openai/gpt-5.6-sol · **Session:** `ses_f5692c07cffeBjuFNjshhDRDnL`
**Responsibility:** Implement and prove Unit 14a OCR job execution and authenticated result retrieval only.
**Work:** Persisted accepted PDFs/results, resumed queued jobs safely after restart, executed the existing renderer with an injectable engine, recorded terminal status/errors, and exposed authenticated result retrieval without changing RAG ingestion or cleanup.
**Validation:** Strict-TDD RED 8/10 then recovery RED 9/10; focused GREEN 10/10; OCR 15/15; Node 78/78; localhost Uvicorn upload/status/result `202/200/200`; static, cleanup, and process gates passed.
**Files:** `ocr-service/app/main.py`, `ocr-service/tests/test_api.py`, OpenSpec apply progress, and this history. Task 7.4 remains pending.
---
### 2026-09-16 - Subagente Implementacion Runtime OCR - Unit 14b
**Agent:** Subagente Implementacion Runtime OCR · **Model:** openai/gpt-5.6-sol · **Session:** `ses_f5692c07cffeBjuFNjshhDRDnL`
**Responsibility:** Implement and prove transient OCR cleanup after durable transfer and automatic 24-hour expiry only.
**Work:** Added healthcheck-driven OCR TTL expiry, authenticated client deletion after durable result acceptance, failure retention, and best-effort cleanup fallback without touching durable RAG artifacts or active corpus.
**Validation:** Strict-TDD RED Python 10/11 and Node 15/17; GREEN Python API 11/11, OCR 16/16, focused Node 17/17, canonical Node 80/80; check/build/runtime/cleanup gates passed.
**Files:** OCR API/client/dispatcher tests and code, OpenSpec apply progress, and this history. Task 7.4 remains pending.
---
### 2026-09-16 - Subagente Implementacion Runtime OCR - Unit 14c
**Agent:** Subagente Implementacion Runtime OCR · **Model:** openai/gpt-5.6-sol · **Session:** `ses_f5692c07cffeBjuFNjshhDRDnL`
**Responsibility:** Implement and prove optional logical multipart upload source identity without production or active-content changes.
**Work:** Added trimmed optional `sourceRef`, original-filename fallback, blank validation, OpenAPI contract coverage, and local identity-reuse evidence independent from physical upload names.
**Validation:** Strict-TDD RED 2/4; GREEN focused 4/4, localhost multipart 1/1, canonical Node 81/81; check/build/whitespace/temp cleanup passed.
**Files:** `src/app.ts`, `src/api/openapi.ts`, focused upload/contract tests, OpenSpec apply progress, and this history. Task 7.4 remains pending.
---
### 2026-09-15 - Subagente Implement Unit 13 Local E2E
**Agent:** Subagente Implement Unit 13 Local E2E · **Model:** openai/gpt-5.6-sol · **Session:** `ses_f5af65977ffehYI4eK2l177YAL`
**Responsibility:** Implement only OCR Unit 13 tasks 7.1–7.3 under strict TDD, preserving Units 8–12 and excluding production acceptance task 7.4 and Git delivery work.
**Work:** Added deterministic localhost E2E coverage for native, scanned review/approval/activation, mixed documents, resend identity, OCR-down fail-closed behavior, and catalog-down `503` responses. No production code changed.
**Validation:** The new requirement tests passed immediately as 2/2 baseline/characterization evidence; canonical Node passed 78/78, offline Python passed 13/13, and check/build/whitespace/cleanup/process gates passed.
**Accounting:** 183 functional plus 52 metadata changed lines, 235 total, within the 400-line Unit 13 budget. Tasks 7.1–7.3 are complete; production task 7.4 remains unchecked and untouched.
**Files:** `tests/ocr/e2e.test.ts`, OpenSpec tasks/progress, and this history. No external or production service was contacted; `ocr-service/.venv` was preserved.
---
### 2026-09-15 - Subagente Implement Unit 12 Contracts Deploy
**Agent:** Subagente Implement Unit 12 Contracts Deploy · **Model:** openai/gpt-5.6-sol · **Session:** `ses_f5b09a3a3ffetN0oeikOd4f33P`
**Responsibility:** Implement only OCR Unit 12 tasks 6.3–6.4 under strict TDD, preserving Units 8–11 and excluding all 7.x E2E, production, and Git delivery work.
**Work:** Added accurate authenticated OCR ingestion/status/review/correction/decision OpenAPI contracts, durable private OCR deployment defaults, and a non-root migration-aware RAG container with `/data/ingestions` volume wiring.
**Validation:** Genuine initial RED was 0/3 and triangulation produced a second RED; focused GREEN passed 3/3, relevant regressions 45/45, canonical Node 76/76, check/build/whitespace gates, sanitized Docker build/inspection, cleanup, and process checks passed.
**Accounting:** 219 functional plus 50 metadata changed lines, 269 total, within the 400-line Unit 12 budget. Tasks 6.3–6.4 are complete; all 7.x tasks remain pending.
**Files:** `src/api/openapi.ts`, `src/config/env.ts`, `Dockerfile`, `tests/ocr/contracts-deploy.test.ts`, OpenSpec tasks/progress, and this history. The authoritative lifecycle/OCR contract remained read-only.
---
### 2026-09-15 - Subagente Implement Unit 11 Retention
**Agent:** Subagente Implement Unit 11 Retention · **Model:** openai/gpt-5.6-sol · **Session:** `ses_f5b1c9293ffeDc3y3lJLgJ8UHF`
**Responsibility:** Implement only OCR Unit 11 tasks 6.1–6.2 under strict TDD, preserving Units 8–10 and excluding OpenAPI, deployment, E2E, production, and Git delivery work.
**Work:** Added state-aware OCR retention with exact TTL selection, review expiry, active-safe CAS deletion, restart resumption, reconciler execution, and flag-off candidate API isolation while preserving native synchronous ingestion.
**Validation:** Genuine missing-module and activation-race RED evidence reached focused GREEN 6/6; relevant regressions passed 28/28; canonical Node passed 73/73; check, build, tracked/untracked whitespace, temporary-directory cleanup, and process checks passed.
**Accounting:** 277 functional plus 50 metadata changed lines, 327 total, within the 400-line Unit 11 budget. Tasks 6.1–6.2 are complete; tasks 6.3–6.4 and 7.x remain pending.
**Files:** `src/app.ts`, `src/modules/catalog/{repository,reconciler}.ts`, `src/modules/ocr/retention.ts`, `tests/ocr/{dispatcher,review,retention}.test.ts`, OpenSpec tasks/progress, and this history.
---
### 2026-09-15 - Subagente Implement Unit 10 Review UI
**Agent:** Subagente Implement Unit 10 Review UI · **Model:** openai/gpt-5.6-sol · **Session:** `ses_f5b3af43bffewaqPFGRUOsi6Qt`
**Responsibility:** Implement only OCR Unit 10 task 5.4 under strict TDD, preserving Units 8–9 and excluding retention, deploy, and E2E work.
**Work:** Added authenticated, state-safe rejection with durable audit completion and zero indexing/activation side effects. Extended the existing static playground with authenticated candidate inspection, protected images, corrections, approval, and rejection controls.
**Validation:** Genuine RED was 5/7; focused GREEN/refactor passed 7/7, the localhost rejection harness passed 1/1, canonical Node passed 67/67, and check/build/whitespace gates passed. No live external dependency or persistent process was used.
**Accounting:** 271 functional plus 42 metadata changed lines, 313 total, within the 400-line Unit 10 budget. Task 5.4 is complete; tasks 6.x/7.x remain pending.
**Files:** `src/app.ts`, `src/modules/ocr/review.ts`, `tests/ocr/review.test.ts`, `public/playground/{index.html,app.js,styles.css}`, OpenSpec tasks/progress, and this history.
---
### 2026-09-15 - Subagente Implement Unit 9 Core
**Agent:** Subagente Implement Unit 9 Core · **Model:** openai/gpt-5.6-sol · **Session:** `ses_f5b4d20b9ffewoOAG5oiIu25fk`
**Responsibility:** Implement only OCR Unit 9 tasks 5.1–5.3 under strict TDD, preserving Unit 8 and excluding rejection/UI work.
**Work:** Added authenticated review/approval routes, auditable review and atomic correction boundaries, stale-write conflicts, and new/reusable indexing activation CAS behavior. Rejected candidates are refused by indexing without embeddings.
**Validation:** RED failed on the missing indexing module; focused GREEN passed 5/5, canonical Node passed 65/65, and check/build/tracked plus untracked whitespace gates passed. No external service or persistent process was used.
**Accounting:** 341 functional plus 38 metadata changed lines, 379 total. Unit 10 task 5.4 remains pending.
**Files:** `src/app.ts`, `src/modules/ocr/{review,indexing}.ts`, `tests/ocr/review.test.ts`, OpenSpec tasks/progress, and this history.
---
### 2026-09-14 - Agente RAG 2 - Diagnostico de resultados vacios de subagentes
**Modelo:** openai/gpt-5.6-sol
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Rol/responsabilidad:** Cerrar directamente en Build el diagnostico de `<task_result>` vacio antes de retomar `sdd-apply` desde orchestrator.
**Trabajo realizado:**
- Reconstruidas en modo read-only las sesiones afectadas desde las tablas `session`, `message` y `part` de OpenCode.
- Confirmado que las ejecuciones vacias con actividad terminaron en `finish=length`, 32.000 tokens de salida y sin texto final del asistente.
- Acotado el disparador observado a `sdd-tasks` y a reintentos `general` que seguian reescribiendo el mismo `tasks.md` bajo un limite estricto; las fases GLM `sdd-init`, `sdd-explore` y `sdd-propose` del cambio terminaron normalmente.
- Separado el `APIError` inicial por limite de uso del agotamiento posterior de longitud de salida.
- Verificado con una prueba breve que GLM devuelve `task_result` cuando termina con `finish=stop` y que no modifico los archivos observados.
- Confirmado que el siguiente subagente `sdd-apply` usa `openai/gpt-5.6-sol`, no GLM.
- Persistida en Engram y en el seguimiento central de Gentle-AI la regla de acotar tareas para GLM; el presupuesto de 400 lineas ayuda, pero no garantiza el limite de tokens.
**Estado final:**
- Incidencia explicada y cerrada como bloqueo para el siguiente paso OCR.
- No se modifico la configuracion de OpenCode.
- Listo para volver a orchestrator y retomar `sdd-apply`.
**Archivos modificados:**
- `docs/HISTORIAL_SESIONES.md`
---
### 2026-09-15 - Subagente Recover OCR Unit 8
**Agent:** Subagente Recover OCR Unit 8 · **Model:** openai/gpt-5.6-sol · **Session:** `ses_f5b7b4242ffekQxMZTYXOvPWGA`
**Responsibility:** Recover only Unit 8 tasks 4.1, 4.4, and 4.5 under strict TDD; no Unit 9 or Git delivery work.
**Work:** Completed OCR runtime wiring, exact lease recovery, deterministic pending reuse, mixed-document progress, upload/status HTTP behavior, and fail-closed retrieval evidence.
**Validation:** Persisted evidence records focused dispatcher 9/9, focused repository OCR 6/6, canonical Node 60/60, and clean check/build/whitespace gates; curl returned 202 then authenticated 200. The initially leaked harness child was detected and terminated; temporary files and port were rechecked clean.
**Evidence chain:** Native failed/interrupted revision `sha256:182cc73954a8518d03bd6c3ef5f4141b352aa9b69fca4177447d76deaddad223` preserved an 815-line candidate. The maintainer-selected `auto-chain` / `feature-branch-chain` preflight reset at revision `sha256:c0db82cf3db8ae790d34e4c310b998f97bb36864c97c3aa84e4c87ab77d07c2a` preserved that candidate and bounded only the additional recovery work. Fresh passed evidence revision: `sha256:e424afe7b2f8efd547dcfd0baf64ec1b46ac344f39afd87259560a094d59163f`.
**Accounting:** Relative to committed HEAD `ac046e3`, the complete Unit 8 review slice is 1,045 functional changed lines plus 41 required metadata lines, for 1,086 total; it is not within 400 lines and has no `size:exception`. Only the post-reset recovery delta—350 functional plus 41 metadata lines, 391 total—fits the separate 400-line recovery objective.
**Files:** `src/app.ts`, `src/config/env.ts`, `src/modules/{catalog,ingest,ocr}/`, `tests/ocr/dispatcher.test.ts`, OpenSpec tasks/progress, and this history.
- `/home/pancho/Documentos/Empresa/IA/herramientas/docs/gentle-ai/SEGUIMIENTO_DESCUBRIMIENTOS_MEJORAS_GENTLE_AI.md`
---
## Registro de sesion
### 2026-09-13 - Subagente Inicialización SDD del RAG - sdd-init
**Rol/responsabilidad:** Bootstrap del contexto SDD hibrido (OpenSpec + Engram), capacidades de testing y skill registry para el trabajo de OCR del RAG. Invocado por el agente orquestador.
**Modelo:** ollama/glm-5.3:cloud
**Trabajo realizado:**
- Deteccion del stack real del repo: Node 22 ESM, TypeScript 5.8 strict, Express 4, node:test via tsx, tsc --noEmit; sin linter, formatter ni coverage.
- Verificacion en vivo: `npm test` 25/25 OK, `npm run check` OK.
- Resolucion Strict TDD: `true` (un unico proyecto en scope, `npm test` de raiz lo cubre).
- Inicializacion OpenSpec: `openspec/config.yaml`, `openspec/specs/`, `openspec/changes/archive/`.
- Refresco de `.atl/skill-registry.md` (ya existia con fecha 2026-09-11; el preflight decia que no existia): 20 skills indexados, sdd-*/_shared/skill-registry excluidos, dedup canonico.
- Guardado en Engram (proyecto `rag-service`): contexto de proyecto, capacidades de testing y skill registry (obs 3372, 3373, 3374).
**Estado final:**
- SDD inicializado en modo hibrido para `rag-service`; siguiente fase: `sdd-explore` para el cambio de OCR en la ingesta.
- Sin cambios de codigo ni comportamiento de aplicacion.
**Archivos modificados:**
- `openspec/config.yaml` (nuevo)
- `openspec/specs/.gitkeep` (nuevo)
- `openspec/changes/archive/.gitkeep` (nuevo)
- `.atl/skill-registry.md` (regenerado)
- `docs/HISTORIAL_SESIONES.md` (esta entrada)
---
## Registro de sesion
### 2026-09-13 - Agente RAG 2 - Propuesta de backups y persistencia
**Modelo:** gpt-5.6-luna
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Auditado el almacenamiento actual de documentos, Qdrant, PostgreSQL y uploads.
- Confirmado que los uploads del endpoint `/ingest/upload` son temporales y se eliminan despues del procesamiento.
- Guardada en `PENDIENTES_RAG.md` la propuesta de persistencia de originales y backups de PostgreSQL/Qdrant.
- Definido un backup operativo inmediato antes de ejecutar la migracion del lifecycle.
**Estado final:**
- Propuesta completa diferida para implementacion posterior.
- Backup rapido de `db_rag` completado como TAR portable y verificado con PostgreSQL 17.10.
- Snapshots de `rag_chunks` y `rag_eval_logs` descargados y verificados localmente.
- `npm run migrate:lifecycle` ejecutado correctamente en produccion.
- Esquema verificado: registro de migracion, ocho tablas, indices y triggers presentes.
- `/health` sigue operativo con enforcement desactivado.
- Dry-run legacy ejecutado: 22.605 puntos, 7 fuentes y `blockedReasons: []`.
- Pendiente ejecutar la migracion controlada del corpus legacy.
**Archivos modificados:**
- `RAG/docs/PENDIENTES_RAG.md`
- `RAG/.gitignore`
- `RAG/backups/20260913-184344/postgres/db_rag.tar`
- `RAG/backups/20260913-184344/qdrant/rag_chunks.snapshot`
- `RAG/backups/20260913-184344/qdrant/rag_eval_logs.snapshot`
- `RAG/backups/20260913-184344/checksums.sha256`
- `RAG/docs/HISTORIAL_SESIONES.md`
---
## 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 conserva en el archivo local ignorado `RAG/llaves` y no se persiste en documentacion versionada.
**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
**Conversation ID:** `N/D (OpenCode no lo expone en este entorno)`
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA`
**Rol asumido:**
Dar continuidad al RAG en `RAG/` a partir del estado actual documentado.
**Contexto recuperado:**
- No existe `README` en la raiz de `RAG/`.
- La base documental principal revisada ha sido:
- `docs/SISTEMA_RAG_BASE.md`
- `docs/BITACORA_DISENO_RAG.md`
- `docs/METODOLOGIA_ITERACION_Y_REDEPLOY.md`
- `docs/PLAYGROUND.md`
- `docs/LOGS_EVALUACION.md`
- La v1 figura como operativa y desplegada en `https://rag.por-correo.com`.
- Endpoints documentados como operativos: `GET /health`, `POST /ingest`, `POST /retrieve`, `POST /answer`.
- El playground y los logs de evaluacion aparecen implementados en codigo y pendientes de redeploy segun la documentacion.
**Criterio de continuidad asumido:**
- Trabajar desde el estado ya documentado, sin redescubrir decisiones nucleares de la v1.
- Mantener actualizada la documentacion relevante cuando se hagan cambios reales.
- Usar este historial para dejar trazabilidad entre sesiones y agentes.
**Trabajo realizado en esta sesion:**
- Auditoria inicial de documentacion, codigo y estado observable del modulo `RAG/`.
- Registro de un reporte temporal de auditoria de modelo en `RAG/docs/TEMP_AUDITORIA_MODELO_PRE_CLEANUP.md` para comparacion futura.
- Implementacion de ayuda visual en la zona de `Bootstrap` del playground.
- Añadidos tooltip y `aria-label` en `Cargar bootstrap`, `Reemplazar contexto`, `Vaciar contexto`, `Preset docs`, `Preset RAG docs` y `Preset codigo`.
- Actualizacion de `RAG/docs/PLAYGROUND.md` y `RAG/docs/TEXTOS_AYUDA_PLAYGROUND.md` para reflejar la mejora.
- Implementacion de la pestaña Limpieza en el playground y soporte en el backend (`POST /cleanup`) para borrado seguro de contextos ya ingeridos.
- Limpieza ejecutada exitosamente sobre el `scope` del código fuente antiguo (`RAG/src`).
- Reingesta del directorio `RAG/src` con el código actualizado.
- Documento de seguimiento `RAG/docs/TASK_LIMPIEZA.md` y documentacion API `RAG/docs/API_RAG.md` actualizados.
- Comparacion de auditorias del modelo (pre y post cleanup) documentada en `RAG/docs/TEMP_AUDITORIA_MODELO_PRE_CLEANUP.md`, confirmando una ganancia clara en nitidez y precision del RAG al evaluar el codigo.
- Implementacion de ingesta directa de carpetas locales desde el playground: el navegador empaqueta la carpeta en un `.zip` en memoria (filtrando `node_modules`, `dist`, `.git`, etc. con logica nativa) y el backend usa `adm-zip` para extraerla de forma segura en un directorio temporal antes de la ingesta.
- Correccion en `IngestService` (`resolveInputFiles` y `normalizeDocumentKey`) para escanear archivos desde la ruta temporal extraída (`readPath`) en lugar del identificador lógico al subir carpetas completas, evitando error de `ENOENT`.
- Revision inicial del corpus `/_imports/gstreamer-rag-text` como futura base documental especializada para GStreamer.
- Creacion de `RAG/docs/TASK_INGESTA_GSTREAMER.md` con el plan operativo para ingerirlo bajo un scope unico, validar retrieval y prepararlo para uso posterior con modelo local.
- Diagnostico y correccion del fallo real de ingesta masiva en corpus documentales: algunos ficheros generaban chunks sobredimensionados que acababan rompiendo la llamada a embeddings.
- Correccion aplicada en `src/modules/process/chunking.ts` y endurecimiento defensivo de `src/modules/embeddings/provider.ts`.
- Ingesta completada del corpus GStreamer bajo el scope unico `gstreamer-official` / `corpus:gstreamer:official:v1` con `3117` documentos y `22003` chunks.
- Validacion funcional en produccion mediante `GET /sources` y `POST /retrieve` para bootstrap y consulta especifica sobre request pads.
- Creacion y configuracion del agente primario `gstreamer` en OpenCode para diagnostico tecnico sobre proyectos con GStreamer, priorizando el scope `gstreamer-official` del RAG.
- Documentacion del agente en `RAG/docs/AGENTE_GSTREAMER.md`.
- Ajuste del agente `gstreamer` para asumir por defecto el scope `gstreamer-official` sin que el usuario tenga que mencionarlo expresamente en cada prompt.
- Creacion de un paquete portable para recrear el agente `gstreamer` en otro PC: `RAG/docs/AGENTE_GSTREAMER_OPENCODE.jsonc` y `RAG/docs/INSTALAR_AGENTE_GSTREAMER_EN_OTRO_PC.md`.
- Conexion operativa real del agente `gstreamer` al RAG remoto `https://rag.por-correo.com` mediante scripts dedicados fijados al scope `gstreamer-official`.
- Soporte explicito para flujos de `bootstrap` y `precarga` dirigida antes de revisar codigo.
- Ajuste del paquete portable del agente para usar placeholder `__IA_WORKSPACE_ROOT__` y poder reinstalarlo correctamente en otros equipos sin depender de rutas locales de este PC.
- Creacion de `RAG/agente_gstreamer/` como carpeta autocontenida para llevar el agente a otro PC con configuracion, scripts e instrucciones en un solo paquete.
---
### 2026-09-08 - Agente RAG 2
**Modelo:** gpt-5.6-sol
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Auditoria de las 14 operaciones HTTP existentes y de sus contratos reales.
- Implementacion de `GET /help` y `GET /openapi.json`, dejando 16 operaciones documentadas.
- Creacion de un contrato OpenAPI 3.1.1 con esquemas, parametros, respuestas, errores y ejemplos.
- Reescritura de `docs/API_RAG.md` como guia operativa enlazada al contrato OpenAPI.
- Correccion del estado obsoleto de playground, logs, cleanup, stack y documentos de diseño.
- Correccion de la metodologia: local se limita a compilacion y comprobaciones estaticas; los flujos HTTP se validan tras publicar en produccion.
- Validacion satisfactoria con `npm run check`, `npm run build`, comprobacion de referencias OpenAPI y contraste automatico entre rutas implementadas y documentadas.
- Deteccion del build context obsoleto `/RAG` en EasyPanel tras la migracion del repositorio.
- Ajuste por el usuario de `Ruta de compilacion` a `/` y despliegue satisfactorio del commit `f1cd87c`.
- Validacion en produccion de health, Qdrant, playground, sources, `/help` y `/openapi.json`.
- Regresion satisfactoria de retrieval sobre FacturaTech: 6 resultados, cero fugas de scope y coincidencias `504` en los primeros resultados.
- Deteccion posterior de que `/help` enlazaba OpenAPI pero no explicaba para que debia consultarse.
- Incorporacion de una instruccion explicita en `/help` sobre parametros, cuerpos, respuestas, errores y ejemplos disponibles en `/openapi.json`.
- Deploy del ajuste `953ff25` y revalidacion satisfactoria de `/help`, `/openapi.json` y `/health` en produccion.
**Estado final:**
- Pendiente 1 completado y validado definitivamente en `https://rag.por-correo.com`.
- La API dispone de descubrimiento rapido y contrato OpenAPI para sus 16 operaciones.
- Siguiente prioridad: ciclo de vida del conocimiento.
---
### 2026-09-08 - Agente RAG 2
**Modelo:** gpt-5.6-sol
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Subagentes de analisis:**
- `Subagente Extraccion de versiones PaddleOCR`: contraste de versiones PyPI compatibles para el benchmark CPU.
- `Subagente Validacion del ciclo de vida`: revision adversarial del catalogo PostgreSQL y versionado Qdrant.
- `Subagente Validacion OCR`: revision adversarial de deteccion, servicio privado, quality gates y revision humana.
- `Subagente Auditoria de claridad del contrato`: detecto contradicciones de hashes, idempotencia, migracion y revision.
- `Subagente Revalidacion de ejecutabilidad`: detecto bloqueos restantes en metadata, concurrencia y artefactos.
- `Subagente Revalidacion de resiliencia`: reviso carreras, barreras de migracion y recuperacion de jobs.
- `Subagente Revision final del contrato`: verifico y cerro la secuencia segura de rollback legacy.
**Trabajo realizado:**
- Auditoria del pipeline actual de ingesta, IDs, Qdrant, parser PDF, API e infraestructura EasyPanel.
- Confirmacion de PostgreSQL 17 como catalogo transaccional y Qdrant como almacenamiento vectorial versionado.
- Benchmark aislado en VPS2 con el PDF mixto real de FacturaTech.
- Descarte de Tesseract como motor unico por omitir identificadores criticos.
- Seleccion de PaddleOCR como motor principal y deteccion de errores alfanumericos de alta confianza que obligan a revision humana.
- Creacion de `docs/CONTRATO_CICLO_VIDA_Y_OCR.md` con esquema, estados, APIs, migracion, OCR, tareas, pruebas, despliegue y rollback.
- Enlace del contrato desde el backlog canonico.
- Correccion del contrato mediante revisiones adversariales hasta eliminar sus bloqueos criticos conocidos.
- Limpieza de los artefactos e imagenes temporales usados en el benchmark local y de VPS2.
**Estado final:**
- Diseño de los pendientes 2 y 3 cerrado y listo para implementacion secuencial.
- El punto 2 debe completarse y validarse en produccion antes de iniciar el punto 3.
- No se modifico codigo ni produccion durante esta fase de diseño.
**Archivos modificados:**
- `RAG/docs/CONTRATO_CICLO_VIDA_Y_OCR.md`
- `RAG/docs/PENDIENTES_RAG.md`
- `RAG/docs/HISTORIAL_SESIONES.md`
- `docs/INDICE_DOCUMENTACION.md`
- `docs/HISTORIAL_SESIONES.md`
---
### 2026-09-11 - Subagente Implementacion ciclo de vida del conocimiento
**Modelo:** openai/gpt-5.5
**Session ID OpenCode:** `ses_f6fe0ad30ffeiottYsATsRemCo`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Rol asumido:**
Ejecutar la fase apply del punto 2 del RAG y corregir los bloqueadores finales detectados antes de commit, push o despliegue.
**Trabajo realizado:**
- Ajuste del migrador legacy para permitir reanudacion por `--batch-id`, reutilizando versiones ya creadas y completando activacion tras actualizaciones de payload ya aplicadas.
- Endurecimiento de rollback legacy con lock global de migracion, comprobacion de snapshot y operaciones serializadas sobre fuentes/versiones.
- Reconciliador protegido con advisory lock no bloqueante, timeout configurable basado en `indexing_started_at` y validacion de coleccion/dimensiones.
- Protecciones adicionales: `POST /cleanup` respeta `INGEST_WRITES_ENABLED`, `markPurged` valida `rowCount`, rollback usa locks y OpenAPI refleja `503` en health con `ok` booleano.
- Script `migrate:legacy:lifecycle` ajustado para ejecutarse desde `dist/` con Node tras build.
- Añadidos tests unitarios para reanudacion legacy, activacion idempotente, cleanup con escrituras deshabilitadas, reconciliador, mismatch de coleccion y `markPurged`.
**Validacion local:**
- `npm run check` correcto.
- `npm test` correcto: 18 tests pasan.
- `npm run build` correcto.
- `git diff --check` correcto.
**Estado final:**
- Punto 2 implementado y validado localmente.
- No se hizo commit, push, deploy ni lectura de `.env`.
- Sigue pendiente la verificacion independiente y la validacion/migracion en produccion antes de marcar el punto 2 como cerrado.
**Archivos modificados en esta correccion:**
- `.env.example`
- `package.json`
- `package-lock.json`
- `src/config/env.ts`
- `src/modules/catalog/client.ts`
- `src/modules/catalog/repository.ts`
- `src/modules/catalog/reconciler.ts`
- `src/modules/vectorstore/client.ts`
- `src/modules/retrieve/service.ts`
- `src/modules/ingest/service.ts`
- `src/scripts/migrate-legacy-lifecycle.ts`
- `src/api/openapi.ts`
- `tests/lifecycle-services.test.ts`
- `docs/API_RAG.md`
- `docs/DESPLIEGUE_EASYPANEL.md`
- `docs/SISTEMA_RAG_BASE.md`
- `RAG/docs/HISTORIAL_SESIONES.md`
---
### 2026-09-11 (reanudacion final) - Subagente Implementacion ciclo de vida del conocimiento
**Modelo:** openai/gpt-5.5
**Session ID OpenCode:** `ses_f6fe0ad30ffeiottYsATsRemCo`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Rol asumido:**
Completar los 4 bloqueos del sdd-verify y cerrar la validacion local del punto 2.
**Trabajo realizado:**
- Reconciliador: recupera versiones huerfanas `pending/indexing` a `ready` contando puntos Qdrant y validando documentos, coleccion y dimensiones; marca `failed` solo si quedan incompletas; try-locks evitan matar ingestas vivas.
- Ingesta: rechaza embeddings con dimensiones distintas de las esperadas antes del upsert y antes de alcanzar `ready`.
- Rollback legacy: transaccion diferida del lote, confirmacion de cero punteros activos, restauracion de snapshot con verificacion de recuentos y limpieza posterior del catalogo.
- OpenAPI: `/sources` documenta `503`.
- Retrieval: locks compartidos adquiridos antes de validar recuento/dimensiones y mantenidos durante toda la consulta Qdrant.
- Interrupcion por limite de uso a mitad de la validacion; reanudada tras cambio de cuenta y completada hasta el final.
**Validacion local:**
- `npm run check` correcto.
- `npm test` correcto: 25/25 tests pasan.
- `npm run build` correcto.
- `git diff --check` correcto.
- Verificacion independiente (sdd-verify): PASS local.
**Estado final:**
- Implementacion local del punto 2 verificada de forma independiente: PASS local.
- No se hizo commit, push, deploy ni lectura de `.env`.
- Pendiente: commit/push, deploy con enforcement desactivado, migracion legacy y validacion en produccion antes de cerrar el punto 2.
---
### 2026-09-13 - Agente RAG 2
**Modelo:** openai/gpt-5.6-luna
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA`
**Rol asumido:**
Continuidad operativa y evolutiva del modulo RAG.
**Trabajo realizado:**
- Creado y conservado un snapshot Qdrant remoto de `rag_chunks` antes de la migracion, con checksum `a55b13d3b6b791e9b148f87491b9b2788ce5797ee997a9f6be2a6d424eb92302`.
- Ejecutada la ventana de mantenimiento con escrituras desactivadas y `maintenance=true`.
- Aplicada la migracion legacy con lote `17f05cae-c5a7-49a5-b3ad-729958e1a342`.
- Catalogadas 7 fuentes y 22.605 puntos; las siete versiones quedaron activas y los recuentos esperados/verificados coinciden.
- Activado `KNOWLEDGE_LIFECYCLE_ENFORCED=true`, validado retrieval con catalogo y reactivadas las escrituras.
**Validacion en produccion:**
- `/health`: HTTP 200, PostgreSQL, Qdrant y reconciliador operativos.
- Reconciliador: `inconsistentSources=[]`, `invariantViolations=[]` y cero versiones huerfanas recuperadas/fallidas.
- Retrieval FacturaTech y GStreamer: HTTP 200, resultados limitados a sus fuentes.
- Estado final: `maintenance=false`, `INGEST_WRITES_ENABLED=true`, enforcement activo.
**Estado final:**
- Punto 2 del ciclo de vida cerrado y validado en produccion.
- Punto 3 OCR queda habilitado para la siguiente fase.
**Archivos modificados:**
- `docs/PENDIENTES_RAG.md`
- `docs/API_RAG.md`
- `docs/DESPLIEGUE_EASYPANEL.md`
- `docs/CONTRATO_CICLO_VIDA_Y_OCR.md`
- `docs/HISTORIAL_SESIONES.md`
---
### 2026-09-14 - Agente RAG 2 - Reparacion directa de tasks OCR
**Modelo:** openai/gpt-5.6-sol
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Reparado directamente `openspec/changes/ocr-ingest-integration/tasks.md` tras varios resultados vacios de subagentes.
- Reducido el artefacto de 646 a 524 palabras, por debajo del limite estricto de 530.
- Conservados 30 tareas, 13 work units, trazabilidad de 17 requisitos/34 escenarios, Strict TDD, amenazas HTTP, contratos de activacion y estrategia feature-branch-chain.
- Sincronizado el artefacto hibrido en Engram mediante el topic `sdd/ocr-ingest-integration/tasks`.
**Validacion:**
- Cuatro guard lines requeridas presentes con valores correctos.
- `gentle-ai sdd-status ocr-ingest-integration --json`: `applyState=ready`, `blockedReasons=[]`.
- Revision semantica contra las tres specs completada.
**Estado final:**
- Fase de tasks recuperada y lista para iniciar `sdd-apply` desde Unit 1.
- No se implemento codigo OCR, ni se hizo commit, push o deploy.
**Archivos modificados:**
- `openspec/changes/ocr-ingest-integration/tasks.md`
- `docs/HISTORIAL_SESIONES.md`
---
### 2026-09-14 - Subagente OCR Unit 1 Migration - Migracion OCR revisable
**Agente:** **Subagente OCR Unit 1 Migration**
**Rol/responsabilidad:** Implementar exclusivamente Unit 1 (Migration) del cambio SDD `ocr-ingest-integration` mediante TDD estricto, sin ejecutar Unit 2 ni acciones de entrega Git.
**Modelo:** openai/gpt-5.6-sol
**Session ID OpenCode:** `ses_f607397e7ffeF3y4cM8FvprlCB`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Creada primero la prueba focalizada de contrato de esquema para la migracion OCR.
- Capturado RED valido con 4/4 pruebas fallidas por ausencia de `migrations/002_ocr_review.sql`; una ejecucion previa con error sintactico en la prueba fue corregida y no se conto como RED.
- Creada `migrations/002_ocr_review.sql` con jobs OCR durables, campos de idempotencia y leases, registros auditables por pagina, correcciones atomicas y un indice unico parcial para identidades OCR no terminales.
- Capturado GREEN con 4/4 pruebas aprobadas mediante `npx --no-install tsx --test tests/catalog/migration-002.test.ts`.
- Marcada exclusivamente la tarea 1.2 como completada; la tarea 1.1 permanece pendiente porque requiere las pruebas de comportamiento de repositorio de Unit 2.
- Persistida la evidencia acumulativa de apply en OpenSpec y sincronizada con Engram mediante `sdd/ocr-ingest-integration/apply-progress`.
**Estado final:**
- Unit 1 completada dentro de su limite autonomo y con rollback acotado a los dos archivos nuevos y sus metadatos de progreso.
- Runtime PostgreSQL indicado como no aplicable en esta unidad: el plan la define como schema-only y el proyecto no dispone de harness PostgreSQL de pruebas.
- No se modificaron la migracion 001 ni la logica de repositorio; no se hizo commit, push, PR, deploy ni acceso a secretos.
**Archivos modificados:**
- `migrations/002_ocr_review.sql`
- `tests/catalog/migration-002.test.ts`
- `openspec/changes/ocr-ingest-integration/tasks.md`
- `openspec/changes/ocr-ingest-integration/apply-progress.md`
- `docs/HISTORIAL_SESIONES.md`
---
### 2026-09-14 - Subagente OCR Unit 2 Repository - Repositorio OCR
**Agente:** **Subagente OCR Unit 2 Repository**
**Rol/responsabilidad:** Implementar exclusivamente Unit 2 del cambio SDD `ocr-ingest-integration` mediante TDD estricto.
**Modelo:** openai/gpt-5.6-sol
**Session ID OpenCode:** `ses_f6068e516ffemqjXllduA068YL`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Creada primero la prueba focalizada `tests/catalog/repository-ocr.test.ts`; RED valido: 0/6 por metodos ausentes.
- Añadidas al repositorio la recuperacion de candidato OCR pendiente, la toma atomica de jobs, la recuperacion de leases vencidos sin perder identidad remota y las transiciones protegidas de revision.
- Refactorizada tras GREEN la proyeccion comun de filas OCR y sincronizadas las tareas 1.1, 1.3 y 1.4 con el progreso acumulado hibrido.
**Validacion:**
- Reejecucion segura: 6/6; `npm test`: 10/10; suite raiz explicita: 25/25; `npm run check` y `git diff --check`: correctos.
- Slice de codigo y pruebas: 313 lineas autoradas; 389 en total con metadatos e historial, dentro del presupuesto de 400.
**Estado final:**
- Unit 2 completada sin modificar dispatcher/reconciler, crear commits, publicar ni desplegar. Incidencias: una ejecucion inicial pudo activar dotenv sin exponer contenido y `npm test` omite ahora las pruebas raiz por expansion del glob; la suite raiz explicita paso.
**Archivos modificados:**
- `src/modules/catalog/repository.ts`
- `tests/catalog/repository-ocr.test.ts`
- `openspec/changes/ocr-ingest-integration/{tasks.md,apply-progress.md}`
- `docs/HISTORIAL_SESIONES.md`
---
### 2026-09-14 - Subagente OCR Unit 2 Corrective Rerun - Correccion de la verificacion canonica
**Agente:** **Subagente OCR Unit 2 Corrective Rerun**
**Rol/responsabilidad:** Ejecutar la unica repeticion correctiva de Unit 2 para restaurar la cobertura canonica de pruebas y renovar su evidencia, sin implementar Unit 3.
**Modelo:** openai/gpt-5.6-sol
**Session ID OpenCode:** `ses_f60564170ffec1x6E520GuSMHd`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Corregido de forma minima el script `npm test`: ahora pasa explicitamente los patrones de suites raiz y anidadas a `tsx --test`.
- Repetidos todos los comandos directos de Unit 2 con `NODE_ENV=test` para evitar la omision insegura anterior.
- Fusionada la evidencia correctiva con el progreso acumulado de Units 1 y 2; las tareas 1.1–1.4 permanecen completadas y Unit 3 no se inicio.
- Registrada la excepcion `size:exception` autorizada por el maintainer exclusivamente para las 511 lineas nativas de Unit 2; el presupuesto correctivo autorizado fue de 600 lineas y las unidades posteriores conservan el limite normal de 400.
**Validacion:**
- Revision focalizada de repositorio: 6/6 pruebas correctas.
- Suites de catalogo: 10/10 pruebas correctas.
- Suites raiz explicitas: 25/25 pruebas correctas.
- `npm test` canonico: 35/35 pruebas correctas, demostrando la ejecucion conjunta de 25 pruebas raiz y 10 anidadas.
- `npm run check` y `git diff --check`: salida correcta.
- Revision fallida corregida: `sha256:9433c0cd6628f36f4c96a27d41c6d429f4303d038ffe928f297367c274f21c2f`.
- Nueva revision de evidencia: `sha256:a19119f84381447f54a6223e2a203acaf9d3ae08b6ae8f585e3bd52cd510909b`.
**Estado final:**
- Repeticion correctiva de Unit 2 completada con todos los gates solicitados en verde.
- No se hizo commit, push, PR ni deploy; no se accedio a `.env*`, `llaves` ni `backups/`.
- Unit 3 permanece pendiente.
**Archivos modificados en esta correccion:**
- `package.json`
- `openspec/changes/ocr-ingest-integration/apply-progress.md`
- `docs/HISTORIAL_SESIONES.md`
---
### 2026-09-14 - Subagente OCR Unit 3 Extraction - Extraccion PDF por pagina
**Agente:** **Subagente OCR Unit 3 Extraction**
**Rol/responsabilidad:** Implementar exclusivamente Unit 3 del cambio SDD `ocr-ingest-integration` mediante TDD estricto.
**Modelo:** openai/gpt-5.6-sol
**Session ID OpenCode:** `SIN_SESION_EN_ESTE_WORKSPACE`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Creada primero la prueba focalizada de extraccion PDF y routing; RED valido por ausencia de `parsePdfPages`.
- Añadidos un fixture PDF de tres paginas, el spike Node 22 y extraccion por pagina con texto y SHA-256 estable.
- Probado que `requirements.txt` y Markdown se leen como datos sin ejecutarse, mientras `CMakeLists.txt`, MDX y shell siguen sin soporte.
- Marcadas 2.1 y 2.3; 2.2 permanece pendiente porque sus aserciones de deteccion, composicion y riesgos pertenecen a Unit 4.
**Validacion:**
- Suite focalizada: 5/5; spike: tres paginas ordenadas con pagina 2 vacia; `npm test`: 40/40.
- `npm run check` y `git diff --check`: correctos.
- Slice nativo antes de metadatos: 225 lineas, dentro del limite de 400.
**Estado final:**
- Unit 3 completada sin iniciar 2.4/2.5, sin commit, push, PR o deploy y sin acceder a rutas restringidas.
**Archivos modificados:**
- `src/modules/parsers/parser-registry.ts`
- `scripts/spike-pdfjs.ts`
- `tests/parsers/pdf-pages.test.ts`
- `tests/fixtures/ocr/native-three-pages.pdf`
- `openspec/changes/ocr-ingest-integration/{tasks.md,apply-progress.md}`
- `docs/HISTORIAL_SESIONES.md`
---
### 2026-09-14 - Subagente OCR Unit 4 Detection and Composition - Deteccion y composicion OCR
**Agente:** **Subagente OCR Unit 4 Detection and Composition**
**Rol/responsabilidad:** Implementar exclusivamente Unit 4 del cambio SDD `ocr-ingest-integration` mediante TDD estricto.
**Modelo:** openai/gpt-5.6-sol
**Session ID OpenCode:** `SIN_SESION_EN_ESTE_WORKSPACE`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Creada primero la prueba focalizada; RED valido por ausencia de los modulos OCR.
- Implementadas las tareas 2.2, 2.4 y 2.5: deteccion y quality gates exactos, composicion determinista, hashes canonicos y riesgos sin autocorreccion.
**Validacion:**
- Suite focalizada 5/5, harness PDF mixto 1/1 y canonica 45/45; check y comprobaciones de espacios correctos; slice nativo: 322 lineas.
**Estado final:**
- Unit 4 completada; Unit 5 no iniciada y sin commit, push, PR, deploy o acceso a rutas restringidas.
**Archivos modificados:**
- `src/modules/ocr/{detection,composition}.ts`
- `tests/ocr/detection.test.ts`
- `openspec/changes/ocr-ingest-integration/{tasks.md,apply-progress.md}`, `docs/HISTORIAL_SESIONES.md`
---
### 2026-09-14 - Subagente OCR Unit 5 Reintento y Correccion - Servicio OCR HTTP validado
**Agente:** **Subagente OCR Unit 5 Reintento y Correccion**
**Rol/responsabilidad:** Implementar y corregir exclusivamente Unit 5, tareas 3.1 y 3.2, mediante TDD estricto y entorno virtual local autorizado.
**Modelo:** openai/gpt-5.6-sol
**Session IDs OpenCode:** retry `ses_f5fa0eea0ffegi8n6KEhZDWYzU`; correction `ses_f5edabfa9ffeDm6JTyPnX7Bh5M`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Creado el manifiesto Python fijado, el entorno ignorado y retenido `ocr-service/.venv`, las pruebas HTTP RED-first y la API FastAPI con cola SQLite, autenticacion, idempotencia, allowlist, limites y health.
- Diagnosticado el harness fallido: `&` envio la lista shell previa a un subshell y dejo vacios `KEY`, `REQUEST` y `CONFLICT` en los curls; se reprodujo `400 INVALID_REQUEST` y se corrigio solo el limite de backgrounding, sin cambiar la implementacion.
**Validacion y estado final:**
- RED valido por ausencia de `app`; GREEN focalizado: 8/8 pruebas aprobadas.
- Se conserva la evidencia fallida `sha256:4a5c8ed8d8b302f7ff654d4f40fe0f13049bfdd29db4c76576f3847c0a9be15a`; el harness corregido devolvio exactamente `401/202/409` con cuerpos contractuales.
- `npm test` 45/45, `npm run check`, compileall y espacios correctos; servidor y temporales eliminados, `.venv` retenido; tareas 3.1/3.2 completadas. Revision: `sha256:0d8b2c57bbab967473eaf99a7ca900168554e64254fa80197b3626b4570b58d0`.
**Archivos modificados:** `.gitignore`, `ocr-service/{README.md,requirements.txt,app/,tests/}`, `openspec/changes/ocr-ingest-integration/apply-progress.md`, `docs/HISTORIAL_SESIONES.md`.
---
### 2026-09-14 - Subagente OCR Unit 6 Render - Renderizado y runtime PaddleOCR
**Agente:** **Subagente OCR Unit 6 Render**
**Rol/responsabilidad:** Implementar exclusivamente Unit 6, tareas 3.3 y 3.4, mediante TDD estricto, sin iniciar Unit 7 ni realizar acciones de entrega Git.
**Modelo:** openai/gpt-5.6-sol
**Session ID OpenCode:** `ses_f5e8c95a3ffeugBz7od2TtJr4n`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Implementados renderizado PDF determinista a 200 DPI, limite previo de 25 megapixeles, adaptador PaddleOCR, IDs de linea, metricas y esquema de resultado contractual.
- Añadidas pruebas RED-first con motor falso determinista y cobertura de paginas seleccionadas, limites, payload Paddle y contrato de imagen.
- Creada imagen CPU no privilegiada con PaddleOCR 3.4.0/PaddlePaddle 3.2.2, modelos baked, un worker, volumen privado y limites operativos documentados.
- Restringido el contexto Docker con una lista de inclusion minima para no enviar rutas sensibles o ajenas al servicio.
**Validacion y estado final:**
- RED valido por ausencia de `app.engine`; GREEN focalizado 5/5 y suite OCR completa 13/13.
- Build Docker corregido tras detectar `libGL.so.1` ausente; harness offline limitado a 3 CPU/5 GiB cargo modelos baked y genero PNG 1700x2200 con esquema `1`.
- Un rebuild opcional posterior agoto el almacenamiento Docker; se revirtio esa unica optimizacion no validada, se restauro exactamente el Dockerfile ya probado y se elimino la imagen local.
- `npm test` 45/45, `npm run check`, `compileall` y espacios correctos; 397 lineas nativas, dentro del limite de 400. Tareas 3.3/3.4 completadas; Unit 7 no iniciada.
**Archivos modificados:**
- `ocr-service/{Dockerfile,Dockerfile.dockerignore,README.md,requirements.txt}`
- `ocr-service/app/{engine.py,main.py,models.py,render.py}`
- `ocr-service/tests/test_render.py`
- `openspec/changes/ocr-ingest-integration/{tasks.md,apply-progress.md}`
- `docs/HISTORIAL_SESIONES.md`
---
### 2026-09-14 - Subagente OCR Unit 7 Client - Cliente y artefactos OCR
**Agente:** **Subagente OCR Unit 7 Client**
**Rol/responsabilidad:** Implementar exclusivamente Unit 7, tareas 4.2 y 4.3 y la parte de reintentos/integridad de 4.1, mediante TDD estricto, sin iniciar dispatcher ni routing de Unit 8.
**Modelo:** openai/gpt-5.6-sol
**Session ID OpenCode:** `ses_f5e4fa3e6ffeabETlcJxsURUKb`
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
**Trabajo realizado:**
- Añadido el cliente OCR privado con clave idempotente estable, dos reenvios transitorios como maximo, clasificacion terminal de fallos deterministas, presion `429` reintentable, polling acotado y validacion estricta de identidad/esquema/resultados.
- Añadido el gestor de artefactos con originales y manifiesto canonico durables, permisos `0600`, IDs UUIDv5, hashes verificables, contencion de rutas y barrido de huerfanos antiguo y conservador.
- Mantenida 4.1 pendiente: Unit 7 solo cubre reintentos e integridad; los casos HTTP de ingesta, estado y fallo cerrado pertenecen a Unit 8.
**Validacion y estado final:**
- RED valido por ausencia de los dos modulos; GREEN focalizado 6/6 y harness determinista 1/1 con tres intentos, misma clave y backoff exacto de 2/4 segundos.
- `npm test` 51/51, `npm run check`, `npm run build` y comprobaciones de espacios correctos; temporales eliminados y ningun proceso o llamada OCR externa iniciados.
- El slice funcional minimo es de 506 lineas autoradas y la contabilidad nativa total con metadatos obligatorios es de 585 lineas. El maintainer aprobo explicitamente `size:exception` porque cliente, artefactos y pruebas forman una unidad cohesiva; no se comprimio codigo ni se inicio un segundo particionado.
- El intento nativo se reinicio para validar la excepcion sin modificar produccion ni pruebas. El nuevo work unit es `unit-7-size-exception-validation` y remedia la evidencia fallida `sha256:dd224c3864adc8380dc7d9fd147cb448f5da8138277f3f346a35d7eeb3aca158`.
- No se hizo commit, push, PR, review nativa ni trabajo de Unit 8; no se accedio a rutas restringidas y se preservo `ocr-service/.venv`.
**Archivos modificados:**
- `src/modules/ocr/{client,artifacts}.ts`
- `tests/ocr/client.test.ts`
- `openspec/changes/ocr-ingest-integration/{tasks.md,apply-progress.md}`
- `docs/HISTORIAL_SESIONES.md`