{"id":"IMPLEMENTATION_LOG","title":"Registro de implementacion","version":"nav88-20261106-v1","date":"2026-11-06T13:00:28.038824+01:00","classification":"PUBLIC_REVIEW","sha256":"5fb19cdc5d37ad0d796da6a393a08e88c538fabead271216c0eb4f96b89920a1","read_url":"/api/review/IMPLEMENTATION_LOG","total_bytes":11593,"fragment_count":1,"document_sha256":"5fb19cdc5d37ad0d796da6a393a08e88c538fabead271216c0eb4f96b89920a1","fragmented":false,"content_markdown":"# IMPLEMENTATION_LOG\n\n## Correccion prioritaria del menu 88 - 06/11/2026\n\nAlcance exclusivo: presentacion y seleccion de la navegacion administrativa.\nSe conservan las seis categorias, los 28 enlaces del administrador, las rutas,\nel filtrado por rol y la autorizacion de operaciones. Sin cambios de negocio.\n\nEl HTML anterior agrupaba enlaces directamente dentro de details. El grid de\nnav ordenaba categorias, pero no los enlaces interiores. El servidor ya servia\nuna regla reciente display:block en el CSS general sin versionar; no se obtuvo\nel cache del navegador afectado y no se atribuye su incidente a cache como\nhecho probado. Se verifico localmente que un CSS anterior dejaba esos enlaces\nen linea. La seleccion tambien era exacta y no cubria paginas hijas.\n\nCorreccion: listas semanticas ul/li dentro de details/summary nativos; estilos\nespecificos reutilizables en admin-navigation.css con version basada en SHA-256.\nUna fila por enlace, sangria uniforme, ajuste de textos, foco visible, separacion\nentre grupos y scroll vertical propio. La coincidencia de ruta mas especifica\nmarca un solo enlace y abre su categoria al cargar la pagina. No se anade JS.\n\nValidacion: 389 pruebas correctas, incluidas las 15 nuevas del menu. Chromium\ncomprobo las seis categorias y 28 enlaces en cuatro resoluciones, con el CSS\nactual y con una version anterior simulada. Capturas con contenido sintetico.\nSiete GET autenticados sobre el servicio desplegado: 200 y seleccion correcta.\nLa sesion tecnica fue temporal, solo en memoria, sin persistir su token.\n\nDespliegue de cinco archivos con backup y rollback preparado; reinicio breve\nsolo de transport-hub.service. El primer preflight auxiliar se detuvo antes\nde modificar archivos por usar el usuario root para PostgreSQL; se corrigio\npara consultar con el usuario de servicio habitual. Health/ready 200; servicios\n80, 85 y 88 activos. Sin migraciones, impresiones ni conexiones GLS.\nContadores sin cambios: iClientes PRODUCCION 13, TEST 6, REST registrado 5;\nhistorico TEST/laboratorio 11 y total 24. Bloqueos operativos conservados.\n\n## Prueba real limitada de lectura - 06/11/2026\n\nBackup reciente restaurado y verificado, comprobacion de cuenta 2004/35,\nidentidad de PRODUCCION separada de TEST, ausencia previa de los tres casos y\npresupuesto suficiente. Control de un solo uso validado con cinco tests mock.\nUn trabajo acotado, tres GetExpCli, tres HTTP 200 de 432 bytes con Error de\nnegocio y cero nodos exp. Duraciones: 207, 126 y 129 ms. Sin reintentos.\n\nLa evidencia original quedo cifrada antes de normalizar. No hubo datos que\npersistir como expediciones; se conservaron errores, auditoria y tres cargos\nde cuota. Permisos temporales restaurados. GET autenticado Buscar 80: cero\nfilas, coherente con PG. Verificacion en proceso nuevo e integridad correctas.\n\nIncidencia posterior del canal QMP; acceso recuperado por SSH con identidad\nexistente y host key verificada por lectura RO. No cambios de claves en VM,\nreinicios, proxy ni configuracion de red. No nuevas llamadas GLS por este motivo.\nSe publican resultados negativos; no se modifica la integracion para falsearlos.\n\n## Registro anterior\n\n## Etapa D - 06/11/2026\n\n1. Inventario fresco: 54 tablas, 17 migraciones y 21 peticiones externas.\n2. Contraste local de manual y ejemplo oficial GetExpCli, sin conexiones GLS.\n3. Adaptador sobre serializador, proveedor de identidad y transporte validados.\n4. Correccion de clasificacion de escritura HTTP parcial como resultado incierto.\n5. Centros remitentes cifrados, asociaciones y snapshot por borrador.\n6. Trabajador GetExpCli acotado, recibos/checkpoints y replay local.\n7. Cuotas por cuenta, prioridad, reserva y estimacion del importador.\n8. Navegacion seis areas, permisos por operacion y rutas antiguas conservadas.\n9. Migracion incremental 018 probada con cuatro migradores simultaneos.\n10. Backup PostgreSQL restaurado: 54 tablas y 111 indices coinciden en filas/hash.\n11. Pruebas completas sobre base temporal, sin credenciales reales ni red externa.\n12. Despliegue controlado con bloqueos de creacion/lectura y sin iniciar workers.\n\nPrimera pasada: 364 correctas y dos fallos del nuevo mapeo de creacion,\nidentificados y corregidos antes del despliegue. Segunda: 366 correctas.\nLa bateria final ampliada queda registrada en TEST_RESULTS.\nRevision final: 374 correctas en 83,27 segundos. Selector global restringido\npara lectura y Retry-After conservado/aplicado en consultas iClientes.\n\n## Registro historico anterior\n\n## Etapa C - implementacion y despliegue\n\n1. Inventario fresco de codigo, 53 tablas, 16 migraciones y contadores.\n2. JSON 85 implementado sobre copias sanitizadas fijadas por hash. Indice,\n   lectura completa, bundle y fragmentos UTF-8 con offset/hash propios.\n3. Primera ronda: 341 pruebas correctas. Backup previo restaurado y validado.\n4. Se activo primero JSON 85 sin cambiar interruptor, politica ni proxy.\n   Cliente HTTPS ordinario: 200; PROJECT_STATUS inicial 6074 bytes JSON,\n   contenido Markdown 5522 bytes con hash correcto; bundle de tres informes\n   65466 bytes; indice 3944 bytes (release B existente en ese momento).\n5. Se implementaron borradores, auth de 80 y flujo local simulado usando el\n   contrato, coordinador, diario, repositorio y cuotas existentes.\n6. Se implementaron busqueda local combinable, paginacion y ficha documental.\n7. Se prepararon importador de texto revisado, trabajos pausados y cuotas en\n   88, sin worker. Inventario: 90 rutas, 36 plantillas y menu principal intacto.\n8. Segunda ronda: 345 correctas. Se ampliaron casos de SOAP Fault, timeout,\n   commit fallido y conciliacion sin segundo sender. Revision final ampliada:\n   349 correctas en 58,29 segundos, datos sinteticos y llamadas/UID GLS\n   prohibidos en tests C; cuota desactivada antes de claim no bloquea borrador.\n9. El primer script auxiliar de despliegue se detuvo por sintaxis antes de\n   ejecutar cambios. Se corrigio y compilo antes de su ejecucion efectiva.\n10. Se detuvo brevemente solo 88, se instalaron 38 ficheros y se aplico 017.\n    Todas las filas anteriores quedaron preservadas, verificadas por PK/hash.\n11. Servicio local 80 habilitado e iniciado; health/ready 200. 85/88 y PostgreSQL\n    activos. Privadas sin sesion: 303 a login. No se crearon usuarios de prueba\n    ni se falsifico una sesion de administrador en la aplicacion activa.\n12. Informes completos y representacion documental de administracion preparados\n    para release revisado C, manteniendo los formatos y el interruptor.\n\nNo se realizaron altas, consultas, OAuth, cancelaciones, etiquetas, POD ni\nninguna otra peticion a GLS. No hubo impresiones ni cambios del proxy.\nLa navegacion principal del 88 se conserva byte a byte; solo hay accesos\nsecundarios a las herramientas nuevas desde la pantalla Plataforma.\n\n## Registro historico: etapa B\n\n## Etapa B - trabajo ejecutado\n\n1. Se consultaron DNS publicos, certificado/SNI, HTTP/HTTPS, dos User-Agent,\n   IPv4/IPv6 y todos los documentos publicados. Cero llamadas GLS.\n2. Se capturo el codigo, esquema y contadores en modo lectura. Se revisaron\n   las 39 tablas y las 13 migraciones antes de introducir cambios.\n3. Se implementaron modelos y repositorio neutrales respecto al proveedor.\n   Las claves privadas siguen en el mecanismo anterior: solo se referencia\n   el secreto desde carrier_accounts.\n4. Se implementaron observaciones cifradas, eventos versionados, documentos\n   privados y busqueda local acotada, sin invocar conectores.\n5. Se implemento el coordinador de un solo intento y el diario duradero.\n   Recibos cifrados independientes de la transaccion de negocio, fallback\n   cifrado en PostgreSQL y replay exclusivamente local.\n6. Se reutilizo synchronizations para trabajos administrativos de lectura,\n   sin activar scheduler/worker ni importar datos reales.\n7. Se implemento el nucleo de reservas de cuota, no una promesa de cuota\n   ilimitada. Se conserva el ledger anterior y su agregacion diaria.\n8. Primera ronda: 311 correctas, dos fallos. Se corrigio el control de cuenta\n   al deduplicar documentos y el empaquetado de la herramienta documental.\n9. Rondas posteriores: 318 correctas; ronda final ampliada: 319 correctas\n   en 36,59 segundos, incluyendo coste de excepciones fuera de horario. Se\n   comprobo ademas upgrade 13 a 16, conservacion de datos sinteticos y\n   serializacion con cuatro migradores concurrentes.\n10. Se genero backup fresco y se restauro realmente antes de migrar.\n11. Se detuvo brevemente solo 88, se verificaron hashes para no pisar cambios,\n   se instalaron 23 ficheros y se aplicaron 014-016. Se compararon todas las\n   columnas anteriores antes de arrancar el servicio.\n12. health/ready HTTP 200. PostgreSQL, 88 y 85 activos. Se verificaron rutas\n   privadas sin sesion: redireccion a login, no acceso anonimo.\n13. Se prepararon los informes sanitizados y un release documental aprobado\n   expresamente. El cambio de politica respeta el interruptor del operador\n   bajo bloqueo compartido con el control administrativo.\n\nNo se han creado/modificado/anulado expediciones. No hay impresiones,\ndescargas de etiquetas/POD, importaciones masivas, cierre, cambios de UID\no solicitudes OAuth. Contadores originales conservados.\n\n## Registro historico: etapa A\n\n## 06/11/2026 - preparacion A\n\n1. Leida la orden operativa y fijado el primer hito independiente del resto.\n2. Capturado inventario de codigo, tests y contadores antes de editar.\n3. Backup PostgreSQL en formato custom con snapshot consistente.\n4. Restauracion real en base temporal: 39 tablas y 59 indices, filas/huellas identicas.\n5. Eliminada exclusivamente la base temporal de verificacion.\n6. Backup privado de aplicacion/configuracion y activos locales; permisos restrictivos.\n7. Implementado servicio documental minimo, sin dependencias de la aplicacion ni PostgreSQL.\n8. Implementado control exclusivo de administradores en el puerto 88 con CSRF y registro.\n9. Preparada lista explicita de informes completos con sanitizacion, revision e integridad.\n\nLa primera preparacion del backup encontro un problema de permisos en el\ndirectorio temporal y se corrigio antes de cualquier despliegue. No se\nmodifico la base operativa ni se utilizo un backup sin verificar.\n\nNo se han ejecutado operaciones GLS, impresiones ni migraciones de negocio.\n\n## Despliegue y aceptacion tecnica\n\n- Instalado servicio con usuario dedicado sin login; estado inicial deshabilitado.\n- Autoensayo dentro de systemd: rutas privadas inaccesibles, publicacion de solo\n  lectura, connect bloqueado y contenido verificado. Todos los controles correctos.\n- El primer arranque recibio SIGSYS al comprobar connect; se configuro EPERM\n  sin retirar el filtro. El servicio arranco despues correctamente.\n- La proteccion de hashes detuvo la sustitucion de una unidad distinta de la\n  linea base; se reconocio exclusivamente el hash del primer intento propio.\n  No se aceptaron cambios arbitrarios ni se sobrescribieron ediciones ajenas.\n- Servicio 88 reiniciado controladamente; health/ready 200, sin nueva migracion.\n- Activacion temporal mediante el mismo componente de control: indice y manifiesto\n  200, 26 representaciones con hash correcto, HEAD sin body, POST 405, traversal y\n  directory listing 404. Desactivacion: nuevas solicitudes y condicionales 503.\n- Acciones de aceptacion registradas como proceso de despliegue, no como usuario\n  humano. Canal devuelto a deshabilitado. Verificacion humana del 88 pendiente.\n\nLa preparacion v2 incorpora esta evidencia sin modificar los informes originales\nni exponer el dump/configuracion privados. El responsable publica el HTTPS externo.\n"}