# TEST_RESULTS

## Regresion del menu lateral 88 - 06/11/2026

**389 tests correctos en 86,12 segundos**, incluidos los 374 anteriores y
15 nuevos de navegacion. Base PostgreSQL temporal eliminada al terminar,
datos sinteticos, TCP y DNS externos bloqueados por los fixtures existentes.
No se utilizaron credenciales ni expediciones GLS reales como datos de prueba.
SHA-256 del transcript privado:
`b407bf0ddebbb5d36e87b7a5aa6a6a91f1095b25c609f6ae909b49342bc08d60`.

Cobertura nueva: seis categorias y permisos de enlaces intactos para admin,
operator y viewer; seleccion unica por ruta mas especifica; rutas hijas;
prefijos similares no coincidentes; apertura de categoria activa; estructura
ul/li/a; asset CSS versionado por hash; reglas verticales y ajuste de textos.

### Navegador

Chromium con las plantillas/CSS reales y contenido sintetico. Todas las
peticiones se interceptaron localmente; no accedio a servicios externos.

| Resolucion | CSS actual | CSS anterior simulado |
|---|---|---|
| 1024 x 768 | Correcto | Correcto |
| 1280 x 800 | Correcto | Correcto |
| 1440 x 900 | Correcto | Correcto |
| 1920 x 1080 | Correcto | Correcto |

Ocho escenarios: seis categorias, 28 enlaces, filas independientes sin
solapamiento ni overflow horizontal, ajuste de textos largos, expansion y
contraccion con raton/Enter, unico aria-current y scroll propio sin mover la
pagina. Cinco rutas adicionales comprobaron seleccion de paginas hijas.
Las capturas se inspeccionaron visualmente; no son sesiones de usuario reales.

### Servicio desplegado

Siete GET autenticados: Inicio, Explorer, Importador, Usuarios, Diagnostico,
Knowledge Base y Docs Oficiales; todos HTTP 200, seis grupos y 28 enlaces,
un enlace activo y su grupo abierto. Token tecnico temporal no persistido.
Health, ready, login y CSS nuevo: HTTP 200. Hash del CSS servido igual al
desplegado. Comparacion estructural de GROUPS y mutation_roles sin cambios;
web.py solo incorpora la ruta actual al contexto de navegacion.

Sin migraciones ni cambios de cuentas, permisos, cuotas o bloqueos operativos.
Cero llamadas GLS, cero impresiones. iClientes PRODUCCION 13 y el historico
TEST/laboratorio 11 permanecen sin cambios; total api_requests 24.

## Prueba real GetExpCli - 06/11/2026

Tres llamadas reales autorizadas, tres HTTP 200 con Error "No se encuentra la
expedicion". Prueba de importacion funcional NO SUPERADA, no fallo de transporte.
Cero expediciones, eventos, bultos y documentos. No se inventan estados.

Cinco pruebas nuevas del control de un solo uso: correctas, exclusivamente con
mocks y UID ficticio. La bateria previa de etapa D mantiene 374 pruebas
correctas; no se repitio contra credenciales reales. Las respuestas reales se
analizaron como evidencia operacional, no como fixtures de los tests.

Tres GET autenticados del buscador: HTTP 200 y cero resultados. Sin duplicados,
claves foraneas invalidas ni elementos huerfanos. En proceso nuevo se recuperan
ledger, reservas y errores persistidos. Persistencia de expedicion real:
NO VALIDADA, ya que GLS no devolvio ninguna. Presupuesto agotado: no mas GLS.

## Registro anterior de pruebas

## Etapa D - pruebas sin conexion GLS

Resultado final: 374 passed in 83.27s. SHA-256 del informe completo:
b3d0995bc040d38755284720bdd38320b2aa3db4ffec668a238610b75892e142.
Actualizacion 17 a 18 correcta, cuatro migradores, filas existentes preservadas.
Tres comprobaciones ASGI adicionales tras el ultimo enlace de interfaz: 3 passed
in 4.72s; SHA-256 b3519d39d30eb6a2cdf4a22aedbf203eb4bbdd50710f2870398f6fa1d42c3de0.
Servicios activos, ready 80/88 HTTP 200, rutas anonimas privadas 303 /login,
seis grupos renderizados y worker bloqueado calls=0. Sin captura de navegador.

Bateria completa en PostgreSQL temporal y upgrade 17 a 18 con cuatro migradores.
Las conexiones TCP/DNS externas estan prohibidas por los fixtures. Identidades,
partes, SOAP, etiquetas y fallos son sinteticos; ningun UID real en los tests.

Cobertura nueva: adaptador de creacion, separacion TEST/PRODUCCION, referencia
segura de credencial, respuesta SOAP, unicidad del intento, IDs/eventos,
etiqueta de la misma respuesta, fallo del commit y replay sin nueva llamada,
centros cifrados, habitual, revisiones y snapshots inmutables; worker pausado,
reserva, consumo, reanudacion, fallo remoto, respuesta vacia, identidad distinta,
reinicio tras fallo local y pausa durante una lectura. Regresiones anteriores
incluidas, mas navegacion/permisos/CSRF y escritura HTTP parcialmente transmitida.

