$ turbo run test • turbo 2.9.14 • Packages in scope: @metis/assets, @metis/companies, @metis/core, @metis/identity, @metis/relationship-contracts, @metis/resources, @metis/server, @metis/web, @repo/rdx-ddd, @repo/rdx-ui, @repo/rdx-utils, @repo/shadcn-ui, @repo/typescript-config • Running test in 13 packages • Remote caching disabled @metis/core:test: cache bypass, force executing 2283a7af50b4c3f8 @repo/rdx-ui:test: cache bypass, force executing dd1af9cec005380f @repo/rdx-ddd:test: cache bypass, force executing b722cdfdd985a9bd @metis/relationship-contracts:test: cache bypass, force executing 97138537b462262f @metis/core:test: $ node --import tsx --test src/common/dto/response/get-health.response.dto.test.ts src/web/navigation/shared/browser-navigation.test.ts src/web/http/shared/api/csrf-fetch.test.ts @metis/relationship-contracts:test: $ node --import tsx --test --test-isolation=none src/*.test.ts @repo/rdx-ui:test: $ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/select-with-action.test.tsx src/selection-components.test.tsx src/entity-list.test.tsx src/compact-collections.test.tsx src/entity-column-visibility.test.tsx src/time-line.test.tsx src/count-badge.test.tsx src/scrollable-tabs.test.tsx src/field-sections.test.tsx src/phone-link.test.tsx src/lib/reorder-items.test.ts src/lib/text-search.test.ts src/remote-option-list.test.tsx src/dialog-help.test.tsx @repo/rdx-ddd:test: $ node --import tsx --test src/domain-model.test.ts @metis/core:test: ✔ el contrato de estado exige un timestamp UTC y un estado conocido (9.008758ms) @metis/core:test: ✔ el endpoint de estado no acepta parámetros de consulta (0.506404ms) @metis/core:test: ✔ las escrituras leen la sesión actual de Query y siguen su rotación y eliminación (122.650593ms) @metis/core:test: ✔ GET, HEAD y OPTIONS funcionan sin sesión y no envían tokens suministrados por el llamador (1.564411ms) @metis/core:test: ✔ mantiene cuerpos JSON, binarios, headers, cancelación y respuestas de error sin reintentar (9.27366ms) @metis/core:test: ✔ rechaza tokens ausentes o inválidos y destinos externos antes de enviar una petición (2.616116ms) @metis/relationship-contracts:test: ✔ referencias UUID estables, normalizadas, inmutables y con proveedor coherente (22.284544ms) @metis/relationship-contracts:test: ✔ namespaces canónicos, sin identificadores de tabla, espacios ni segmentos vacíos (7.203646ms) @metis/relationship-contracts:test: ✔ el catálogo valida propietarios, namespaces, duplicados y definiciones (7.271947ms) @metis/relationship-contracts:test: ✔ el catálogo crea una copia profundamente inmutable sin congelar la entrada (2.178814ms) @metis/relationship-contracts:test: ✔ relaciones dirigidas, simétricas y derivadas respetan su semántica declarativa (1.816211ms) @metis/relationship-contracts:test: ✔ consulta estricta: límites, cursores y ausencia de privilegios del navegador (4.191027ms) @metis/relationship-contracts:test: ✔ validación de ámbito, tipo y sentido de consulta sin conceder autorización (3.193421ms) @metis/relationship-contracts:test: ✔ orígenes y páginas conservan referencias sin mezclar compañías (3.06012ms) @metis/relationship-contracts:test: ✔ servicios de prueba por lotes y errores compatibles con Result de Metis (1.215908ms) @metis/core:test: ✔ estado de ficha: tablas independientes, aislamiento entre quince propietarios y metadatos ajenos conservados (11.059572ms) @metis/core:test: ✔ estado de ficha: metadatos malformados, ámbitos externos y valores incompatibles no se restauran (6.869444ms) @metis/core:test: ✔ History mantiene URL, filtros, Atrás/Adelante, cierre y suscripciones sin entradas duplicadas (3.986226ms) @metis/core:test: ✔ las redirecciones internas rechazan destinos externos, barras invertidas y caracteres de control (0.368503ms) @metis/core:test: ✔ el retorno reutiliza la entrada exacta del listado y conserva el estado ajeno (0.545304ms) @metis/core:test: ✔ el contexto de retorno valida versión, coordenadas, ámbito y filtros sin guardar registros (5.041032ms) @metis/core:test: ✔ las consultas Unicode válidas no pierden contexto al superar 2000 caracteres codificados (7.427448ms) @metis/core:test: ✔ retorno de detalle y listado conviven sin aceptar el ámbito de otro propietario (0.893606ms) @metis/core:test: ℹ tests 14 @metis/core:test: ℹ suites 0 @metis/core:test: ℹ pass 14 @metis/core:test: ℹ fail 0 @metis/core:test: ℹ cancelled 0 @metis/core:test: ℹ skipped 0 @metis/core:test: ℹ todo 0 @metis/core:test: ℹ duration_ms 1078.868884 @metis/relationship-contracts:test: ✔ el grafo de dependencias del paquete es acíclico y ajeno a módulos funcionales (51.05583ms) @metis/relationship-contracts:test: ✔ las importaciones internas de producción no contienen ciclos ni imports privados (2.145114ms) @metis/relationship-contracts:test: ✔ capacidades semánticas explícitas sin registrar proveedores ficticios (1.698711ms) @metis/relationship-contracts:test: ✔ rol semántico opcional conserva la compatibilidad de vistas comunes sin metadatos libres (3.08212ms) @metis/relationship-contracts:test: ℹ tests 13 @metis/relationship-contracts:test: ℹ suites 0 @metis/relationship-contracts:test: ℹ pass 13 @metis/relationship-contracts:test: ℹ fail 0 @metis/relationship-contracts:test: ℹ cancelled 0 @metis/relationship-contracts:test: ℹ skipped 0 @metis/relationship-contracts:test: ℹ todo 0 @metis/relationship-contracts:test: ℹ duration_ms 1051.891709 @repo/rdx-ddd:test: ✔ UniqueID genera UUID v7 distintos, conserva UUID existentes y rechaza identificadores inválidos (16.366106ms) @repo/rdx-ddd:test: ✔ los Value Objects validan y comparan valores semánticos por tipo (4.798631ms) @repo/rdx-ddd:test: ✔ entidades y agregados comparan identidad y tipo, independientemente de sus atributos (0.803406ms) @repo/rdx-ddd:test: ℹ tests 3 @repo/rdx-ddd:test: ℹ suites 0 @repo/rdx-ddd:test: ℹ pass 3 @repo/rdx-ddd:test: ℹ fail 0 @repo/rdx-ddd:test: ℹ cancelled 0 @repo/rdx-ddd:test: ℹ skipped 0 @repo/rdx-ddd:test: ℹ todo 0 @repo/rdx-ddd:test: ℹ duration_ms 1384.872559 @repo/rdx-ui:test: ✔ la tabla compacta conserva semántica y enlaces sin herramientas de exploración (31.515565ms) @repo/rdx-ui:test: ✔ los valores ausentes comparten criterio con EntityTable y cero permanece visible (1.781515ms) @repo/rdx-ui:test: ✔ carga y error sin datos no afirman vacío; caché obsoleta conserva registros (9.561981ms) @repo/rdx-ui:test: ✔ la ampliación identifica el contenido controlado sin añadir controles a colecciones pequeñas (5.89255ms) @repo/rdx-ui:test: ✔ EntityTable mantiene búsqueda, columnas y paginación con su contrato anterior (41.59285ms) @repo/rdx-ui:test: ✔ preview controlado: recuperar la ampliación muestra el origen con identidad estable sin perder el modo local (9.788482ms) @repo/rdx-ui:test: ✔ contador: conserva cero y formatea el total por idioma (29.299689ms) @repo/rdx-ui:test: ✔ contador: carga y error muestran ausencia de total, conservando una cifra anterior si existe (3.664324ms) @repo/rdx-ui:test: ✔ la ayuda breve respeta la capacidad efectiva, también con fuentes ampliadas (1.348409ms) @repo/rdx-ui:test: ✔ auto y expanded reservan 40rem al formulario y 20rem al panel (0.300402ms) @repo/rdx-ui:test: ✔ el contenido inline conserva descripción, ámbito, ejemplos, orientación e icono (11.170672ms) @repo/rdx-ui:test: ✔ las columnas elegidas se restauran al volver a crear la tabla, incluidas las que llegan después (75.337334ms) @repo/rdx-ui:test: ✔ las preferencias quedan aisladas por lista y no se aplican cuando no se solicita persistencia (15.775333ms) @repo/rdx-ui:test: ✔ datos locales inválidos no rompen el listado y solo se aceptan valores booleanos (0.513704ms) @repo/rdx-ui:test: ✔ almacenamiento bloqueado o sin cuota permite seguir utilizando la selección local (0.414704ms) @repo/rdx-ui:test: ✔ buscar columnas ignora tildes y mayúsculas, conserva ñ y no modifica visibilidad (1.18661ms) @repo/rdx-ui:test: ✔ los grupos conservan orden, omiten vacíos y deduplican IDs sin perder columnas sin grupo (0.553605ms) @repo/rdx-ui:test: ✔ restaurar preferencias vacías recupera defaults actuales sin tocar otras tablas (11.717498ms) @repo/rdx-ui:test: ✔ los contadores distinguen visibilidad, total y coincidencias en es/en (0.350203ms) @repo/rdx-ui:test: ✔ listado remoto: recupera columnas por ámbito y protege nombre y acciones (20.808175ms) @repo/rdx-ui:test: ✔ los rangos vacíos y la última página nunca muestran índices fuera del conjunto (2.641923ms) @repo/rdx-ui:test: ✔ el listado pagina el conjunto y repite su rango conservando controles accesibles (63.250832ms) @repo/rdx-ui:test: ✔ la búsqueda local reduce el conjunto completo antes de paginar y permite limpiarla (12.351804ms) @repo/rdx-ui:test: ✔ el texto formado solo por espacios se puede borrar sin confundir vacío con ausencia de coincidencias (10.492989ms) @repo/rdx-ui:test: ✔ la búsqueda genérica ignora acentos y Unicode equivalente, manteniendo ñ y el texto escrito (30.90046ms) @repo/rdx-ui:test: ✔ el orden inicial ascendente se indica en la cabecera y se aplica antes de paginar (9.955984ms) @repo/rdx-ui:test: ✔ una columna explícita puede establecer un orden inicial descendente (9.636781ms) @repo/rdx-ui:test: ✔ el orden inicial ignora acciones y columnas sin valor comparable (13.761716ms) @repo/rdx-ui:test: ✔ las tablas sin columnas ordenables conservan el orden recibido (10.250087ms) @repo/rdx-ui:test: ✔ el orden inicial mantiene la estabilidad en empates y se indica con el listado vacío (13.507914ms) @repo/rdx-ui:test: ✔ una búsqueda controlada conserva los resultados filtrados por la pantalla (5.646547ms) @repo/rdx-ui:test: ✔ carga, error y búsqueda vacía se distinguen de un listado sin registros (32.989977ms) @repo/rdx-ui:test: ✔ el rango y la configuración también se traducen en inglés (5.669147ms) @repo/rdx-ui:test: ✔ acciones: disparador de solo icono con etiqueta accesible y menú contextual (5.027842ms) @repo/rdx-ui:test: ✔ acciones: operación principal visible con nombre accesible y secundarias en el menú (6.166651ms) @repo/rdx-ui:test: ✔ acciones: conserva la restricción de la principal y evita menús sin secundarias (2.268619ms) @repo/rdx-ui:test: ✔ el estado activo se distingue en verde del inactivo (0.338703ms) @repo/rdx-ui:test: ✔ acciones: siempre última, compacta y anclada a la derecha, aunque se declare primero (7.291062ms) @repo/rdx-ui:test: ✔ los textos comunes mantienen claves, idiomas y parámetros del rango (0.237002ms) @repo/rdx-ui:test: ✔ las celdas vacías muestran un guion largo en es/en y conservan cero, textos y controles (163.066573ms) @repo/rdx-ui:test: ✔ las columnas opcionales empiezan ocultas sin ocultar identificación ni acciones obligatorias (5.796249ms) @repo/rdx-ui:test: ✔ Nombre ordena sin tildes ni mayúsculas antes de paginar, en español e inglés (11.201695ms) @repo/rdx-ui:test: ✔ Nombre tiene prioridad inicial aunque otra columna comparable aparezca antes (4.948042ms) @repo/rdx-ui:test: ✔ Nombre conserva empates entre acentos, mayúsculas y Unicode compuesto al ordenar descendente (4.345637ms) @repo/rdx-ui:test: ✔ paginación por cursor: navegación accesible y límites sin inventar totales (0.963908ms) @repo/rdx-ui:test: ✔ estados presentacionales: carga, datos anteriores y recuperación son mutuamente distinguibles (0.411203ms) @repo/rdx-ui:test: ✔ carga inicial conserva estructura, no anuncia cero registros y no fabrica acciones (6.395554ms) @repo/rdx-ui:test: ✔ refetch y error posterior muestran los datos disponibles sin skeletons (10.391887ms) @repo/rdx-ui:test: ✔ error inicial, vacío válido y filtros sin coincidencias tienen contenidos distintos en es/en (18.888159ms) @repo/rdx-ui:test: ✔ el contrato de navegación rechaza páginas mal formadas y ordenaciones desconocidas (0.569805ms) @repo/rdx-ui:test: ✔ navegación controlada ordena y pagina realmente sin alterar el consumidor no controlado (6.487755ms) @repo/rdx-ui:test: ✔ quitar sección conserva todos los campos y su obligatoriedad sin mutar el origen (2.973725ms) @repo/rdx-ui:test: ✔ copiar remapea secciones conservando campos y reglas con identidades independientes (0.471404ms) @repo/rdx-ui:test: ✔ secciones visuales ordenadas, abiertas inicialmente y campos sin sección (10.512488ms) @repo/rdx-ui:test: ✔ consulta compacta conserva grupos, campos sin sección y avisos sin tarjetas anidadas (3.818132ms) @repo/rdx-ui:test: ✔ pestañas de grupos conservan controles ocultos, orden y campos sin grupo, omitiendo grupos vacíos (16.088035ms) @repo/rdx-ui:test: ✔ el editor ofrece asas etiquetadas para secciones y campos, deshabilitadas al guardar (81.917989ms) @repo/rdx-ui:test: ✔ soltar antes o después del destino conserva el orden de los demás elementos (1.648411ms) @repo/rdx-ui:test: ✔ destinos inválidos y posiciones sin cambio no producen una nueva ordenación (8.598755ms) @repo/rdx-ui:test: ✔ reordenar mantiene identidades, secciones y obligatoriedad sin modificar los objetos (0.328802ms) @repo/rdx-ui:test: ✔ la comparación parcial pliega vocales, caja y representaciones Unicode equivalentes (12.233679ms) @repo/rdx-ui:test: ✔ ñ conserva identidad compuesta y descompuesta y otras escrituras no se transliteran (0.417703ms) @repo/rdx-ui:test: ✔ puntuación técnica, números y espacios interiores siguen siendo significativos (1.61611ms) @repo/rdx-ui:test: ✔ vacíos y valores sin texto no serializan objetos arbitrarios (0.375902ms) @repo/rdx-ui:test: ✔ formatea números españoles y conserva extensiones para visualización y llamada (1.40611ms) @repo/rdx-ui:test: ✔ preserva números internacionales no españoles sin inventar agrupaciones (0.322902ms) @repo/rdx-ui:test: ✔ el enlace telefónico usa el número formateado y mantiene un nombre accesible (8.323954ms) @repo/rdx-ui:test: ✔ selector remoto: el contenido gráfico conserva la selección y la etiqueta textual (47.632208ms) @repo/rdx-ui:test: ✔ selector remoto: selección compacta al principio, radios etiquetados y orden recibido sin paginación local (6.346041ms) @repo/rdx-ui:test: ✔ selector remoto: vacío, carga y error no se confunden y errores ocultan filas obsoletas (9.075459ms) @repo/rdx-ui:test: ✔ pestañas desplazables: conserva identidad, selección y etiquetas largas sin añadir focos al SSR (33.226614ms) @repo/rdx-ui:test: ✔ el selector agrupa la acción etiquetada sin convertirla en envío de formulario (40.836344ms) @repo/rdx-ui:test: ✔ el selector deshabilitado protege ambas acciones y admite selección sin botón (9.352379ms) @repo/rdx-ui:test: ✔ La capacidad contextual admite presupuestos propios sin acoplarlos al viewport (1.270411ms) @repo/rdx-ui:test: ✔ La pérdida de capacidad cierra sin abrir modal y los eventos repetidos no publican estado (1.20541ms) @repo/rdx-ui:test: ✔ selección visual: vacío con acciones separadas y ficha elegida sin controles de envío (21.35958ms) @repo/rdx-ui:test: ✔ selección visual: pendiente, deshabilitado y bloqueo protegen las acciones correspondientes (7.883767ms) @repo/rdx-ui:test: ✔ PickerList: búsqueda etiquetada, selección única y opciones indisponibles visibles (43.409765ms) @repo/rdx-ui:test: ✔ PickerList: estados de carga y vacío no presentan opciones falsas (16.950842ms) @repo/rdx-ui:test: ✔ el rango del selector usa la entidad y su plural, nunca el título de la acción (56.425375ms) @repo/rdx-ui:test: ✔ acciones multipaso: requisitos bloquean avance y guardado en cada paso (6.314353ms) @repo/rdx-ui:test: ✔ acciones multipaso: guardar pendiente impide avanzar y retroceder (2.33052ms) @repo/rdx-ui:test: ✔ línea temporal: conserva el orden aportado, fechas semánticas, autor y contenido (21.590039ms) @repo/rdx-ui:test: ✔ línea temporal vacía: muestra el mensaje del consumidor como estado (0.534203ms) @repo/rdx-ui:test: ℹ tests 84 @repo/rdx-ui:test: ℹ suites 0 @repo/rdx-ui:test: ℹ pass 84 @repo/rdx-ui:test: ℹ fail 0 @repo/rdx-ui:test: ℹ cancelled 0 @repo/rdx-ui:test: ℹ skipped 0 @repo/rdx-ui:test: ℹ todo 0 @repo/rdx-ui:test: ℹ duration_ms 3253.419804 @metis/resources:test: cache bypass, force executing 72bdf6e922e78d3b @metis/identity:test: cache bypass, force executing da6d5784f74ff7ef @metis/identity:test: $ node --import tsx --test src/api/domain/user.aggregate.test.ts src/api/application/global-resource-authorization.test.ts src/api/infrastructure/persistence/user-persistence.mapper.test.ts src/api/infrastructure/security/scrypt-password-hasher.test.ts src/web/shared/api/identity-api.test.ts @metis/resources:test: $ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/application/application-coincidence.test.ts src/api/domain/resource-catalog.test.ts src/api/domain/resource.test.ts src/api/domain/resource-template-propagation.test.ts src/api/application/resource-lifecycle.test.ts src/web/catalog/shared/catalog.test.tsx src/web/resources/shared/resources.test.tsx src/web/resources/list/helpers/resource-columns.test.tsx src/web/resources/list/helpers/resource-list-preferences.test.tsx src/web/resources/shared/resource-values.test.ts src/api/domain/template-sections.test.ts src/web/catalog-fields/select/catalog-field-selection.test.tsx src/api/domain/directory-domain.test.ts src/api/domain/network-share.test.ts src/api/domain/resource-scope.test.ts src/api/infrastructure/persistence/resource-scope-reader.test.ts src/api/application/resource-scope.test.ts src/api/application/resource-reference-contracts.test.ts src/api/domain/global-resource.test.ts src/web/global-applications/shared/global-applications.test.tsx src/api/domain/operating-system-identity.test.ts src/api/application/global-operating-system-contracts.test.ts src/api/application/global-operating-system-policy.test.ts src/web/resources/shared/ui/resource-characteristic-control.test.tsx @metis/resources:test: ✔ R2.6: nombre y proveedor son señales, nunca equivalencia confirmada (1.382012ms) @metis/resources:test: ✔ R2.6: preserva tildes, puntuación, abreviaturas, ediciones, versiones y números (0.956408ms) @metis/resources:test: ✔ R2.6: homónimos genéricos se mantienen débiles y los UUID nunca se sustituyen (41.809851ms) @metis/identity:test: ✔ resources.global.manage exige sesión vigente, flag persistido e identidad bootstrap (22.536289ms) @metis/identity:test: ✔ el administrador inicial no se puede crear ni actualizar inactivo (5.807449ms) @metis/identity:test: ✔ actualizar es idempotente, conserva identidad y cambiar contraseña invalida sesiones (1.490413ms) @metis/identity:test: ✔ crear genera UUID v7 y rehidratar conserva el UUID original (1.283711ms) @metis/identity:test: ✔ el mapper reconstruye Value Objects y conserva la identidad y valores persistidos (14.479722ms) @metis/identity:test: ✔ una inconsistencia persistida falla sin generar un identificador sustituto ni filtrar datos (12.0213ms) @metis/resources:test: ✔ F2: SO global público tipado, sin contaminación de aplicaciones ni perfiles (7.767365ms) @metis/resources:test: ✔ F2: elegibilidad de SO exige stock real y campos globales (0.275903ms) @metis/resources:test: ✔ F2: contrato 3 y gates de SO independientes; aplicaciones no abren SO (0.426803ms) @metis/resources:test: ✔ F3: cualquier escritor valida identidad publicada, corrección documental e historial (37.822416ms) @metis/resources:test: ✔ recurso: activar/desactivar conserva datos e historial y repetir estado no añade revisiones (13.299011ms) @metis/resources:test: ✔ recurso: valida identidades y rechaza actuar sobre recursos ajenos (3.912033ms) @metis/resources:test: ✔ recurso: propaga el bloqueo por asociaciones y permite desactivar (1.812116ms) @metis/resources:test: ✔ recurso: elimina y la repetición devuelve ausencia sin efectos adicionales (1.20321ms) @metis/resources:test: ✔ elegibilidad global exige serie exacta y campos globales; las copias no elevan ámbito (2.521221ms) @metis/resources:test: ✔ schemas discriminan owner, propósito, OS local y proyecciones privadas (10.887892ms) @metis/resources:test: ✔ requests acotan lotes, consulta, paginación y rechazan privilegios o integración (5.87705ms) @metis/resources:test: ✔ búsqueda literal conserva ñ, puntuación y espacios; pagina tras filtrar con desempate UUID (5.416145ms) @metis/resources:test: ✔ R2.5 admite gates configurables; los valores predeterminados siguen cerrados (0.322903ms) @metis/resources:test: ✔ R2.5: software y perfil se habilitan por separado y requieren catálogo (0.319803ms) @metis/resources:test: ✔ R2.5: perfil no depende de software ni abre asociaciones con catálogo cerrado (0.404603ms) @metis/resources:test: ✔ lectores locales: excluyen global y otra compañía incluso si el repositorio los entrega; stockKey no depende del nombre (17.373246ms) @metis/resources:test: ✔ HTTP actual sin MariaDB: aislamiento con 15 compañías, 50 recursos locales, alta, edición, estado e historial (356.289781ms) @metis/resources:test: ✔ DNS: normalización explícita, etiqueta única heredada, punto raíz y política ASCII IDN (6.277653ms) @metis/resources:test: ✔ capacidad estable: la plantilla renombrada sigue siendo dominio y una copia arbitraria no (1.619014ms) @metis/resources:test: ✔ alta, edición, DNS y archivo usan Resource y conservan su identidad e historial (6.567455ms) @metis/resources:test: ✔ catálogo: DNS obligatorio protegido, NetBIOS opcional e inicialización idempotente (5.443945ms) @metis/resources:test: ✔ identificadores de campo: mayúsculas no cambian identidad ni permiten duplicados (1.19291ms) @metis/resources:test: ✔ global: crear exige UUID v7 y conserva identidad y propietario en edición e idempotencia (16.422537ms) @metis/resources:test: ✔ global: captura por stockKey, sin depender del nombre traducido de la plantilla (6.806357ms) @metis/resources:test: ✔ SMB acepta \\NAS-01\Finanzas (2.025017ms) @metis/resources:test: ✔ SMB acepta \\files.example.local\Docs (0.545104ms) @metis/resources:test: ✔ SMB acepta \\192.168.5.10\C$ (0.166801ms) @metis/resources:test: ✔ SMB acepta \\samba\Diseño\Año 2026 (0.351603ms) @metis/resources:test: ✔ SMB acepta \\NAS\Docs\ (0.307903ms) @metis/resources:test: ✔ SMB rechaza "" (0.248702ms) @metis/resources:test: ✔ SMB rechaza "\\\\" (0.270702ms) @metis/resources:test: ✔ SMB rechaza "\\\\host" (0.133602ms) @metis/resources:test: ✔ SMB rechaza "\\\\\\share" (1.17481ms) @metis/resources:test: ✔ SMB rechaza "\\\\host\\\\" (0.529905ms) @metis/resources:test: ✔ SMB rechaza "C:\\Datos" (0.155102ms) @metis/resources:test: ✔ SMB rechaza "https://host/share" (0.115201ms) @metis/resources:test: ✔ SMB rechaza "\\\\host\\share\\.." (0.354103ms) @metis/resources:test: ✔ SMB rechaza "\\\\host\\share\\." (0.1147ms) @metis/resources:test: ✔ SMB rechaza "\\\\?\\UNC\\host\\share" (0.162701ms) @metis/resources:test: ✔ SMB rechaza "\\\\host\\share\\\\child" (0.241902ms) @metis/resources:test: ✔ SMB rechaza "\\\\host\\share." (0.287503ms) @metis/resources:test: ✔ SMB rechaza "\\\\host\\ share" (0.094901ms) @metis/resources:test: ✔ SMB rechaza "\\\\ho st\\share" (0.128801ms) @metis/resources:test: ✔ SMB rechaza "\\\\host\\bad\u0000" (0.174402ms) @metis/resources:test: ✔ SMB rechaza "\\\\host\\bad\ud800" (0.234302ms) @metis/resources:test: ✔ SMB rechaza "\\\\host\\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" (0.173902ms) @metis/resources:test: ✔ SMB: comparación conservadora, alias y Unicode sin transformaciones destructivas (0.771007ms) @metis/resources:test: ✔ SMB: semántica por stockKey y protección del catálogo sin bloquear etiquetas u obligatoriedad (23.960201ms) @metis/resources:test: ✔ SMB: alta validada y diagnóstico histórico sin conversión ni revisión (18.189152ms) @metis/resources:test: ✔ SMB: nuevas altas fijan integración access y rechazan contexto incompatible (13.216311ms) @metis/resources:test: ✔ F1: identidad completa, edición conocida/no aplicable/desconocida e inactivos (6.170652ms) @metis/resources:test: ✔ F1: normalización conservadora no equipara ediciones, releases ni ausencia desconocida (0.405003ms) @metis/resources:test: ✔ F1: evolución de stock personalizada e idempotente; no elimina campos ni cambia obligatoriedad (68.17447ms) @metis/resources:test: ✔ F1: un catálogo anterior evoluciona sin sobrescribir bindings ni recursos particulares (57.404181ms) @metis/resources:test: ✔ campo PNG Icono: evoluciona tres plantillas sin reemplazar personalizaciones ni reponer bindings retirados (40.165236ms) @metis/resources:test: ✔ catálogo de recursos: serie idempotente, UUID v7, características opcionales y protección (39.625631ms) @metis/resources:test: ✔ ámbitos, tipos, listas, campos externos y disponibilidad por compañía (9.351978ms) @metis/resources:test: ✔ licencias: ampliar un catálogo previo conserva identidades y disponibilidad (21.382679ms) @metis/resources:test: ✔ plantillas globales de serie editables: conserva identidad, asociaciones, disponibilidad y cambios al reiniciar (14.919225ms) @metis/resources:test: ✔ campos globales de serie editables: listas ampliables, tipo fijo y opciones existentes conservadas (10.355587ms) @metis/resources:test: ✔ sistema operativo: plantilla con uso explícito, copia y ampliación sin sobrescribir definiciones (30.281553ms) @metis/resources:test: ✔ iconos de recursos: todas las plantillas de serie tienen su icono y el arranque no repone los retirados (15.280628ms) @metis/resources:test: ✔ iconos de recursos: cambiar y retirar el icono conserva identidad y asociaciones, con guardado idempotente (6.643756ms) @metis/resources:test: ✔ iconos de recursos: claves desconocidas, cadenas vacías e iconos de campos se rechazan (5.600047ms) @metis/resources:test: ✔ ámbito: pares válidos y rechazo runtime de propietarios contradictorios o ausentes (19.105559ms) @metis/resources:test: ✔ ámbito: proyección preparada separada; HTTP local conserva exactamente su contrato (12.131401ms) @metis/resources:test: ✔ ámbito: edición y propagación locales conservan propietario, UUID e historia; globales son solo lectura (4.580539ms) @metis/resources:test: ✔ Resource: propaga altas, orden y retiradas conservando cero/falso, valores e historial; repetir no genera revisiones (46.55159ms) @metis/resources:test: ✔ Resource: los campos retirados no impiden añadir una plantilla completa y no se fusionan por nombre (2.003517ms) @metis/resources:test: ✔ Resource: retirar secciones conserva solo las necesarias y mover o reincorporar campos aplica el destino (0.915508ms) @metis/resources:test: ✔ recursos: tipos, valores opcionales y obligatorios, cero/falso y campos desconocidos (14.729523ms) @metis/resources:test: ✔ recurso: identidad estable, historial, desactivación e idempotencia (2.807024ms) @metis/resources:test: ✔ buzón como recurso: correo válido, cuenta opcional, cambios auditados y tipo fijo (16.77854ms) @metis/resources:test: ✔ secciones: nombres, identidades, referencias y un solo nivel (9.406179ms) @metis/resources:test: ✔ secciones: igualdad, orden, identidad y persistencia JSON (3.368128ms) @metis/resources:test: ✔ secciones: plantillas globales y locales conservan separación y UUID al editar (11.406895ms) @metis/resources:test: ✔ secciones de serie: el arranque conserva una plantilla sin grupos y su disponibilidad (32.051368ms) @metis/resources:test: ✔ especificación: secciones capturadas, edición posterior y obligatoriedad independiente (18.115052ms) @metis/resources:test: ✔ lector legacy: roundtrip conserva UUID, revisiones, valores, actor, fecha y DTO sin columna scope (20.129568ms) @metis/resources:test: ✔ lector: solo el adaptador legacy conocido interpreta ausencia; ningún ámbito inválido usa fallback (5.067842ms) @metis/resources:test: ✔ proyecciones operativas: global sintético se rechaza antes de SQL, el recurso local sin integración no crea proyección (96.472205ms) @metis/resources:test: ✔ escritor scoped: envía company explícito, preserva la salida legacy y rechaza global (1.335411ms) @metis/identity:test: ✔ scrypt usa sales distintas y rechaza contraseñas y hashes incorrectos (2006.595377ms) @metis/identity:test: ✔ la sesión valida la respuesta y conserva el contrato público utilizado por la aplicación (42.98326ms) @metis/identity:test: ✔ login, configuración inicial, usuarios y contraseñas conservan rutas, body y CSRF (7.114759ms) @metis/identity:test: ✔ cerrar sesión espera la respuesta de la operación sin perder el token (3.389728ms) @metis/identity:test: ✔ los errores HTTP no filtran detalles internos y los datos de sesión inválidos se rechazan (6.816557ms) @metis/identity:test: ℹ tests 11 @metis/identity:test: ℹ suites 0 @metis/identity:test: ℹ pass 11 @metis/identity:test: ℹ fail 0 @metis/identity:test: ℹ cancelled 0 @metis/identity:test: ℹ skipped 0 @metis/identity:test: ℹ todo 0 @metis/identity:test: ℹ duration_ms 2639.003782 @metis/resources:test: ✔ selección múltiple añade un lote sin duplicados y conserva las reglas y el orden existentes (5.738338ms) @metis/resources:test: ✔ añadir desde una sección asigna solo los campos nuevos a su destino y conserva los existentes (1.380509ms) @metis/resources:test: ✔ la selección respeta el límite del schema, valida identificadores y rechaza el conjunto vacío (8.771057ms) @metis/resources:test: ✔ el listado reutiliza tabla, búsqueda y casillas traducidas y conserva las selecciones bloqueadas (91.952297ms) @metis/resources:test: ✔ L04.2: campos de recursos recuperan orden y página sin heredar otra pestaña (106.265887ms) @metis/resources:test: ✔ el catálogo muestra plantillas de serie y acción de alta sin formularios junto al listado (98.404237ms) @metis/resources:test: ✔ los formularios tienen ayuda inferior y selección de campos en diálogo con alta rápida (29.327489ms) @metis/resources:test: ✔ iconos de recursos: catálogo y selector traducido conservan la selección al editar y copiar (161.251243ms) @metis/resources:test: ✔ catálogo global: lectura mínima y navegación traducidas, sin administración para ordinarios (33.038714ms) @metis/resources:test: ✔ R2.4: mutación global invalida solo instalaciones cacheadas que usan su UUID (3.662724ms) @metis/resources:test: ✔ R2.5: cambio global invalida configuraciones afectadas y preserva otras compañías (1.521609ms) @metis/resources:test: ✔ SO global: lectura pública es/en conserva identidad estructurada y navegación propia (9.762463ms) @metis/resources:test: ✔ SO global: invalida software y su catálogo sin refrescar aplicaciones ni perfiles (1.55681ms) @metis/resources:test: ✔ columnas de características de recursos: identidad, campos nuevos de catálogo, instantáneas y nombres repetidos (23.807554ms) @metis/resources:test: ✔ columnas elegidas es/en: cero, falso, fecha localizada, unidades y guion para campos ajenos (74.126881ms) @metis/resources:test: ✔ los campos compartidos conservan un único ID y todos sus contextos de catálogo e instantánea (3.729324ms) @metis/resources:test: ✔ columnas generales e integración es/en: notas, fechas, autores y referencias semánticas (27.599878ms) @metis/resources:test: ✔ icono de producto: identidad de serie, nombres personalizables y ausencia sin inferir otra imagen (0.838205ms) @metis/resources:test: ✔ orden de recursos: aislamiento por compañía y pestaña, incluida Todo (14.528022ms) @metis/resources:test: ✔ orden de recursos: una URL explícita prevalece sobre la preferencia sin sobrescribirla (0.885208ms) @metis/resources:test: ✔ preferencias opcionales: datos inválidos y almacenamiento bloqueado no impiden listar (1.878716ms) @metis/resources:test: ✔ cambiar pestaña limpia el orden y la paginación anteriores conservando la búsqueda (0.389803ms) @metis/resources:test: ✔ la integración de buzón conserva su configuración explícita y no inventa referencias (1.447512ms) @metis/resources:test: ✔ los valores iniciales toleran catálogo pendiente y limitan el nombre sin cambiar la entrada (0.994108ms) @metis/resources:test: ✔ nombre propuesto: prioriza los identificadores de cada plantilla y limita su longitud (19.809765ms) @metis/resources:test: ✔ nombre propuesto: contempla campos personalizados y descarta valores no identificativos (0.468503ms) @metis/resources:test: ✔ paso de campos: exige valores obligatorios y acepta cero y respuestas negativas (1.834615ms) @metis/resources:test: ✔ paso de campos: requiere la dirección de buzón aunque la plantilla la marque opcional (8.169368ms) @metis/resources:test: ✔ recursos: listado con alta modal y sin formulario visible, en español e inglés (111.041919ms) @metis/resources:test: ✔ Recursos: las pestañas incluyen plantillas vacías e inactivas y combinan identidad y búsqueda (311.398914ms) @metis/resources:test: ✔ recurso: ayuda inferior, plantilla con alta rápida y sin asignaciones de recursos (15.260198ms) @metis/resources:test: ✔ licencia: formulario reutilizable con campos opcionales y ayuda antes de guardar (28.01248ms) @metis/resources:test: ✔ asistencia: alta de recurso con plantilla específica y características opcionales (8.280053ms) @metis/resources:test: ✔ alta por pasos: solo muestra la plantilla inicialmente y traduce su navegación (14.577594ms) @metis/resources:test: ✔ indicador de alta: conserva la plantilla elegida y explica el paso actual en ambos idiomas (11.012271ms) @metis/resources:test: ✔ recursos: resumen de plantilla con unidades, booleanos traducidos, cero y límite de cuatro (17.138311ms) @metis/resources:test: ✔ recursos: ficha lateral compacta traducida con cierre, acciones y contenido relacionado (12.635481ms) @metis/resources:test: ✔ recursos: inventario y panel usan el icono vigente de la plantilla sin cambiar la especificación (17.756314ms) @metis/resources:test: ✔ dominio: el formulario traduce el contexto pendiente y solo presenta un entorno confirmado (12.951483ms) @metis/resources:test: ✔ SMB: formulario explica acceso automático o histórico sin selectores incompatibles, es/en (8.430654ms) @metis/resources:test: ✔ UNC: presentación por segmentos conserva exactamente separadores, Unicode y valores repetidos (5.939038ms) @metis/resources:test: ✔ nombre de software: imagen compacta decorativa, texto accesible y ausencia sin base64 visible (11.054172ms) @metis/resources:test: ✔ campo declarativo: traduce opciones propias y conserva valores que coinciden con el prototipo (27.439578ms) @metis/resources:test: ℹ tests 128 @metis/resources:test: ℹ suites 0 @metis/resources:test: ℹ pass 128 @metis/resources:test: ℹ fail 0 @metis/resources:test: ℹ cancelled 0 @metis/resources:test: ℹ skipped 0 @metis/resources:test: ℹ todo 0 @metis/resources:test: ℹ duration_ms 5004.02204 @metis/assets:test: cache bypass, force executing aa42a6d02368829e @metis/assets:test: $ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/domain/asset-catalog.test.ts src/api/domain/asset.test.ts src/api/domain/asset-template-propagation.test.ts src/api/domain/infrastructure.test.ts src/api/domain/workstation.test.ts src/api/domain/asset-relationship.test.ts src/web/catalog/shared/catalog.test.tsx src/web/assets/shared/inventory.test.tsx src/web/assets/shared/helpers/asset-columns.test.tsx src/web/assets/detail/ui/asset-detail.test.tsx src/web/infrastructure/shared/infrastructure.test.tsx src/api/domain/support.test.ts src/web/support-connections/shared/support.test.tsx src/api/domain/brand.test.ts src/web/brands/shared/brands.test.tsx src/api/domain/template-sections.test.ts src/web/workstations/shared/helpers/workstation-creation.test.ts src/web/workstations/shared/workstation-name.test.ts src/web/workstations/rename/api/rename-workstation.test.ts src/web/assets/list/asset-workstation.test.tsx src/web/assets/select/asset-selection.test.tsx src/web/catalog-fields/select/catalog-field-selection.test.tsx src/api/domain/directory-membership.test.ts src/api/infrastructure/persistence/directory-membership-provider.test.ts src/web/directory-memberships/shared/directory-memberships.test.tsx src/api/domain/network-share-publication.test.ts src/web/network-share-publications/shared/network-share-ui.test.tsx src/api/application/workstation-concurrency.test.ts src/web/workstations/shared/helpers/workstation-asset-availability.test.ts @metis/assets:test: ✔ WD04.4: revisión obsoleta rechazada antes de reemplazar composición; revisión actual conserva historial (7.82925ms) @metis/assets:test: ✔ el catálogo inicial es idempotente, con UUID propios y características opcionales (71.52736ms) @metis/assets:test: ✔ la disponibilidad por compañía conserva el global y los campos desactivados (49.475118ms) @metis/assets:test: ✔ las plantillas validan ámbito, campos activos e identidad estable al editar (41.96797ms) @metis/assets:test: ✔ los campos validan listas, igualdad semántica, duplicados y tipo fijo (2.141413ms) @metis/assets:test: ✔ solo elimina definiciones globales personalizadas que no usan otras plantillas (2.169814ms) @metis/assets:test: ✔ iconos opcionales: cambio y retirada conservan identidad y asociaciones (26.350469ms) @metis/assets:test: ✔ el arranque conserva un icono de serie retirado sin cambiar UUID, campos o disponibilidad (61.798697ms) @metis/assets:test: ✔ los iconos desconocidos o asociados a campos se rechazan (5.835438ms) @metis/assets:test: ✔ revisión explícita conserva identidades, copias y otras plantillas (28.670884ms) @metis/assets:test: ✔ plantillas globales de serie editables: conserva identidad, asociaciones, disponibilidad y cambios al reiniciar (46.689ms) @metis/assets:test: ✔ campos globales de serie editables: listas ampliables, tipo fijo y opciones existentes conservadas (44.104483ms) @metis/assets:test: ✔ Las relaciones validan sus extremos, normalizan nombres y distinguen dirección (10.804469ms) @metis/assets:test: ✔ Retirar conserva UUID, extremos y auditoría; repetir la retirada no modifica el historial (2.369815ms) @metis/assets:test: ✔ Tipos de relación de serie protegidos, ámbito de compañía y dirección fija (94.113304ms) @metis/assets:test: ✔ Asset: propaga altas, orden y retiradas conservando cero/falso, valores e historial; repetir no genera revisiones (33.015612ms) @metis/assets:test: ✔ Asset: los campos retirados no impiden añadir una plantilla completa y no se fusionan por nombre (4.66423ms) @metis/assets:test: ✔ Asset: retirar secciones conserva solo las necesarias y mover o reincorporar campos aplica el destino (0.836205ms) @metis/assets:test: ✔ las secciones conservadas desambiguan el nombre respetando el límite de 100 caracteres (0.572404ms) @metis/assets:test: ✔ Características opcionales, tipos y límites; cero y falso son valores presentes (12.619081ms) @metis/assets:test: ✔ Activo conserva UUID y revisiones; los cambios iguales son idempotentes (1.761611ms) @metis/assets:test: ✔ texto largo conserva saltos de línea y rechaza tipos no textuales (0.744805ms) @metis/assets:test: ✔ estado técnico y uso: asignaciones calculadas, elegibilidad exclusiva/compartida e historial conservado (0.886706ms) @metis/assets:test: ✔ Fecha de alta opcional: calendario real, independencia de compra, revisiones e idempotencia (3.559922ms) @metis/assets:test: ✔ sedes archivadas: nuevas referencias rechazadas y referencias anteriores conservadas (8.001451ms) @metis/assets:test: ✔ Marcas: nombre normalizado, UUID v7, protección de serie, estado e idempotencia (5.338234ms) @metis/assets:test: ✔ Marcas: SVG estáticos con transparencia, límites y contenido activo rechazado (70.309852ms) @metis/assets:test: ✔ Marcas: los 23 fabricantes tienen SVG local validado; Clónico no representa una marca (23.312049ms) @metis/assets:test: ✔ Marcas: añadir, sustituir y quitar SVG conserva identidad, origen y actualización idempotente (7.523948ms) @metis/assets:test: ✔ Marcas: mapper bidireccional conserva identidad y rechaza persistencia inválida (6.502942ms) @metis/assets:test: ✔ Marcas: unicidad, edición y eliminación de personalizadas, con protección de serie (20.517232ms) @metis/assets:test: ✔ pertenencia explícita: un rol, identidad UUID v7 e idempotencia sin nuevas revisiones (2.892119ms) @metis/assets:test: ✔ promoción y retirada del rol conservan asociación e historial; finalización repetida es inocua (1.898312ms) @metis/assets:test: ✔ cambio de dominio crea sucesor único y cierre atómico planificado; admite reintentos y rechaza conflictos (0.984907ms) @metis/assets:test: ✔ capacidad, estado y compañía: rechaza extremos incompatibles sin inferencias de nombre (0.559904ms) @metis/assets:test: ✔ activos o dominios inactivos conservan vínculos y permiten cerrar o retirar el rol (1.160708ms) @metis/assets:test: ✔ mapper: rehidratación consistente, UUID conservados y rechazo de revisiones corruptas (1.48671ms) @metis/assets:test: ✔ contratos estrictos: roles, paginación, UUID, acciones y privilegios arbitrarios (5.006032ms) @metis/assets:test: ✔ infraestructura: interfaces independientes, varias IP, normalización y UUID v7 (12.534081ms) @metis/assets:test: ✔ infraestructura: mismo contenido no cambia identidades ni añade revisiones (4.860931ms) @metis/assets:test: ✔ infraestructura: rechaza nombres/IP duplicados, valores inválidos e identidades ajenas (16.540207ms) @metis/assets:test: ✔ infraestructura: límites y direcciones repetidas entre interfaces o compañías permitidas (33.305814ms) @metis/assets:test: ✔ publicación: alta, periodo, cierre idempotente e identidad persistida (17.632113ms) @metis/assets:test: ✔ publicación: cardinalidad y reintento idéntico no crean periodos (0.937306ms) @metis/assets:test: ✔ publicación: traslado explícito y replay estable incluso tras finalizar sucesor (1.48251ms) @metis/assets:test: ✔ publicación: estados, recurso no SMB, identidad y fechas inválidas (1.121607ms) @metis/assets:test: ✔ publicación: definición compatible con contratos comunes sin rol ni proveedor network (8.390454ms) @metis/assets:test: ✔ asistencia: UUID v7, historial, cambios semánticos y fechas (5.455835ms) @metis/assets:test: ✔ asistencia: preferido disponible y entrada estricta (2.345515ms) @metis/assets:test: ✔ asistencia: varios métodos, duplicados, preferido único y activo retirado (2.213514ms) @metis/assets:test: ✔ herramientas: protección de serie y desactivación sin perder referencias (1.45371ms) @metis/assets:test: ✔ asistencia: mapper bidireccional y rechazo de historial inconsistente (10.291866ms) @metis/assets:test: ✔ secciones: nombres, identidades, referencias y un solo nivel (9.968964ms) @metis/assets:test: ✔ secciones: igualdad, orden, identidad y persistencia JSON (3.11922ms) @metis/assets:test: ✔ secciones: plantillas globales y locales conservan separación y UUID al editar (6.341141ms) @metis/assets:test: ✔ secciones de serie: el arranque conserva una plantilla sin grupos y su disponibilidad (118.186459ms) @metis/assets:test: ✔ especificación: secciones capturadas, edición posterior y obligatoriedad independiente (60.64799ms) @metis/assets:test: ✔ Puestos: composición opcional, referencias válidas y límites sin duplicados (7.811376ms) @metis/assets:test: ✔ Puestos: UUID estable e historial de composición, persona y estado; guardado idéntico idempotente (8.340182ms) @metis/assets:test: ✔ Puestos: ordenador principal exclusivo, único e independiente del responsable (1.365813ms) @metis/assets:test: ✔ baja del puesto: libera composición y responsable, conserva historial e identidad y es idempotente (3.357033ms) @metis/assets:test: ✔ definición real: proveedor, cardinalidad vigente, roles e inmutabilidad (3.895739ms) @metis/assets:test: ✔ cursor firmado: vinculación a consulta y operador, sin aceptar UUID libres ni alteraciones (3.138531ms) @metis/assets:test: ✔ extensión de Assets validada: roles y estados cerrados, UUID original y ámbito (6.259562ms) @metis/assets:test: ✔ ficha de activo es/en: página con dos pestañas, información actual, relaciones y contenido de compañía (231.40454ms) @metis/assets:test: ✔ historial del activo conserva instantáneas antiguas, interfaces retiradas y conexiones en ambos sentidos, ordenadas por fecha (30.653904ms) @metis/assets:test: ✔ ficha de activo distingue carga, error y activo inexistente (37.927153ms) @metis/assets:test: ✔ acciones: crear solo para portátiles, sobremesa y servidores disponibles (3.508124ms) @metis/assets:test: ✔ acciones: abrir el puesto asociado aunque el activo sea periférico, no operativo o el puesto esté inactivo (1.297708ms) @metis/assets:test: ✔ acciones: compañía y plantilla correctas; asociaciones solo históricas no bloquean el alta (0.859005ms) @metis/assets:test: ✔ alta desde activo es/en: composición y ordenador preseleccionados, sede activa y nombre propuesto; edición y compañía se respetan (28.235988ms) @metis/assets:test: ✔ inventario es/en: crear y ver puesto son acciones visibles fuera del menú (213.113818ms) @metis/assets:test: ✔ la acción de selección conserva su texto visible como nombre accesible en es/en (51.343844ms) @metis/assets:test: ✔ selector: comparte búsqueda, pestañas por identidad y columnas del inventario en es/en (286.197218ms) @metis/assets:test: ✔ selector: filtra conjuntamente por plantilla, nombre, sede y estado; distingue vacío (171.858351ms) @metis/assets:test: ✔ selector único: controles radio y disparador de diálogo; conserva el alta rápida y el bloqueo (107.987221ms) @metis/assets:test: ✔ picker: búsqueda rápida disponible durante carga y error, sin anunciar un falso vacío (201.409345ms) @metis/assets:test: ✔ inventario es/en: icono compacto antes del nombre, plantilla solo textual y ordenación por nombre (82.34635ms) @metis/assets:test: ✔ columnas de características: identidad, campos nuevos de catálogo, instantáneas y nombres repetidos (27.823787ms) @metis/assets:test: ✔ columnas elegidas es/en: cero, falso, fecha localizada, unidades y guion para campos ajenos (284.019903ms) @metis/assets:test: ✔ columnas generales y de red es/en: fechas y autores propios, IP/MAC por interfaz y ausencia real (57.960789ms) @metis/assets:test: ✔ los campos compartidos conservan un único ID y todos sus contextos de catálogo e instantánea (3.110821ms) @metis/assets:test: ✔ La capacidad del inventario protege el presupuesto de tabla en el límite real (1.763712ms) @metis/assets:test: ✔ El resize conserva el contexto abierto al ganar capacidad y nunca abre un modal (1.019207ms) @metis/assets:test: ✔ Inventario traducido con alta de cabecera y sin formulario junto al listado (235.264766ms) @metis/assets:test: ✔ Las pestañas incluyen plantillas vacías e inactivas y combinan identidad y búsqueda (469.228319ms) @metis/assets:test: ✔ El activo ofrece altas relacionadas, ayuda inferior y no encadena una tercera alta (38.252354ms) @metis/assets:test: ✔ Las fichas leen ambos sentidos y conservan la auditoría de relaciones retiradas (36.13474ms) @metis/assets:test: ✔ El formulario de tipo de relación presenta ayuda justo antes de sus operaciones (26.831277ms) @metis/assets:test: ✔ Puestos de trabajo: listado traducido, alta en cabecera y formulario modal (32.910218ms) @metis/assets:test: ✔ Puestos de trabajo: altas rápidas y ayuda inferior; un activo anidado no ofrece terceras altas (26.255574ms) @metis/assets:test: ✔ alta de puesto: sede única automática, responsable opcional y cuatro pasos traducidos (29.377194ms) @metis/assets:test: ✔ la ficha lateral agrupa información y ofrece acciones superiores y enlaces reales (99.284958ms) @metis/assets:test: ✔ texto largo: área editable con ayuda accesible (7.384349ms) @metis/assets:test: ✔ las características marcan solo los campos obligatorios y conservan unidad y ayuda (14.376895ms) @metis/assets:test: ✔ el resumen usa los campos propios de la plantilla, omite vacíos y texto largo y limita a cuatro (9.600864ms) @metis/assets:test: ✔ alta de activo por pasos: empieza por plantilla, traduce la navegación y bloquea el avance sin selección (36.917845ms) @metis/assets:test: ✔ el progreso de activos conserva la plantilla y explica los pasos en es/en (27.06438ms) @metis/assets:test: ✔ las acciones por pasos solo ofrecen guardar al final y bloquean acciones durante el envío (51.959545ms) @metis/assets:test: ✔ características obligatorias: rechaza ausentes y espacios y conserva cero y falso (0.357702ms) @metis/assets:test: ✔ nombre propuesto: usa texto de la plantilla, omite marca y vacíos y respeta el límite (8.358755ms) @metis/assets:test: ✔ diseño del puesto: grupos compactos, columnas por contenedor y resumen sin textos de ausencia (122.02611ms) @metis/assets:test: ✔ activos del puesto: estado vacío visual traducido y acciones según disponibilidad (78.722622ms) @metis/assets:test: ✔ diseño del puesto: navegación traducida y acciones bloqueadas durante el guardado (67.793049ms) @metis/assets:test: ✔ ficha compacta de activo: comparte información, traducciones y acciones sin consultas propias (98.295252ms) @metis/assets:test: ✔ ordenador principal: tarjetas con selección única, etiquetas es/en y solo los activos del puesto (64.684029ms) @metis/assets:test: ✔ puestos: URL controla consulta, orden y página y sus enlaces conservan el contexto (47.499814ms) @metis/assets:test: ✔ Marcas: listado común traducido, filtros y alta modal sin formulario junto a la tabla (95.727637ms) @metis/assets:test: ✔ Marcas: nombre de serie protegido y ayuda inferior; alta rápida siempre activa (16.389109ms) @metis/assets:test: ✔ Marcas: eliminar envía CSRF y cuerpo vacío, valida la respuesta y propaga conflictos (39.100361ms) @metis/assets:test: ✔ Marcas: selector mantiene valores antiguos e inactivos y respeta el límite de alta anidada (21.215141ms) @metis/assets:test: ✔ Marcas: el campo de serie se identifica por referencia de catálogo, no por el nombre (56.865478ms) @metis/assets:test: ✔ selección múltiple añade un lote sin duplicados y conserva las reglas y el orden existentes (4.952433ms) @metis/assets:test: ✔ añadir desde una sección asigna solo los campos nuevos a su destino y conserva los existentes (3.318822ms) @metis/assets:test: ✔ la selección respeta el límite del schema, valida identificadores y rechaza el conjunto vacío (7.199848ms) @metis/assets:test: ✔ el listado reutiliza tabla, búsqueda y casillas traducidas y conserva las selecciones bloqueadas (269.377105ms) @metis/assets:test: ✔ L04.2: campos del catálogo recuperan orden y página desde su URL (313.793098ms) @metis/assets:test: ✔ el catálogo muestra plantillas de serie y acción de alta sin formularios junto al listado (341.53858ms) @metis/assets:test: ✔ el catálogo busca nombres sin acentos sin cambiar la consulta ni incluir campos de otras pestañas (166.801614ms) @metis/assets:test: ✔ los formularios tienen ayuda inferior y reservan el alta rápida al diálogo de selección de campos (87.991287ms) @metis/assets:test: ✔ las plantillas ofrecen selección visual traducida y conservan el icono al copiar (434.601697ms) @metis/assets:test: ✔ dominio: roles estructurados, resumen solo de página y enlaces UUID, es/en (68.480756ms) @metis/assets:test: ✔ tablas: miembro y finalización no se confunden con controlador o pertenencia vigente (15.902306ms) @metis/assets:test: ✔ activo sin dominio: vacío explícito y asociación solo si el equipo es compatible (21.01304ms) @metis/assets:test: ✔ activo unido: dominio, rol real, navegación y acciones especializadas (24.793265ms) @metis/assets:test: ✔ carga y error de consulta no se muestran como dominio vacío (40.62397ms) @metis/assets:test: ✔ API de lectura: conserva cursor opaco, tipo y ámbito; propaga errores funcionales (52.235247ms) @metis/assets:test: ✔ traslado usa un único comando atómico, UUID esperado y CSRF; conflicto no se oculta (7.841852ms) @metis/assets:test: ✔ infraestructura: clasificación de serie independiente del nombre/icono y selección manual prioritaria (2.295516ms) @metis/assets:test: ✔ infraestructura: el total incluye roles e interfaces, respeta exclusiones manuales y no duplica activos (0.509204ms) @metis/assets:test: ✔ infraestructura: listado y ficha presentan interfaces/IP en español e inglés, sin puertos (249.296761ms) @metis/assets:test: ✔ SMB: relaciones paginadas, UNC Unicode y enlaces bidireccionales es/en (44.462196ms) @metis/assets:test: ✔ SMB: historial conserva periodos y actores y no ofrece modificar periodos finalizados (16.189307ms) @metis/assets:test: ✔ SMB: vacío real y error de lectura son distintos (14.817898ms) @metis/assets:test: ✔ SMB: denegación oculta datos previos y carga inicial conserva cabeceras (16.55351ms) @metis/assets:test: ✔ SMB: transferencia conserva UUID y envía un único comando propietario con CSRF (27.711784ms) @metis/assets:test: ✔ SMB: búsqueda remota y cursor opaco viajan al servidor (2.002614ms) @metis/assets:test: ✔ ficha SMB: publicador destacado, datos y timeline real es/en; solo lectura conserva navegación (42.00668ms) @metis/assets:test: ✔ ficha SMB: vacío, finalizada, carga y denegación son estados distintos (19.337729ms) @metis/assets:test: ✔ timeline SMB: solo hechos persistidos, UUID estable, traslado y cierre sin sucesor en página (0.766505ms) @metis/assets:test: ✔ historial v2: utiliza únicamente nombres autorizados aportados y conserva UUID técnicos (15.439803ms) @metis/assets:test: ✔ asistencia: formulario con alta rápida y ayuda antes de guardar (49.722629ms) @metis/assets:test: ✔ asistencia: resumen excluye retirados, ordena preferido y conserva la gestión original (25.106766ms) @metis/assets:test: ✔ asistencia: traducciones y resumen de método (2.834319ms) @metis/assets:test: ✔ asistencia: resumen documental muestra destino, VPN y preferencia sin acciones de gestión (4.004027ms) @metis/assets:test: ✔ asistencia: referencia no resuelta conserva el registro con ausencia y explicación (5.95884ms) @metis/assets:test: ✔ renombrar: usa valores vigentes, normaliza el nombre, valida respuesta y envía CSRF (45.570504ms) @metis/assets:test: ✔ renombrar: rechaza vacíos, espacios y exceso de longitud antes de realizar peticiones (5.183534ms) @metis/assets:test: ✔ renombrar: un nombre equivalente no provoca una escritura ni otra revisión (1.218408ms) @metis/assets:test: ✔ renombrar: propaga puesto ausente y errores del servidor sin escritura posterior (5.814639ms) @metis/assets:test: ✔ WD04.4: comparte reglas de disponibilidad, retención, ocupación y puesto inactivo (0.946306ms) @metis/assets:test: ✔ alta: sede necesaria, responsable opcional, composición mínima y ordenador perteneciente al puesto (0.906406ms) @metis/assets:test: ✔ composición: asigna el activo único, conserva una elección válida y limpia el ordenador retirado (0.208301ms) @metis/assets:test: ✔ propone exactamente el nombre del activo principal, sin depender de la sede (1.166608ms) @metis/assets:test: ✔ no propone nombre cuando falta el activo principal (0.169002ms) @metis/assets:test: ℹ tests 155 @metis/assets:test: ℹ suites 0 @metis/assets:test: ℹ pass 155 @metis/assets:test: ℹ fail 0 @metis/assets:test: ℹ cancelled 0 @metis/assets:test: ℹ skipped 0 @metis/assets:test: ℹ todo 0 @metis/assets:test: ℹ duration_ms 8917.877219 @metis/companies:test: cache bypass, force executing b3c337cf5e4acffd @metis/companies:test: $ TSX_TSCONFIG_PATH=../../tsconfig.json node --import tsx --test src/api/domain/company.aggregate.test.ts src/api/domain/people.test.ts src/web/companies/shared/companies-page.test.tsx src/web/people/list/people-search.test.tsx src/web/companies/list/company-filters.test.tsx src/web/shared/helpers/company-list-query-state.test.ts src/api/domain/access/access.test.ts src/api/domain/mail-configuration.test.ts src/api/domain/mailbox.test.ts src/web/access/shared/access.test.tsx src/web/mail-configurations/shared/mail.test.tsx src/api/domain/work-profile.test.ts src/web/work-profiles/shared/profile.test.tsx src/api/domain/printer-configuration.test.ts src/web/printer-configurations/shared/printer.test.tsx src/api/domain/application-configuration.test.ts src/web/application-configurations/shared/application.test.tsx src/api/domain/certificate-configuration.test.ts src/web/certificate-configurations/shared/certificate.test.tsx src/web/work-environments/shared/work-environment.test.tsx src/api/domain/telework-authorization.test.ts src/web/telework-authorizations/shared/telework.test.tsx src/api/domain/remote-connection.test.ts src/api/domain/process.test.ts src/web/remote-connections/shared/remote.test.tsx src/web/processes/shared/processes.test.tsx src/web/shared/initials-avatar.test.tsx src/api/infrastructure/company-logo-processor.test.ts src/web/companies/shared/company-avatar.test.tsx src/web/shared/client-contracts.test.ts src/web/infrastructure/shared/helpers/printer-usage.test.ts src/web/workstations/detail/helpers/workstation-relations.test.ts src/web/workstations/detail/helpers/workplace-map-layout.test.ts src/web/workstations/detail/helpers/workstation-dashboard.test.ts src/web/workstations/detail/helpers/workstation-equipment.test.ts src/web/workstations/detail/helpers/workstation-profile-expansion.test.ts src/web/people/shared/helpers/person-organization.test.ts src/web/workstations/detail/ui/workstation-detail.test.tsx src/web/workspace/shared/workspace-routes.test.ts src/web/workspace/view/helpers/sidebar-preference.test.ts src/api/domain/software-installation.test.ts src/web/software-installations/shared/software.test.tsx src/web/software-installations/shared/current-operating-systems.test.tsx src/api/application/directory-context-plan.test.ts src/web/access/list/helpers/access-environment-filter.test.ts src/api/domain/folder-mapping-account.test.ts src/api/application/local-identity-plan.test.ts src/web/access/list/helpers/access-resource-filter.test.ts src/web/folder-mappings/shared/helpers/folder-account-options.test.ts src/web/local-identity-environments/shared/local-identities-ui.test.tsx src/web/workstations/detail/helpers/workplace-node-actions.test.tsx @metis/companies:test: ✔ contexto AD: creación pura con identidades propias, sin cuentas, grupos ni activos (10.512881ms) @metis/companies:test: ✔ clasificación independiente del nombre; no se adopta un sistema existente por llamarse AD (3.439027ms) @metis/companies:test: ✔ se rechazan compañías distintas, referencias inexistentes y entornos sin clasificación (1.22351ms) @metis/companies:test: ✔ DNS repetido no crea dos entornos; otro dominio comparte sistema y obtiene un entorno distinto (4.287433ms) @metis/companies:test: ✔ identidad local: vínculo por UUID, alta y retirada idempotentes con identidad e historial protegidos (14.078209ms) @metis/companies:test: ✔ identidad local: clasificación explícita rechaza AD por sistema o entorno, sin comparar etiquetas (1.753713ms) @metis/companies:test: ✔ identidad local: crear entorno utiliza AccessWorkspace y conserva cuentas y sistema existentes (2.275218ms) @metis/companies:test: ✔ catálogos globales no se duplican con adiciones locales y no se admiten grupos anidados (9.269572ms) @metis/companies:test: ✔ renombrar y cambiar el uso de una cuenta conserva UUID, historial y semántica de repetición (5.004838ms) @metis/companies:test: ✔ el uso puede cambiar entre todas las opciones sin relaciones y repetirlo no añade revisiones (11.969292ms) @metis/companies:test: ✔ pasar de compartida a personal rechaza titulares solapados y admite periodos consecutivos (4.139332ms) @metis/companies:test: ✔ el cambio entre uso técnico y acceso no reinterpreta relaciones actuales ni históricas (8.173263ms) @metis/companies:test: ✔ personal y compartida permiten cambiar el uso conservando la relación con una persona (4.188933ms) @metis/companies:test: ✔ cerrar una autorización configurada deja retirada pendiente y cerrar una pendiente no inventa un acceso (4.804737ms) @metis/companies:test: ✔ titulares no se solapan incluso en periodos cerrados; el relevo conserva una retirada anterior (1.810414ms) @metis/companies:test: ✔ responsabilidad técnica no concede acceso y se permite sobre una cuenta caducada o inactiva (5.367941ms) @metis/companies:test: ✔ valores reconstruyen UUID y fechas, rechazan fechas imposibles y no permiten credenciales (5.868646ms) @metis/companies:test: ✔ las referencias UUID se normalizan y no permiten duplicar cuentas variando mayúsculas (1.000207ms) @metis/companies:test: ✔ aplicaciones: contrato estricto, versión opcional y solo instalada (8.602266ms) @metis/companies:test: ✔ aplicaciones: UUID, idempotencia, versión auditada, destino fijo y retirada (3.87443ms) @metis/companies:test: ✔ aplicaciones: ámbito y clasificación explícita, duplicados abiertos y reapertura nueva (1.843215ms) @metis/companies:test: ✔ aplicaciones: inactividad conserva notas y permite retirada, impide reconfigurar (1.602613ms) @metis/companies:test: ✔ aplicaciones: persistencia preserva historial y rechaza claves y orden incoherentes (9.050869ms) @metis/companies:test: ✔ R2.5: global conserva perfil, delivery e historial; disponibilidad distinta de lectura histórica (8.953169ms) @metis/companies:test: ✔ certificados: contrato estricto, ubicación opcional y límites (12.344095ms) @metis/companies:test: ✔ certificados: UUID, idempotencia, ubicación auditada, destino fijo y retirada (4.061731ms) @metis/companies:test: ✔ certificados: ámbito y clasificación explícita, duplicados abiertos y reapertura nueva (1.991615ms) @metis/companies:test: ✔ certificados: inactividad conserva notas y permite retirada, impide reconfigurar (1.393411ms) @metis/companies:test: ✔ certificados: persistencia preserva historial y rechaza claves y orden incoherentes (12.487097ms) @metis/companies:test: ✔ certificados: caducidad inclusiva, revisión y retirada sin perder historial (1.435511ms) @metis/companies:test: ✔ compañía, contacto y sede tienen UUID v7 propios y se conserva la identidad al editar (8.864269ms) @metis/companies:test: ✔ la pertenencia impide asociar o editar entidades de otra compañía (3.962331ms) @metis/companies:test: ✔ la dirección y el teléfono son optativos y se pueden borrar (0.798606ms) @metis/companies:test: ✔ nombres, email, teléfono y longitud de dirección se validan en los Value Objects (1.718213ms) @metis/companies:test: ✔ sedes: archivar y reactivar conserva identidad y datos; repetir el estado es idempotente (0.788206ms) @metis/companies:test: ✔ FolderMapping: cuenta desconocida, cuenta alternativa y cobertura independiente de la necesidad (74.644375ms) @metis/companies:test: ✔ FolderMapping: ausencia conserva cuenta, null la retira y cada cambio real crea revisión (19.52725ms) @metis/companies:test: ✔ FolderMapping: rechaza cuenta ausente, otro subtipo, otra persona, caducada o desactivada (17.875937ms) @metis/companies:test: ✔ FolderMapping: Coverage por grupo exige pertenencia directa de la cuenta y configuración vigente (32.785753ms) @metis/companies:test: ✔ FolderMapping: cobertura derivada cambia al retirar concesión, necesidad, cuenta o asociación personal (53.955416ms) @metis/companies:test: ✔ FolderMapping: todas las autorizaciones necesarias deben proceder de la cuenta seleccionada (11.293887ms) @metis/companies:test: ✔ Correo: UUIDv7, normalización, no-op, historial y retirada explícita (11.787791ms) @metis/companies:test: ✔ Correo: buzón independiente, vigencia, perfiles, varios buzones y duplicados abiertos (28.654121ms) @metis/companies:test: ✔ Correo: persistencia conserva identidad e historial y rechaza corrupción (17.859337ms) @metis/companies:test: ✔ Correo: vinculación explícita del legado conserva UUID e historial, sin inferir propiedad (20.102854ms) @metis/companies:test: ✔ Buzón: identidad, dirección única, cuenta opcional, ámbito y cambios auditados (7.654959ms) @metis/companies:test: ✔ Uso de buzón: fechas inclusiva/exclusiva, mismo día, solapes, varias personas e historial (14.050807ms) @metis/companies:test: ✔ Buzones: mapper conserva identidad y revisiones, rechaza corrupción (20.680559ms) @metis/companies:test: ✔ personas con datos opcionales no requieren cuenta de acceso y conservan su UUID (7.407657ms) @metis/companies:test: ✔ departamentos únicos por compañía, ignorando mayúsculas y espacios exteriores (1.150809ms) @metis/companies:test: ✔ varios departamentos, un único principal y sin periodos solapados (4.774337ms) @metis/companies:test: ✔ ediciones conservan revisiones y una repetición semántica no añade historial (9.743575ms) @metis/companies:test: ✔ inactivos no reciben nuevas asignaciones; se conservan y pueden cerrarse las existentes (0.895607ms) @metis/companies:test: ✔ asignaciones rechazan pertenencias cruzadas y fechas inválidas (1.27701ms) @metis/companies:test: ✔ la persistencia rechaza periodos inválidos y revisiones que no reflejan el estado actual (1.996715ms) @metis/companies:test: ✔ impresoras: contratos estrictos, notas opcionales y predeterminada solo vigente (15.970223ms) @metis/companies:test: ✔ impresoras: UUID, historial, igualdad semántica, destino fijo y retirada terminal (7.77146ms) @metis/companies:test: ✔ impresoras: duplicados por perfil, predeterminada única y destinos del ámbito (1.675812ms) @metis/companies:test: ✔ impresoras: indisponibilidad señala revisión y permite notas y retirada (4.907737ms) @metis/companies:test: ✔ impresoras: rehidratación conserva identidades y detecta corrupción (16.643328ms) @metis/companies:test: ✔ procesos: contratos estrictos, normalización y límites (7.566658ms) @metis/companies:test: ✔ procesos: UUID v7, tareas con identidad, actualización idempotente e historial (3.122524ms) @metis/companies:test: ✔ procesos: completar exige todas resueltas; cierre terminal y sujeto/tareas fijos (4.466634ms) @metis/companies:test: ✔ procesos: añadir revisiones conserva las resueltas e identidades y no duplica (2.312317ms) @metis/companies:test: ✔ plantillas: copia de instrucciones, igualdad semántica y cambios independientes (1.579512ms) @metis/companies:test: ✔ procesos: rehidratación bidireccional y rechazo de raíces/historial alterados (6.996654ms) @metis/companies:test: ✔ revisión: personales, retirada pendiente y relaciones finalizadas aún configuradas (0.817407ms) @metis/companies:test: ✔ revisión: incluye configuraciones de perfiles archivados, excluye cerradas y evita duplicar (0.316903ms) @metis/companies:test: ✔ remotos: origen personal sin detalle, destinos tipados y contrato estricto (6.629951ms) @metis/companies:test: ✔ remotos: UUID e historial, destino fijo, idempotencia y cierre terminal (7.872261ms) @metis/companies:test: ✔ remotos: referencias de compañía y duplicados abiertos por recorrido y herramienta (3.785529ms) @metis/companies:test: ✔ remotos: configuración y autorización independientes; caducidad y revocación no borran acceso (4.650736ms) @metis/companies:test: ✔ remotos: disponibilidad de origen y destino, retirada y método personalizado (2.962822ms) @metis/companies:test: ✔ remotos: persistencia conserva auditoría y detecta referencias, claves e historial corruptos (15.996322ms) @metis/companies:test: ✔ remotos: una sede archivada conserva conexiones existentes pero rechaza nuevas (1.153209ms) @metis/companies:test: ✔ instalaciones: pertenecen al equipo, admiten SO/aplicaciones y rechazan recursos ajenos y destinos variables (8.528966ms) @metis/companies:test: ✔ instalaciones: versiones, idempotencia, retirada, revisión y persistencia de historial (13.819606ms) @metis/companies:test: ✔ licencia del software: opcional, misma compañía y tipo, vigencia, desvinculación e historial idempotente (12.110493ms) @metis/companies:test: ✔ R2.4: global activo e inactivo separan alta, reconfiguración y recuperación histórica (1.930115ms) @metis/companies:test: ✔ teletrabajo: ausencia, límites, fechas reales y contrato estricto (7.385957ms) @metis/companies:test: ✔ teletrabajo: UUID, renovación y revocación auditadas, igualdad y destino fijo (4.414134ms) @metis/companies:test: ✔ teletrabajo: vigencia inclusiva, programación, caducidad y persona inactiva (4.012631ms) @metis/companies:test: ✔ teletrabajo: ámbito, unicidad incluso revocada, disponibilidad y retirada (6.294449ms) @metis/companies:test: ✔ teletrabajo: rehidratación preserva identidad y detecta corrupción de raíz e historial (37.840391ms) @metis/companies:test: ✔ Perfil: cuenta opcional, UUID, historial, identidad fija e idempotencia (10.951073ms) @metis/companies:test: ✔ Perfil: desactivar conserva valores e historial, es idempotente y precede al borrado (2.399616ms) @metis/companies:test: ✔ Perfil: misma persona/dispositivo único vigente, múltiples dispositivos/personas y revisión sin pérdida de datos (1.63541ms) @metis/companies:test: ✔ Perfil: cuenta autorizada, vigencia inclusiva de caducidad, cierre de autorización y cuenta técnica (1.50281ms) @metis/companies:test: ✔ Perfil: persistencia conserva revisiones y rechaza raíz o cuenta histórica incoherentes (8.568257ms) @metis/companies:test: ✔ Perfil: solo un ordenador principal activo admite altas y reactivaciones; el historial se conserva (0.919206ms) @metis/companies:test: ✔ PNG, JPEG y WebP se normalizan sin recorte y sin metadatos a un avatar ligero (256.040561ms) @metis/companies:test: ✔ se rechazan archivos vacíos, corruptos, SVG y GIF aunque simulen un MIME válido (7.79066ms) @metis/companies:test: ✔ se rechazan excesos de peso y dimensión antes de almacenar (11.467488ms) @metis/companies:test: ✔ los PNG animados se rechazan antes de decodificarlos (6.942753ms) @metis/companies:test: ✔ el contexto distingue cuentas y grupos del entorno, sin incluir otros entornos o datos globales (5.683444ms) @metis/companies:test: ✔ recurso contextual: incluye identidades de sistemas distintos sin mezclar necesidades y concesiones ajenas (14.220509ms) @metis/companies:test: ✔ filtro vacío no incluye elementos ajenos y las rutas validan UUID y contexto de compañía (4.394233ms) @metis/companies:test: ✔ los catálogos presentan alta mediante acción y no un formulario junto al listado (144.411842ms) @metis/companies:test: ✔ cuentas ofrecen caducidad opcional y campos sin contraseña (40.196263ms) @metis/companies:test: ✔ la ayuda explica todos los elementos en ambos idiomas y distingue el ámbito (90.319489ms) @metis/companies:test: ✔ los ejemplos del sistema orientan sin rellenar datos del alta (11.522975ms) @metis/companies:test: ✔ las altas rápidas respetan el contexto, ámbito y relaciones históricas (2.908519ms) @metis/companies:test: ✔ los formularios ofrecen altas relacionadas y el segundo modal evita altas anidadas (207.483654ms) @metis/companies:test: ✔ aplicaciones: listado sin formularios, alta en cabecera y traducciones (197.965508ms) @metis/companies:test: ✔ aplicaciones: selectores con alta rápida y ayuda inferior antes de guardar (72.991793ms) @metis/companies:test: ✔ R2.5: perfil muestra nombre, origen y versión global sin ResourceDTO local ni mezcla de perfiles (118.317861ms) @metis/companies:test: ✔ certificados: listado sin formularios, alta en cabecera y traducciones (248.775816ms) @metis/companies:test: ✔ certificados: selectores con alta rápida y ayuda inferior antes de guardar (76.648419ms) @metis/companies:test: ✔ la compañía de origen es ámbito visible, no un filtro eliminable con Limpiar filtros (408.875863ms) @metis/companies:test: ✔ directorio: orden y página proceden de URL sin perder la consulta (97.610335ms) @metis/companies:test: ✔ las subentradas de Personas conservan contexto y reemplazan el filtro de la vista (62.643507ms) @metis/companies:test: ✔ el dashboard no ofrece selector de compañía y conserva las métricas de cada ámbito (82.235435ms) @metis/companies:test: ✔ el resumen de compañía es la entrada por defecto y ofrece destinos reales (142.799129ms) @metis/companies:test: ✔ los índices de catálogos distinguen definiciones globales y variantes de compañía (19.94863ms) @metis/companies:test: ✔ el listado presenta estado vacío y acceso al alta sin formularios visibles (110.425418ms) @metis/companies:test: ✖ la ficha presenta datos de la compañía, contactos y acceso a sedes (128.318234ms) @metis/companies:test: ✔ el formulario de sede ofrece dirección y teléfono opcionales (49.232719ms) @metis/companies:test: ✖ el formulario de persona distingue contactos de cuentas de acceso y permite datos opcionales (33.427217ms) @metis/companies:test: ✔ asignar un departamento permite añadir el primero y conserva el selector en edición (32.38701ms) @metis/companies:test: ✔ el tablero de compañía tiene composición propia, acciones arriba y métricas limitadas a su ámbito (29.772493ms) @metis/companies:test: ✔ el menú de compañía ordena trabajo y personas por grupos sin repetir las acciones de usuario (82.291534ms) @metis/companies:test: ✔ el menú muestra el contador de infraestructura: ready (78.736411ms) @metis/companies:test: ✔ el menú muestra el contador de infraestructura: pending (76.481796ms) @metis/companies:test: ✔ el menú muestra el contador de infraestructura: error (90.212485ms) @metis/companies:test: ✔ sedes: listado traducido con filtro de archivadas y solo sedes activas por defecto (87.206266ms) @metis/companies:test: ✔ la navegación de compañía conserva 21 enlaces reales, sección activa y contexto es/en (232.620807ms) @metis/companies:test: ✔ el logo sustituye iniciales con URL versionada, dimensiones fijas y carga diferida (39.027555ms) @metis/companies:test: ✔ sin logotipo aparecen iniciales y las listas consultan la misma caché de compañías (22.772649ms) @metis/companies:test: ✔ cuentas del mapeo: exige asociación vigente y catálogos activos; no atribuye por login o por perfil (10.110367ms) @metis/companies:test: ✔ actualización del mapeo: omitir cuenta conserva semántica distinta de retirarla explícitamente; admite revisión capturada (2.712718ms) @metis/companies:test: ✔ uso de impresora: agrupa perfiles de un mismo equipo y separa pendientes e historial (37.900552ms) @metis/companies:test: ✔ uso de impresora: referencias sin resolver no se presentan como ausencia de uso (13.347089ms) @metis/companies:test: ✔ identidades locales: entorno del activo, navegación por UUID y estado vigente en es/en (56.430166ms) @metis/companies:test: ✔ propietario local: vínculo retirado conserva navegación y no ofrece reasignación (1.668611ms) @metis/companies:test: ✔ cuenta del mapeo: seleccionar perfil es una acción explícita; el render no infiere ni cambia cuenta (44.318987ms) @metis/companies:test: ✔ correo: listado traducido, alta en cabecera y formularios ocultos (171.400318ms) @metis/companies:test: ✔ correo: selectores reutilizables con altas y ayuda inmediatamente antes de guardar (35.640033ms) @metis/companies:test: ✔ Buzones: alta en modal, cuenta opcional y ayuda al final (38.050249ms) @metis/companies:test: ✔ L04.2: correo mantiene tabla y criterios mientras faltan sus referencias (34.120823ms) @metis/companies:test: ✔ Personas conserva búsqueda por nombre, contactos, consulta y distinción ñ/n en es/en (949.939593ms) @metis/companies:test: ✔ organización: resuelve departamento y cargo vigentes del responsable (1.214208ms) @metis/companies:test: ✔ organización: sin responsable o asignación no infiere datos desde perfiles ni cargo genérico de persona (1.002407ms) @metis/companies:test: ✔ organización: periodos semiabiertos, históricos y futuros (0.215101ms) @metis/companies:test: ✔ organización: varias vigentes conservan todas, principal primero y orden estable sin mutar (12.802585ms) @metis/companies:test: ✔ organización: dos principales no ocultan información seleccionando una arbitrariamente (0.586404ms) @metis/companies:test: ✔ organización: aislamiento de compañía y persona, y referencias incompletas (0.967706ms) @metis/companies:test: ✔ organización: cambios y refetch se derivan de la fuente actual (0.430602ms) @metis/companies:test: ✔ impresoras: listado sin formularios, alta en cabecera y traducciones (271.285198ms) @metis/companies:test: ✔ impresoras: selectores con alta rápida y ayuda inferior antes de guardar (78.923739ms) @metis/companies:test: ✔ L04.2: Procesos recupera búsqueda, cerrados, orden y página en sus enlaces (294.962904ms) @metis/companies:test: ✔ procesos: listados es/en sin formularios junto a los datos (183.763287ms) @metis/companies:test: ✔ procesos: alta rápida y ayuda inferior antes del pie (58.89928ms) @metis/companies:test: ✔ plantillas: instrucciones, desactivación y ayuda global es/en sin datos de compañía (37.694643ms) @metis/companies:test: ✔ seguimiento: origen personal, revisión actual y edición sin afirmar retirada real; cerrados sin editar (134.355067ms) @metis/companies:test: ✔ remotos: consulta sin formularios y traducciones (233.445744ms) @metis/companies:test: ✔ remotos: formulario, altas rápidas y ayuda antes del pie (95.388713ms) @metis/companies:test: ✔ remotos: origen personal, acceso configurado sin autorización y VPN separada (4.477433ms) @metis/companies:test: ✔ el borrado de cuentas valida la respuesta, envía CSRF y conserva errores de negocio (52.776944ms) @metis/companies:test: ✔ las consultas de compañías conservan sus rutas y rechazan respuestas inválidas (3.394422ms) @metis/companies:test: ✔ lectura y guardado de accesos están separados sin cambiar el contrato HTTP (5.819038ms) @metis/companies:test: ✔ el guardado de usos de buzón mantiene su endpoint y no se confunde con la consulta (3.679624ms) @metis/companies:test: ✔ los adapters mantienen la ausencia semántica sin modificar los campos del formulario (0.397903ms) @metis/companies:test: ✔ las instrucciones de proceso conservan el orden y excluyen líneas vacías (0.300202ms) @metis/companies:test: ✔ la validación de logos conserva tipos permitidos, vacío y límite exacto de tamaño (0.319702ms) @metis/companies:test: ✔ la tabla espera todas sus referencias y distingue actualización de disponibilidad (1.56911ms) @metis/companies:test: ✔ un fallo recuperable conserva datos anteriores sin presentarlos como actualizados (1.118907ms) @metis/companies:test: ✔ una fuente denegada impide mostrar la caché de todo el listado compuesto (0.680804ms) @metis/companies:test: ✔ dashboard: HTTP 401 conserva la semántica de disponibilidad (42.629377ms) @metis/companies:test: ✔ dashboard: HTTP 403 conserva la semántica de disponibilidad (1.233408ms) @metis/companies:test: ✔ dashboard: HTTP 503 conserva la semántica de disponibilidad (0.378502ms) @metis/companies:test: ✔ dashboard: una lectura correcta valida y conserva la página del proveedor (5.887938ms) @metis/companies:test: ✔ iniciales y siglas soportan nombres vacíos, Unicode y separadores (3.245324ms) @metis/companies:test: ✔ el color es estable con variaciones de espacios, mayúsculas y acentos (0.413203ms) @metis/companies:test: ✔ los colores generados mantienen contraste AA para texto pequeño (1.559911ms) @metis/companies:test: ✔ el avatar conserva su nombre accesible y puede ser decorativo dentro de un botón etiquetado (21.403558ms) @metis/companies:test: ✔ OSUI-01/02/17: SO actual desde instalación, independiente de cualquier valor de fábrica (14.528007ms) @metis/companies:test: ✔ OSUI-03/04/05/18: vacío, pendiente y retirado no son SO actual (56.125714ms) @metis/companies:test: ✔ OSUI-06/07: varios SO, orden determinista y aplicaciones excluidas (24.38958ms) @metis/companies:test: ✔ OSUI-08/12: cambiar de activo conserva solo su SO, sin aceptar compañías ajenas (3.947229ms) @metis/companies:test: ✔ OSUI-09: versión de instalación y redundancia literal sin reglas de fabricante (10.83588ms) @metis/companies:test: ✔ OSUI-10: referencia no resoluble no significa ausencia; inactiva resoluble conserva información (15.784917ms) @metis/companies:test: ✔ OSUI-11: error con datos previos, error de resolver y carga no se presentan como vacío (18.337235ms) @metis/companies:test: ✔ OSUI-13/14: servidor sin puesto y plantilla propia consumen la misma lectura por activo (7.249554ms) @metis/companies:test: ✔ OSUI-16: presentación es/en y versión opcional (37.95258ms) @metis/companies:test: ✔ SO global: selector conserva scope y destino SO; la versión instalada sigue separada (0.777906ms) @metis/companies:test: ✔ REG-SO-01/11: render global configurado, inactivo e histórico conserva nombre, versión y destino es/en (70.503921ms) @metis/companies:test: ✔ software del puesto es/en: SO actual, versión, enlaces y separación por ordenador sin formularios incrustados (198.174064ms) @metis/companies:test: ✔ formulario software: recurso fijo en edición, estados permitidos, ayuda y ausencia de persona/perfil (62.585363ms) @metis/companies:test: ✔ R2.4: nombre, origen y enlace global se resuelven sin ResourceDTO local; licencia continúa particular (68.651807ms) @metis/companies:test: ✔ teletrabajo: consulta sin formularios y traducciones (181.803042ms) @metis/companies:test: ✔ teletrabajo: formulario con alta rápida de persona, fechas opcionales y ayuda inferior (55.117307ms) @metis/companies:test: ✔ teletrabajo: sin autorización no se presupone permiso; persona inactiva requiere revisión (15.311413ms) @metis/companies:test: ✔ teletrabajo: alta desde un perfil fija la persona y no abre otra alta rápida (14.334905ms) @metis/companies:test: ✔ teletrabajo es/en: conserva estado documental, vigencia y revisión como mensajes independientes (58.750134ms) @metis/companies:test: ✔ entorno: reúne varios correos y configuraciones, distingue pendiente, retirada y revisión (3.960226ms) @metis/companies:test: ✔ entorno: excluye cerradas, otros perfiles, compañías y correo antiguo sin adivinar relaciones (1.666011ms) @metis/companies:test: ✔ entorno: composición vigente del puesto y datos actuales sin duplicación (0.854406ms) @metis/companies:test: ✔ entorno: ficha es/en con estados y acciones, sin formularios; muestra falso y varios correos (110.819224ms) @metis/companies:test: ✔ entorno: carga, fallo parcial sin falsa ficha vacía, perfil inexistente y aviso de archivado (61.103299ms) @metis/companies:test: ✔ entorno: consulta autorización por persona, común a sus perfiles y sin confundir preparación (46.702105ms) @metis/companies:test: ✔ entorno: accesos abiertos de la persona y sus orígenes sin confundirlos con configuraciones del perfil (24.243158ms) @metis/companies:test: ✔ las entidades de los selectores se pluralizan en es/en sin reutilizar el verbo de acción (7.900751ms) @metis/companies:test: ✔ perfiles: listado es/en, alta en cabecera y ausencia de formulario junto al listado (83.592544ms) @metis/companies:test: ✔ perfiles: la cabecera breve conserva el motivo completo en la celda de revisión (50.314827ms) @metis/companies:test: ✔ perfiles: alta en cuatro pasos, sin guardado intermedio y contenido de ayuda conservado (17.792316ms) @metis/companies:test: ✔ perfiles: selección de persona explícita y cuenta opcional con altas independientes (27.436279ms) @metis/companies:test: ✔ perfiles: el puesto fijado aporta su ordenador y no selecciona al responsable como usuario (8.887558ms) @metis/companies:test: ✔ perfiles: requisitos por paso, cuenta opcional y propuesta basada en persona y ordenador (0.380102ms) @metis/companies:test: ✔ perfiles: el nombre sugerido respeta el límite del contrato (0.325602ms) @metis/companies:test: ✔ perfiles: resumen con listas, ordenador único y ausencias representadas por guion (4.749231ms) @metis/companies:test: ✔ perfiles: edición completa con identidad fija aunque el perfil requiera revisión (12.063378ms) @metis/companies:test: ✔ perfiles: orden y página navegables conservan búsqueda y archivados al abrir entorno (52.777244ms) @metis/companies:test: ✔ Personas admite actividad en listado y ficha, con los demás criterios de contexto (15.179698ms) @metis/companies:test: ✔ el catálogo de aplicaciones de compañía conserva cursor, filtros y retorno a ficha (1.54101ms) @metis/companies:test: ✔ las funcionalidades archivadas no tienen rutas activas (11.712876ms) @metis/companies:test: ✔ el filtro de plantilla permite abrir listados y fichas de activos y recursos (1.457309ms) @metis/companies:test: ✔ el filtro de plantilla se limita a los inventarios que conocen sus definiciones (4.732631ms) @metis/companies:test: ✔ todas las secciones de compañía tienen una ruta propia y el índice es el resumen (9.042758ms) @metis/companies:test: ✔ los índices de catálogos y los cinco catálogos globales son destinos independientes (1.802712ms) @metis/companies:test: ✔ las configuraciones conservan la compañía y el UUID del perfil (2.329215ms) @metis/companies:test: ✔ las rutas desconocidas y los parámetros inválidos no abren una sección por defecto (17.03921ms) @metis/companies:test: ✔ la ficha de puesto tiene ruta propia, conserva el UUID y rechaza identificadores inválidos (1.120307ms) @metis/companies:test: ✔ dominios: enlaces a cuentas y grupos limitados al entorno de la compañía (13.88749ms) @metis/companies:test: ✔ los parámetros de contexto llegan al consumidor sin crear rutas nuevas ni aceptar claves ajenas (6.105039ms) @metis/companies:test: ✔ catálogo de aplicaciones: UUID global y criterios propios sin compañía ficticia (12.487781ms) @metis/companies:test: ✔ catálogo SO: ruta específica y filtros, sin confundir con aplicaciones (0.648405ms) @metis/companies:test: ✔ la barra comienza desplegada sin navegador o sin una preferencia válida (5.512536ms) @metis/companies:test: ✔ plegar y desplegar persisten la preferencia sin modificar otras claves (0.375602ms) @metis/companies:test: ✔ un fallo de lectura, escritura o acceso a localStorage no bloquea la barra (0.365102ms) @metis/companies:test: ✔ la capacidad del shell fuerza modos sin cambiar la preferencia manual (6.06794ms) @metis/companies:test: ✔ un menú solo libera su modalidad si su presentación pasa a estar disponible fija (0.338403ms) @metis/companies:test: ✔ layout 640px: 0 asociados y 0 instalaciones (27.94378ms) @metis/companies:test: ✔ layout 640px: 0 asociados y 3 instalaciones (28.888109ms) @metis/companies:test: ✔ layout 640px: 1 asociados y 0 instalaciones (7.681957ms) @metis/companies:test: ✔ layout 640px: 1 asociados y 2 instalaciones (10.564879ms) @metis/companies:test: ✔ layout 640px: 2 asociados y 3 instalaciones (24.815186ms) @metis/companies:test: ✔ layout 748px: 0 asociados y 0 instalaciones (2.74802ms) @metis/companies:test: ✔ layout 748px: 0 asociados y 3 instalaciones (20.598055ms) @metis/companies:test: ✔ layout 748px: 1 asociados y 0 instalaciones (12.833195ms) @metis/companies:test: ✔ layout 748px: 1 asociados y 2 instalaciones (8.358362ms) @metis/companies:test: ✔ layout 748px: 2 asociados y 3 instalaciones (15.931919ms) @metis/companies:test: ✔ layout 900px: 0 asociados y 0 instalaciones (4.390833ms) @metis/companies:test: ✔ layout 900px: 0 asociados y 3 instalaciones (10.285377ms) @metis/companies:test: ✔ layout 900px: 1 asociados y 0 instalaciones (2.860422ms) @metis/companies:test: ✔ layout 900px: 1 asociados y 2 instalaciones (7.388255ms) @metis/companies:test: ✔ layout 900px: 2 asociados y 3 instalaciones (18.488638ms) @metis/companies:test: ✔ layout 1200px: 0 asociados y 0 instalaciones (18.68624ms) @metis/companies:test: ✔ layout 1200px: 0 asociados y 3 instalaciones (12.293492ms) @metis/companies:test: ✔ layout 1200px: 1 asociados y 0 instalaciones (6.583449ms) @metis/companies:test: ✔ layout 1200px: 1 asociados y 2 instalaciones (10.004175ms) @metis/companies:test: ✔ layout 1200px: 2 asociados y 3 instalaciones (8.492564ms) @metis/companies:test: ✔ layout: dos asociados se reparten por capacidad; sin principal no se fabrican conexiones (9.710173ms) @metis/companies:test: ✔ preview: conserva límites y publica solo cobertura real de fuentes conocidas (2.374718ms) @metis/companies:test: ✔ WD04.4: acción estable de presentación, fuera de las relaciones y contadores, sin solapamientos (382.145055ms) @metis/companies:test: ✔ WD04.5: acciones ordenadas del principal y periférico sin inferir software por categoría (2.236515ms) @metis/companies:test: ✔ WD04.5: lectura sin permisos de edición, carga/error parcial y activos retirados (0.550203ms) @metis/companies:test: ✔ WD04.5: distingue instalación, producto global/inactivo y licencia particular (0.860106ms) @metis/companies:test: ✔ WD04.5: producto particular y gates cerrados no crean acciones administrativas (1.53801ms) @metis/companies:test: ✔ WD04.5: SO global utiliza la referencia pública y su etiqueta específica (0.609404ms) @metis/companies:test: ✔ WD04.5: estados terminales, refetch y cambio de principal o compañía no reutilizan acciones antiguas (0.895506ms) @metis/companies:test: ✔ WD04.5: trigger es/en separado del enlace, tarjetas sin acciones y añadir sin menú (58.990385ms) @metis/companies:test: ✔ dashboard: ordenador y equipamiento actuales, personas por perfiles y archivados separados (34.985262ms) @metis/companies:test: ✔ dashboard: sin responsable sigue mostrando usuarios y un puesto desmantelado no cuenta historia como miembros (0.318502ms) @metis/companies:test: ✔ dashboard: sustituir ordenador resuelve perfiles del nuevo host sin trasladar los anteriores (7.968059ms) @metis/companies:test: ✔ dashboard: referencias ajenas o principal fuera de composición no aportan relaciones (0.378103ms) @metis/companies:test: ✔ pendientes: solo pending, perfiles activos, compañía correcta y deduplicación por familia e identidad (2.287217ms) @metis/companies:test: ✔ último cambio: orden cronológico sin mutación, altas de miembros y campos realmente cambiados (1.794414ms) @metis/companies:test: ✔ equipamiento: principal válido primero, miembros únicos y secundarios en orden declarado (2.428319ms) @metis/companies:test: ✔ equipamiento: activos sin principal no adquieren un principal por su tipo o posición (0.304503ms) @metis/companies:test: ✔ equipamiento: principal fuera de composición se advierte sin añadirlo a miembros (0.232102ms) @metis/companies:test: ✔ equipamiento: referencia ausente o de otra compañía no inventa datos ni marca principal (2.841221ms) @metis/companies:test: ✔ equipamiento: vacío y desmantelado no recuperan miembros del historial (0.406003ms) @metis/companies:test: ✔ equipamiento: averiado sigue asignado y conserva ambos estados originales (0.454303ms) @metis/companies:test: ✔ expansión: todos abiertos inicialmente y plegado independiente de cada perfil (1.893214ms) @metis/companies:test: ✔ refetch conserva plegados y filtros individuales, incluso con error o fuentes incompletas (0.401803ms) @metis/companies:test: ✔ retirada o archivo limpia únicamente el estado del perfil afectado (0.405603ms) @metis/companies:test: ✔ cambio de compañía, puesto u ordenador restablece todos los perfiles abiertos y los filtros (0.429203ms) @metis/companies:test: ✔ orden estable y numérico del resumen y los pendientes, sin mutar datos remotos (10.508678ms) @metis/companies:test: ✔ incluye solo perfiles del ordenador principal, distingue inactivos y deduplica personas (4.891236ms) @metis/companies:test: ✔ puesto inexistente o sin composición no hereda perfiles de otros activos (0.850906ms) @metis/companies:test: ✔ persona: responsabilidad y uso son independientes y solo se consideran puestos y perfiles vigentes (1.164508ms) @metis/companies:test: ✔ ficha de puesto es/en: cabecera, retorno, bloques vacíos y edición modal sin formulario incrustado (109.937674ms) @metis/companies:test: ✔ un UUID de puesto ausente muestra no encontrado sin cabecera ni edición de otro puesto (3.507828ms) @metis/companies:test: ✔ ficha de persona es/en: distingue responsabilidad y uso, y enlaza los puestos (6.437451ms) @metis/companies:test: ✔ ficha: ordenador destacado y periféricos sin repetir, perfiles solo del ordenador y personas deduplicadas (103.085419ms) @metis/companies:test: ✔ personas y perfiles: carga y error no se presentan como listados vacíos (12.5875ms) @metis/companies:test: ✔ ficha: no permite crear perfiles si el ordenador está retirado o el puesto está desactivado (48.707887ms) @metis/companies:test: ✔ historial del puesto es/en: revisiones de más reciente a más antigua con autor y valores de cada momento (9.981779ms) @metis/companies:test: ✔ personas es/en: enlaces a todos sus puestos bajo responsabilidad, sin confundirlos con puestos usados (56.689251ms) @metis/companies:test: ✔ menú de compañía es/en: totales en badges alineados y cero real en secciones vacías (37.959202ms) @metis/companies:test: ✔ ruta de activo de compañía abre la página con información, historial, software y solo sus perfiles (107.194951ms) @metis/companies:test: ✔ equipamiento es/en: badges de principal, técnico y uso conservan su significado (7.153357ms) @metis/companies:test: ✔ equipamiento: inventario fallido no se presenta como vacío y permite reintentar (3.050324ms) @metis/companies:test: ✔ equipamiento: principal inconsistente se explica y no se incorpora como miembro válido (2.375619ms) @metis/companies:test: ✔ personas y perfiles es/en: expansión contextual, enlaces independientes y resumen cero real (9.934379ms) @metis/companies:test: ✔ cabecera es/en: responsable largo o ausente, contexto independiente y mapa con resumen (74.884295ms) @metis/companies:test: ✔ perfiles: lista completa y todos desplegados por defecto, incluso con cincuenta perfiles (76.186805ms) @metis/companies:test: ✔ perfiles: carga, error y datos retenidos no publican un total como actual (7.775261ms) @metis/companies:test: ✔ equipamiento: contador conocido cero, uno, cinco y seis; error conserva filas sin publicar total (12.473499ms) @metis/companies:test: ✔ configuración: cobertura desconocida, revisión y notas permanecen fuera del disclosure técnico (2.841023ms) @metis/companies:test: ✔ perfiles: una actualización en curso conserva el total conocido y anuncia la actividad (1.593613ms) @metis/companies:test: ✔ v2.2: dependencia sin principal conserva mapa y resumen y una explicación principal sin tabla vacía (17.465039ms) @metis/companies:test: ✔ v2.2: un vacío confirmado de perfiles conserva el alta y evita cabeceras de una tabla sin filas (1.18171ms) @metis/companies:test: ✔ v2.2: soporte distingue perfiles en carga, error, ausencia confirmada y persona no resuelta (3.466628ms) @metis/companies:test: ✔ v2.2: referencia de principal no resuelta no publica cero pendientes ni ausencia de perfiles (14.662417ms) @metis/companies:test: ✔ v3: Software conserva los tres estados documentales con la misma representación que las familias (29.893937ms) @metis/companies:test: ✔ v3: estados técnicos de equipamiento conservan principal y asignación en es/en (13.279905ms) @metis/companies:test: ✔ responsable es/en: avatar y nombre abren un único popup y la ausencia no ofrece acciones (3.79863ms) @metis/companies:test: ✔ mapa visual: aísla compañías, deduplica miembros y conserva software y estados reales (15.916626ms) @metis/companies:test: ✔ mapa es/en: principal solo, vacíos confirmados y error de software conservan navegación y gestión (39.806416ms) @metis/companies:test: ✔ mapa: composición vacía y sin principal no fabrica relaciones ni instalaciones (1.553212ms) @metis/companies:test: ✔ contexto de persona: rechaza datos de otra compañía y no ofrece acciones (0.639105ms) @metis/companies:test: ✔ mapa es/en: carga inicial y carga parcial mantienen estados accesibles (21.41307ms) @metis/companies:test: ✔ mapa es/en: leyenda con tres conceptos y cobertura explícita sin totales inventados (2.099817ms) @metis/companies:test: ✔ mapa es/en: revisión de software traducida incluso sin referencia navegable (1.072609ms) @metis/companies:test: ✔ WD04.4 es/en: acción autorizada, vacío accionable y lectura sin permiso (6.187549ms) @metis/companies:test: ✔ perfiles del puesto: configuraciones de todos los activos abiertas y destinos accesibles únicos (14.788518ms) @metis/companies:test: ℹ tests 317 @metis/companies:test: ℹ suites 0 @metis/companies:test: ℹ pass 315 @metis/companies:test: ℹ fail 2 @metis/companies:test: ℹ cancelled 0 @metis/companies:test: ℹ skipped 0 @metis/companies:test: ℹ todo 0 @metis/companies:test: ℹ duration_ms 24934.748373 @metis/companies:test: @metis/companies:test: ✖ failing tests: @metis/companies:test: @metis/companies:test: test at src/web/companies/shared/companies-page.test.tsx:1:6023 @metis/companies:test: ✖ la ficha presenta datos de la compañía, contactos y acceso a sedes (128.318234ms) @metis/companies:test: AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value: @metis/companies:test: @metis/companies:test: assert.ok(markup.includes("Personas (1)")) @metis/companies:test: @metis/companies:test: at TestContext. (/home/david/dev/metis-desk/modules/companies/src/web/companies/shared/companies-page.test.tsx:229:10) @metis/companies:test: at async Test.run (node:internal/test_runner/test:1404:7) @metis/companies:test: at async Test.processPendingSubtests (node:internal/test_runner/test:969:7) { @metis/companies:test: generatedMessage: true, @metis/companies:test: code: 'ERR_ASSERTION', @metis/companies:test: actual: false, @metis/companies:test: expected: true, @metis/companies:test: operator: '==', @metis/companies:test: diff: 'simple' @metis/companies:test: } @metis/companies:test: @metis/companies:test: test at src/web/companies/shared/companies-page.test.tsx:1:7439 @metis/companies:test: ✖ el formulario de persona distingue contactos de cuentas de acceso y permite datos opcionales (33.427217ms) @metis/companies:test: AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value: @metis/companies:test: @metis/companies:test: assert.ok(markup.includes("Esta persona no tiene acceso a Metis Desk")) @metis/companies:test: @metis/companies:test: at TestContext. (/home/david/dev/metis-desk/modules/companies/src/web/companies/shared/companies-page.test.tsx:259:10) @metis/companies:test: at async Test.run (node:internal/test_runner/test:1404:7) @metis/companies:test: at async Test.processPendingSubtests (node:internal/test_runner/test:969:7) { @metis/companies:test: generatedMessage: true, @metis/companies:test: code: 'ERR_ASSERTION', @metis/companies:test: actual: false, @metis/companies:test: expected: true, @metis/companies:test: operator: '==', @metis/companies:test: diff: 'simple' @metis/companies:test: } @metis/companies:test: [ELIFECYCLE] Test failed. See above for more details. ERROR @metis/companies#test: command (/home/david/dev/metis-desk/modules/companies) /home/david/.nvm/versions/node/v24.20.0/bin/pnpm run test exited (1) Tasks: 7 successful, 8 total Cached: 0 cached, 8 total Time: 44.756s Failed: @metis/companies#test ERROR run failed: command exited (1) [ELIFECYCLE] Test failed. See above for more details.