{"id":"TEST_RESULTS","title":"Resultados de pruebas","version":"nav88-20261106-v1","date":"2026-11-06T13:00:28.117945+01:00","classification":"PUBLIC_REVIEW","sha256":"fea765616621f19b8de6a799d4f0799ab2940a067be94f9d40905bd819ffa324","read_url":"/api/review/TEST_RESULTS","total_bytes":13758,"fragment_count":1,"document_sha256":"fea765616621f19b8de6a799d4f0799ab2940a067be94f9d40905bd819ffa324","fragmented":false,"content_markdown":"# TEST_RESULTS\n\n## Regresion del menu lateral 88 - 06/11/2026\n\n**389 tests correctos en 86,12 segundos**, incluidos los 374 anteriores y\n15 nuevos de navegacion. Base PostgreSQL temporal eliminada al terminar,\ndatos sinteticos, TCP y DNS externos bloqueados por los fixtures existentes.\nNo se utilizaron credenciales ni expediciones GLS reales como datos de prueba.\nSHA-256 del transcript privado:\n`b407bf0ddebbb5d36e87b7a5aa6a6a91f1095b25c609f6ae909b49342bc08d60`.\n\nCobertura nueva: seis categorias y permisos de enlaces intactos para admin,\noperator y viewer; seleccion unica por ruta mas especifica; rutas hijas;\nprefijos similares no coincidentes; apertura de categoria activa; estructura\nul/li/a; asset CSS versionado por hash; reglas verticales y ajuste de textos.\n\n### Navegador\n\nChromium con las plantillas/CSS reales y contenido sintetico. Todas las\npeticiones se interceptaron localmente; no accedio a servicios externos.\n\n| Resolucion | CSS actual | CSS anterior simulado |\n|---|---|---|\n| 1024 x 768 | Correcto | Correcto |\n| 1280 x 800 | Correcto | Correcto |\n| 1440 x 900 | Correcto | Correcto |\n| 1920 x 1080 | Correcto | Correcto |\n\nOcho escenarios: seis categorias, 28 enlaces, filas independientes sin\nsolapamiento ni overflow horizontal, ajuste de textos largos, expansion y\ncontraccion con raton/Enter, unico aria-current y scroll propio sin mover la\npagina. Cinco rutas adicionales comprobaron seleccion de paginas hijas.\nLas capturas se inspeccionaron visualmente; no son sesiones de usuario reales.\n\n### Servicio desplegado\n\nSiete GET autenticados: Inicio, Explorer, Importador, Usuarios, Diagnostico,\nKnowledge Base y Docs Oficiales; todos HTTP 200, seis grupos y 28 enlaces,\nun enlace activo y su grupo abierto. Token tecnico temporal no persistido.\nHealth, ready, login y CSS nuevo: HTTP 200. Hash del CSS servido igual al\ndesplegado. Comparacion estructural de GROUPS y mutation_roles sin cambios;\nweb.py solo incorpora la ruta actual al contexto de navegacion.\n\nSin migraciones ni cambios de cuentas, permisos, cuotas o bloqueos operativos.\nCero llamadas GLS, cero impresiones. iClientes PRODUCCION 13 y el historico\nTEST/laboratorio 11 permanecen sin cambios; total api_requests 24.\n\n## Prueba real GetExpCli - 06/11/2026\n\nTres llamadas reales autorizadas, tres HTTP 200 con Error \"No se encuentra la\nexpedicion\". Prueba de importacion funcional NO SUPERADA, no fallo de transporte.\nCero expediciones, eventos, bultos y documentos. No se inventan estados.\n\nCinco pruebas nuevas del control de un solo uso: correctas, exclusivamente con\nmocks y UID ficticio. La bateria previa de etapa D mantiene 374 pruebas\ncorrectas; no se repitio contra credenciales reales. Las respuestas reales se\nanalizaron como evidencia operacional, no como fixtures de los tests.\n\nTres GET autenticados del buscador: HTTP 200 y cero resultados. Sin duplicados,\nclaves foraneas invalidas ni elementos huerfanos. En proceso nuevo se recuperan\nledger, reservas y errores persistidos. Persistencia de expedicion real:\nNO VALIDADA, ya que GLS no devolvio ninguna. Presupuesto agotado: no mas GLS.\n\n## Registro anterior de pruebas\n\n## Etapa D - pruebas sin conexion GLS\n\nResultado final: 374 passed in 83.27s. SHA-256 del informe completo:\nb3d0995bc040d38755284720bdd38320b2aa3db4ffec668a238610b75892e142.\nActualizacion 17 a 18 correcta, cuatro migradores, filas existentes preservadas.\nTres comprobaciones ASGI adicionales tras el ultimo enlace de interfaz: 3 passed\nin 4.72s; SHA-256 b3519d39d30eb6a2cdf4a22aedbf203eb4bbdd50710f2870398f6fa1d42c3de0.\nServicios activos, ready 80/88 HTTP 200, rutas anonimas privadas 303 /login,\nseis grupos renderizados y worker bloqueado calls=0. Sin captura de navegador.\n\nBateria completa en PostgreSQL temporal y upgrade 17 a 18 con cuatro migradores.\nLas conexiones TCP/DNS externas estan prohibidas por los fixtures. Identidades,\npartes, SOAP, etiquetas y fallos son sinteticos; ningun UID real en los tests.\n\nCobertura nueva: adaptador de creacion, separacion TEST/PRODUCCION, referencia\nsegura de credencial, respuesta SOAP, unicidad del intento, IDs/eventos,\netiqueta de la misma respuesta, fallo del commit y replay sin nueva llamada,\ncentros cifrados, habitual, revisiones y snapshots inmutables; worker pausado,\nreserva, consumo, reanudacion, fallo remoto, respuesta vacia, identidad distinta,\nreinicio tras fallo local y pausa durante una lectura. Regresiones anteriores\nincluidas, mas navegacion/permisos/CSRF y escritura HTTP parcialmente transmitida.\n\nSegunda pasada completa: 366 correctas en 50,63 segundos. Se anade una bateria\nfinal ampliada, cuyo resultado y SHA-256 se registraran a continuacion.\nNo se afirma una nueva validacion contra GLS ni impresion fisica en esta etapa.\n\n## Registro historico de pruebas\n\n## Etapa C - resultado final\n\n349 pruebas correctas en 58,29 segundos. Incluye las 319 previas de etapa B.\nReporte privado stage-c-test-results.txt. SHA-256:\n`f81e6fd94dc48e0a6a6aadd90a56ab58b6d2487af544a76fb99fe16fc1b30e7f`.\n\nBase PostgreSQL temporal nueva; sin restaurar datos reales como fixtures.\nUpgrade 16 a 17: cuatro migradores concurrentes, una aplicacion de 017,\nfilas sinteticas anteriores conservadas. La base temporal se elimina.\n\n| Area | Prueba |\n|---|---|\n| JSON documental | Indice, Markdown completo, bundle deduplicado, MIME y hash |\n| Fragmentos | Documento grande UTF-8 reconstruido exactamente por offsets y hashes |\n| Publicacion | Desactivacion, integridad, metodos, traversal y consultas invalidas |\n| Borradores | Cifrado, guardado parcial, clave de creacion, CAS y propietario/admin |\n| Validacion | CP, reembolso/portes y campos adicionales no habilitados rechazados |\n| Intento unico | Simulacion concurrente produce una sola operacion y etiqueta |\n| Preflight | Cuota local desactivada: cero intentos, vuelta a revision manual |\n| Aislamiento | Cuenta local sin UID, IDs SIM y namespace distinto; sin api_requests |\n| Conciliacion | Fallo de commit posterior a respuesta; replay local sin segundo sender |\n| Fallos | Timeout y SOAP 500 simulados no provocan reenvio |\n| Permisos | Lectura, operador, admin, usuario inactivo y audiencias separadas |\n| Login | Acceso correcto/incorrecto, CSRF y cookies HttpOnly/SameSite |\n| UI operativa | Guardado, revision, confirmacion simulada, resultado, ficha y JPG |\n| Creacion real | POST autenticado con CSRF valido devuelve 423 |\n| Busqueda | Periodos, combinaciones, cuenta, destinatario, referencias e IDs |\n| Paginacion | 29 expediciones sinteticas, paginas estables y sin solapamiento |\n| Patrones | Porcentaje/guion bajo literales; sin ampliar por comodines del usuario |\n| Importador | Duplicados y otra agencia, ambiguos, revision firmada y trabajo pausado |\n| Administracion | Acceso admin/CSRF, edicion de politica, excepcion y preparacion POD |\n| Limites | Formulario operativo demasiado grande rechazado con 413 |\n\nGuard general: TCP y DNS Python prohibidos. Guard adicional en tests C:\nIClientesSecretStore.get_uid e IClientesSoapTransport.post_once producen\nAssertionError si se invocan. Se usa clave criptografica generada solo para\ntests, usuarios falsos y PostgreSQL por socket Unix.\n\n### Comprobaciones en servicio activo\n\n80 health: 200 JSON; ready: 200 JSON. Login: 200 HTML, cookie HttpOnly.\n80 drafts/shipments sin sesion: 303 a /login. 88 herramientas nuevas sin\nsesion: 303 a /login. 88 health/ready: 200. JSON 85: 200.\n54 tablas, 111 indices, 17 migraciones. Nuevas tablas de negocio sin datos\nde prueba insertados en activo. Ledger GLS intacto: 21 filas totales.\n\nNo se ha realizado una prueba visual con un navegador automatizado: el\nruntime de navegador no estaba disponible en el entorno de ejecucion.\nLas pantallas y formularios se verificaron por ASGI/HTML con datos sinteticos;\nqueda revision visual humana en navegador de escritorio/movil.\nEl fichero JS de autocompletado legacy no se ha modificado; la cifra anterior\ncorresponde a la suite pytest, no a una ejecucion adicional del runner JS.\n\n## Registro historico: etapa B\n\n## Etapa B - resultado final\n\n319 pruebas correctas en 36,59 segundos. Incluye las 293 regresiones previas.\nSe ejecutaron en la VM, contra PostgreSQL temporal separado y datos sinteticos.\nLa base temporal se elimino al terminar. No se restauro informacion de\nexpediciones reales como fixture y no hubo llamadas a GLS.\n\nTranscript privado: stage-b-test-results.txt en el directorio de build.\nSHA-256: `a0ca7c743addddd07ab5f9661dec65730aefdb69d4b59e7777bf957c8a71d882`.\n\n### Cobertura nueva\n\n| Area | Comprobacion |\n|---|---|\n| Migraciones | Fresh schema, repeticion idempotente, fallo SQL con rollback |\n| Actualizacion | 13 a 16 con filas previas sinteticas conservadas |\n| Concurrencia | Cuatro migradores serializados; 12 ingestas concurrentes sin duplicados |\n| Integridad | Cuenta y transportista; referencias cruzadas rechazadas |\n| Identidad | Ceros iniciales, aislamiento entre cuentas, conflictos sin fusion automatica |\n| Historico | Eventos revisados, observaciones antiguas sin degradar proyeccion actual |\n| Privacidad | Observaciones/documentos cifrados, ficheros 0400, directorios privados |\n| Documentos | Hash, original inmutable, deduplicacion y validacion de cuenta previa |\n| Creacion | Un solo sender ante concurrencia, idempotencia y bloqueo por defecto |\n| Conciliacion | Respuesta guardada antes de fallo de commit; replay local tras reinicio |\n| Ambiguedad | Timeout/HTTP 500/respuesta invalida no provocan una segunda alta |\n| Evidencia | Fallback cifrado en BD si no se puede crear el fichero de respuesta |\n| Cuotas | 50 %, reserva de prioridad, cap oficial, excepciones con permiso y caducidad |\n| Reservas | Concurrencia, varios limites atomicos, refund solo si no se envio |\n| Ledger | Reserva unica, api_requests idempotente y agregacion diaria sin doble incremento |\n| Ventanas | Periodo movil, horario, cooldown 429 y reinicio con reserva persistente |\n| Excepciones horarias | Cada llamada fuera de horario consume su coste excepcional acotado |\n| Trabajos | Pausa, reanudacion, lease, checkpoints, fallo parcial y reintentos acotados |\n| Escrituras | No se permiten trabajos de creacion en la cola de lecturas |\n| Acceso | Administracion requiere login; ruta nueva sin POST de mutacion |\n\nEl guard de tests impide conexiones Python TCP y DNS. PostgreSQL utiliza\nsocket Unix y una DSN con prefijo de base de pruebas validado. No se prueban\ncredenciales reales ni la autenticacion de GLS en este encargo.\n\n### Verificaciones de despliegue\n\nBackup restaurado: 39 tablas, 59 indices y hashes de filas iguales.\nTras migrar: 53 tablas, 106 indices, 16 versiones; health/ready 200.\nTodas las columnas preexistentes preservadas, salvo cambios de metadatos\nprevistos en tres tablas. Directorios de evidencia y activos: 0700.\n\nRuta /admin/platform sin sesion: 303 a /login; /login: 200.\nKnowledge Base sin sesion: 303 a /login. El canal 85 mantiene acceso anonimo\nsolo a copias PUBLIC_REVIEW. Ver AUDIT85_DIAGNOSTIC para pruebas externas.\n\n### Riesgo residual y limites de prueba\n\nNo se simulo un corte electrico real ni disco fisicamente averiado. Se\nsimularon fallos de commit, transporte y escritura; la durabilidad usa\nfsync y reemplazos/enlaces atomicos, pero depende del almacenamiento local.\nNo hay alta de produccion ni validacion de un sender real conectado a\netapa B. Eso requiere etapa C y nueva autorizacion antes de enviar.\nLos clientes legacy no quedan automaticamente migrados al nuevo gestor.\n\n## Registro historico: etapa A\n\nLas pruebas unitarias se ejecutan en una copia privada, con conexiones TCP\ny DNS bloqueadas por conftest y DSN que no puede alcanzar la base operativa.\nSe conservan todos los tests anteriores.\n\nNuevas pruebas: desactivacion por defecto e inmediata, GET/HEAD, denegacion\nde escritura, path traversal, archivos no permitidos, symlinks, manipulacion\nde contenido, permisos inseguros, HTML activo, referencias externas,\ncampos secretos estructurados, inventario exacto de secretos y codificaciones,\naislamiento de imports, administradores/CSRF y fallo del registro de activacion.\n\nPrimera regresion completa: 284 tests correctos. La ampliacion de casos\ndetecto un defecto en el orden de verificacion de metadatos PNG; corregido\nantes del despliegue. El resultado definitivo se incorpora al finalizar.\n\nLas comprobaciones reales de despliegue se registran separadamente de los\ntests unitarios; un test ASGI no se presenta como una sesion humana real.\n\nRegresion definitiva antes de despliegue: **292 tests correctos en 2,87 s**.\nNo se utilizo el UID real como fixture ni se permitio trafico TCP/DNS.\nNo hubo conexion a la base operativa durante los tests.\n\nRepeticion final antes del despliegue: 292 correctos en 2,91 s. Se anade\nademas comprobacion de renderizado del formulario real para la entrega final.\n\n## Aceptacion real del servicio\n\n- Servicio 85 activo, sin autenticacion ni Set-Cookie; default deshabilitado.\n- Sandbox: lectura privada denegada, escritura denegada, connect denegado.\n- Panel existente 88: health/ready 200; acceso anonimo al control 303 a login.\n- Activacion temporal tecnica: indice/manifiesto 200; 26 representaciones\n  completas verificadas contra SHA-256; HEAD no entrega body; POST devuelve 405.\n- Traversal y directory listing: 404.\n- Desactivacion inmediata: 503 en nuevas solicitudes, incluso con If-None-Match\n  e If-Modified-Since. Respuestas no-store, CSP sin scripts y noindex.\n- Sesion humana del panel 88 y publicacion externa HTTPS pendientes de Juan.\n\nNo hubo llamadas GLS ni impresiones durante ninguna comprobacion.\n\n## Resultado final\n\n**293 tests correctos en 2,88 s**, incluyendo la plantilla administrativa\nreal y todos los tests anteriores. Log privado identificado por SHA-256:\n`e30aa1bc9572f03582a5c4df507cac0b9bfc3727481092731b3340e3843b829e`.\n"}