Segunda pasada completa: 366 correctas en 50,63 segundos. Se anade una bateria
final ampliada, cuyo resultado y SHA-256 se registraran a continuacion.
No se afirma una nueva validacion contra GLS ni impresion fisica en esta etapa.

## Registro historico de pruebas

## Etapa C - resultado final

349 pruebas correctas en 58,29 segundos. Incluye las 319 previas de etapa B.
Reporte privado stage-c-test-results.txt. SHA-256:
`f81e6fd94dc48e0a6a6aadd90a56ab58b6d2487af544a76fb99fe16fc1b30e7f`.

Base PostgreSQL temporal nueva; sin restaurar datos reales como fixtures.
Upgrade 16 a 17: cuatro migradores concurrentes, una aplicacion de 017,
filas sinteticas anteriores conservadas. La base temporal se elimina.

| Area | Prueba |
|---|---|
| JSON documental | Indice, Markdown completo, bundle deduplicado, MIME y hash |
| Fragmentos | Documento grande UTF-8 reconstruido exactamente por offsets y hashes |
| Publicacion | Desactivacion, integridad, metodos, traversal y consultas invalidas |
| Borradores | Cifrado, guardado parcial, clave de creacion, CAS y propietario/admin |
| Validacion | CP, reembolso/portes y campos adicionales no habilitados rechazados |
| Intento unico | Simulacion concurrente produce una sola operacion y etiqueta |
| Preflight | Cuota local desactivada: cero intentos, vuelta a revision manual |
| Aislamiento | Cuenta local sin UID, IDs SIM y namespace distinto; sin api_requests |
| Conciliacion | Fallo de commit posterior a respuesta; replay local sin segundo sender |
| Fallos | Timeout y SOAP 500 simulados no provocan reenvio |
| Permisos | Lectura, operador, admin, usuario inactivo y audiencias separadas |
| Login | Acceso correcto/incorrecto, CSRF y cookies HttpOnly/SameSite |
| UI operativa | Guardado, revision, confirmacion simulada, resultado, ficha y JPG |
| Creacion real | POST autenticado con CSRF valido devuelve 423 |
| Busqueda | Periodos, combinaciones, cuenta, destinatario, referencias e IDs |
| Paginacion | 29 expediciones sinteticas, paginas estables y sin solapamiento |
| Patrones | Porcentaje/guion bajo literales; sin ampliar por comodines del usuario |
| Importador | Duplicados y otra agencia, ambiguos, revision firmada y trabajo pausado |
| Administracion | Acceso admin/CSRF, edicion de politica, excepcion y preparacion POD |
| Limites | Formulario operativo demasiado grande rechazado con 413 |

Guard general: TCP y DNS Python prohibidos. Guard adicional en tests C:
IClientesSecretStore.get_uid e IClientesSoapTransport.post_once producen
AssertionError si se invocan. Se usa clave criptografica generada solo para
tests, usuarios falsos y PostgreSQL por socket Unix.

### Comprobaciones en servicio activo

80 health: 200 JSON; ready: 200 JSON. Login: 200 HTML, cookie HttpOnly.
80 drafts/shipments sin sesion: 303 a /login. 88 herramientas nuevas sin
sesion: 303 a /login. 88 health/ready: 200. JSON 85: 200.
54 tablas, 111 indices, 17 migraciones. Nuevas tablas de negocio sin datos
de prueba insertados en activo. Ledger GLS intacto: 21 filas totales.

No se ha realizado una prueba visual con un navegador automatizado: el
runtime de navegador no estaba disponible en el entorno de ejecucion.
Las pantallas y formularios se verificaron por ASGI/HTML con datos sinteticos;
queda revision visual humana en navegador de escritorio/movil.
El fichero JS de autocompletado legacy no se ha modificado; la cifra anterior
corresponde a la suite pytest, no a una ejecucion adicional del runner JS.

## Registro historico: etapa B

## Etapa B - resultado final

319 pruebas correctas en 36,59 segundos. Incluye las 293 regresiones previas.
Se ejecutaron en la VM, contra PostgreSQL temporal separado y datos sinteticos.
La base temporal se elimino al terminar. No se restauro informacion de
expediciones reales como fixture y no hubo llamadas a GLS.

Transcript privado: stage-b-test-results.txt en el directorio de build.
SHA-256: `a0ca7c743addddd07ab5f9661dec65730aefdb69d4b59e7777bf957c8a71d882`.

### Cobertura nueva

| Area | Comprobacion |
|---|---|
| Migraciones | Fresh schema, repeticion idempotente, fallo SQL con rollback |
| Actualizacion | 13 a 16 con filas previas sinteticas conservadas |
| Concurrencia | Cuatro migradores serializados; 12 ingestas concurrentes sin duplicados |
| Integridad | Cuenta y transportista; referencias cruzadas rechazadas |
| Identidad | Ceros iniciales, aislamiento entre cuentas, conflictos sin fusion automatica |
| Historico | Eventos revisados, observaciones antiguas sin degradar proyeccion actual |
| Privacidad | Observaciones/documentos cifrados, ficheros 0400, directorios privados |
| Documentos | Hash, original inmutable, deduplicacion y validacion de cuenta previa |
| Creacion | Un solo sender ante concurrencia, idempotencia y bloqueo por defecto |
| Conciliacion | Respuesta guardada antes de fallo de commit; replay local tras reinicio |
| Ambiguedad | Timeout/HTTP 500/respuesta invalida no provocan una segunda alta |
| Evidencia | Fallback cifrado en BD si no se puede crear el fichero de respuesta |
| Cuotas | 50 %, reserva de prioridad, cap oficial, excepciones con permiso y caducidad |
| Reservas | Concurrencia, varios limites atomicos, refund solo si no se envio |
| Ledger | Reserva unica, api_requests idempotente y agregacion diaria sin doble incremento |
| Ventanas | Periodo movil, horario, cooldown 429 y reinicio con reserva persistente |
| Excepciones horarias | Cada llamada fuera de horario consume su coste excepcional acotado |
| Trabajos | Pausa, reanudacion, lease, checkpoints, fallo parcial y reintentos acotados |
| Escrituras | No se permiten trabajos de creacion en la cola de lecturas |
| Acceso | Administracion requiere login; ruta nueva sin POST de mutacion |

El guard de tests impide conexiones Python TCP y DNS. PostgreSQL utiliza
socket Unix y una DSN con prefijo de base de pruebas validado. No se prueban
credenciales reales ni la autenticacion de GLS en este encargo.

### Verificaciones de despliegue

Backup restaurado: 39 tablas, 59 indices y hashes de filas iguales.
Tras migrar: 53 tablas, 106 indices, 16 versiones; health/ready 200.
Todas las columnas preexistentes preservadas, salvo cambios de metadatos
previstos en tres tablas. Directorios de evidencia y activos: 0700.

Ruta /admin/platform sin sesion: 303 a /login; /login: 200.
Knowledge Base sin sesion: 303 a /login. El canal 85 mantiene acceso anonimo
solo a copias PUBLIC_REVIEW. Ver AUDIT85_DIAGNOSTIC para pruebas externas.

### Riesgo residual y limites de prueba

No se simulo un corte electrico real ni disco fisicamente averiado. Se
simularon fallos de commit, transporte y escritura; la durabilidad usa
fsync y reemplazos/enlaces atomicos, pero depende del almacenamiento local.
No hay alta de produccion ni validacion de un sender real conectado a
etapa B. Eso requiere etapa C y nueva autorizacion antes de enviar.
Los clientes legacy no quedan automaticamente migrados al nuevo gestor.

## Registro historico: etapa A

Las pruebas unitarias se ejecutan en una copia privada, con conexiones TCP
y DNS bloqueadas por conftest y DSN que no puede alcanzar la base operativa.
Se conservan todos los tests anteriores.

Nuevas pruebas: desactivacion por defecto e inmediata, GET/HEAD, denegacion
de escritura, path traversal, archivos no permitidos, symlinks, manipulacion
de contenido, permisos inseguros, HTML activo, referencias externas,
campos secretos estructurados, inventario exacto de secretos y codificaciones,
aislamiento de imports, administradores/CSRF y fallo del registro de activacion.

Primera regresion completa: 284 tests correctos. La ampliacion de casos
detecto un defecto en el orden de verificacion de metadatos PNG; corregido
antes del despliegue. El resultado definitivo se incorpora al finalizar.

Las comprobaciones reales de despliegue se registran separadamente de los
tests unitarios; un test ASGI no se presenta como una sesion humana real.

Regresion definitiva antes de despliegue: **292 tests correctos en 2,87 s**.
No se utilizo el UID real como fixture ni se permitio trafico TCP/DNS.
No hubo conexion a la base operativa durante los tests.

Repeticion final antes del despliegue: 292 correctos en 2,91 s. Se anade
ademas comprobacion de renderizado del formulario real para la entrega final.

## Aceptacion real del servicio

- Servicio 85 activo, sin autenticacion ni Set-Cookie; default deshabilitado.
- Sandbox: lectura privada denegada, escritura denegada, connect denegado.
- Panel existente 88: health/ready 200; acceso anonimo al control 303 a login.
- Activacion temporal tecnica: indice/manifiesto 200; 26 representaciones
  completas verificadas contra SHA-256; HEAD no entrega body; POST devuelve 405.
- Traversal y directory listing: 404.
- Desactivacion inmediata: 503 en nuevas solicitudes, incluso con If-None-Match
  e If-Modified-Since. Respuestas no-store, CSP sin scripts y noindex.
- Sesion humana del panel 88 y publicacion externa HTTPS pendientes de Juan.

No hubo llamadas GLS ni impresiones durante ninguna comprobacion.

## Resultado final

**293 tests correctos en 2,88 s**, incluyendo la plantilla administrativa
real y todos los tests anteriores. Log privado identificado por SHA-256:
`e30aa1bc9572f03582a5c4df507cac0b9bfc3727481092731b3340e3843b829e`.
