$ 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 ✔ R2.6: nombre y proveedor son señales, nunca equivalencia confirmada (1.231616ms) ✔ R2.6: preserva tildes, puntuación, abreviaturas, ediciones, versiones y números (0.376204ms) ✔ R2.6: homónimos genéricos se mantienen débiles y los UUID nunca se sustituyen (22.305088ms) ✔ F2: SO global público tipado, sin contaminación de aplicaciones ni perfiles (8.075287ms) ✔ F2: elegibilidad de SO exige stock real y campos globales (0.322503ms) ✔ F2: contrato 3 y gates de SO independientes; aplicaciones no abren SO (0.299603ms) ✔ F3: cualquier escritor valida identidad publicada, corrección documental e historial (34.291168ms) ✔ recurso: activar/desactivar conserva datos e historial y repetir estado no añade revisiones (12.676836ms) ✔ recurso: valida identidades y rechaza actuar sobre recursos ajenos (2.464926ms) ✔ recurso: propaga el bloqueo por asociaciones y permite desactivar (2.204824ms) ✔ recurso: elimina y la repetición devuelve ausencia sin efectos adicionales (6.674072ms) ✔ elegibilidad global exige serie exacta y campos globales; las copias no elevan ámbito (1.905821ms) ✔ schemas discriminan owner, propósito, OS local y proyecciones privadas (12.243932ms) ✔ requests acotan lotes, consulta, paginación y rechazan privilegios o integración (4.950553ms) ✔ búsqueda literal conserva ñ, puntuación y espacios; pagina tras filtrar con desempate UUID (5.450259ms) ✔ R2.5 admite gates configurables; los valores predeterminados siguen cerrados (0.405605ms) ✔ R2.5: software y perfil se habilitan por separado y requieren catálogo (0.437904ms) ✔ R2.5: perfil no depende de software ni abre asociaciones con catálogo cerrado (0.317003ms) ✔ lectores locales: excluyen global y otra compañía incluso si el repositorio los entrega; stockKey no depende del nombre (17.228284ms) ✔ HTTP actual sin MariaDB: aislamiento con 15 compañías, 50 recursos locales, alta, edición, estado e historial (396.325645ms) ✔ DNS: normalización explícita, etiqueta única heredada, punto raíz y política ASCII IDN (2.207924ms) ✔ capacidad estable: la plantilla renombrada sigue siendo dominio y una copia arbitraria no (2.272924ms) ✔ alta, edición, DNS y archivo usan Resource y conservan su identidad e historial (6.923375ms) ✔ catálogo: DNS obligatorio protegido, NetBIOS opcional e inicialización idempotente (15.121263ms) ✔ identificadores de campo: mayúsculas no cambian identidad ni permiten duplicados (0.825809ms) ✔ global: crear exige UUID v7 y conserva identidad y propietario en edición e idempotencia (12.355032ms) ✔ global: captura por stockKey, sin depender del nombre traducido de la plantilla (3.562338ms) ✔ SMB acepta \\NAS-01\Finanzas (2.271825ms) ✔ SMB acepta \\files.example.local\Docs (0.293204ms) ✔ SMB acepta \\192.168.5.10\C$ (0.164602ms) ✔ SMB acepta \\samba\Diseño\Año 2026 (0.422204ms) ✔ SMB acepta \\NAS\Docs\ (0.330904ms) ✔ SMB rechaza "" (0.228603ms) ✔ SMB rechaza "\\\\" (0.250303ms) ✔ SMB rechaza "\\\\host" (0.133901ms) ✔ SMB rechaza "\\\\\\share" (2.418226ms) ✔ SMB rechaza "\\\\host\\\\" (0.550606ms) ✔ SMB rechaza "C:\\Datos" (0.152901ms) ✔ SMB rechaza "https://host/share" (0.100001ms) ✔ SMB rechaza "\\\\host\\share\\.." (0.321703ms) ✔ SMB rechaza "\\\\host\\share\\." (0.099201ms) ✔ SMB rechaza "\\\\?\\UNC\\host\\share" (0.164002ms) ✔ SMB rechaza "\\\\host\\share\\\\child" (0.210603ms) ✔ SMB rechaza "\\\\host\\share." (0.262203ms) ✔ SMB rechaza "\\\\host\\ share" (0.093101ms) ✔ SMB rechaza "\\\\ho st\\share" (0.0716ms) ✔ SMB rechaza "\\\\host\\bad\u0000" (0.092901ms) ✔ SMB rechaza "\\\\host\\bad\ud800" (0.118101ms) ✔ SMB rechaza "\\\\host\\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" (0.0877ms) ✔ SMB: comparación conservadora, alias y Unicode sin transformaciones destructivas (1.280214ms) ✔ SMB: semántica por stockKey y protección del catálogo sin bloquear etiquetas u obligatoriedad (19.661911ms) ✔ SMB: alta validada y diagnóstico histórico sin conversión ni revisión (17.875892ms) ✔ SMB: nuevas altas fijan integración access y rechazan contexto incompatible (8.36469ms) ✔ F1: identidad completa, edición conocida/no aplicable/desconocida e inactivos (4.554549ms) ✔ F1: normalización conservadora no equipara ediciones, releases ni ausencia desconocida (0.822309ms) ✔ F1: evolución de stock personalizada e idempotente; no elimina campos ni cambia obligatoriedad (32.804952ms) ✔ F1: un catálogo anterior evoluciona sin sobrescribir bindings ni recursos particulares (14.087251ms) ✔ catálogo de recursos: serie idempotente, UUID v7, características opcionales y protección (37.378401ms) ✔ ámbitos, tipos, listas, campos externos y disponibilidad por compañía (8.182888ms) ✔ licencias: ampliar un catálogo previo conserva identidades y disponibilidad (19.636311ms) ✔ plantillas globales de serie editables: conserva identidad, asociaciones, disponibilidad y cambios al reiniciar (12.740137ms) ✔ campos globales de serie editables: listas ampliables, tipo fijo y opciones existentes conservadas (11.259221ms) ✔ sistema operativo: plantilla con uso explícito, copia y ampliación sin sobrescribir definiciones (8.40179ms) ✔ iconos de recursos: todas las plantillas de serie tienen su icono y el arranque no repone los retirados (18.962003ms) ✔ iconos de recursos: cambiar y retirar el icono conserva identidad y asociaciones, con guardado idempotente (11.14542ms) ✔ iconos de recursos: claves desconocidas, cadenas vacías e iconos de campos se rechazan (7.788183ms) ✔ ámbito: pares válidos y rechazo runtime de propietarios contradictorios o ausentes (14.326653ms) ✔ ámbito: proyección preparada separada; HTTP local conserva exactamente su contrato (5.966463ms) ✔ ámbito: edición y propagación locales conservan propietario, UUID e historia; globales son solo lectura (2.87503ms) ✔ Resource: propaga altas, orden y retiradas conservando cero/falso, valores e historial; repetir no genera revisiones (29.87312ms) ✔ Resource: los campos retirados no impiden añadir una plantilla completa y no se fusionan por nombre (5.910163ms) ✔ Resource: retirar secciones conserva solo las necesarias y mover o reincorporar campos aplica el destino (0.721708ms) ✔ recursos: tipos, valores opcionales y obligatorios, cero/falso y campos desconocidos (11.846427ms) ✔ recurso: identidad estable, historial, desactivación e idempotencia (4.007143ms) ✔ buzón como recurso: correo válido, cuenta opcional, cambios auditados y tipo fijo (3.488938ms) ✔ secciones: nombres, identidades, referencias y un solo nivel (11.626625ms) ✔ secciones: igualdad, orden, identidad y persistencia JSON (6.419668ms) ✔ secciones: plantillas globales y locales conservan separación y UUID al editar (6.713372ms) ✔ secciones de serie: el arranque conserva una plantilla sin grupos y su disponibilidad (21.021825ms) ✔ especificación: secciones capturadas, edición posterior y obligatoriedad independiente (13.471245ms) ✔ lector legacy: roundtrip conserva UUID, revisiones, valores, actor, fecha y DTO sin columna scope (18.6734ms) ✔ lector: solo el adaptador legacy conocido interpreta ausencia; ningún ámbito inválido usa fallback (6.083365ms) ✔ proyecciones operativas: global sintético se rechaza antes de SQL, el recurso local sin integración no crea proyección (99.064659ms) ✔ escritor scoped: envía company explícito, preserva la salida legacy y rechaza global (1.365715ms) ✔ selección múltiple añade un lote sin duplicados y conserva las reglas y el orden existentes (4.082543ms) ✔ añadir desde una sección asigna solo los campos nuevos a su destino y conserva los existentes (1.319414ms) ✔ la selección respeta el límite del schema, valida identificadores y rechaza el conjunto vacío (2.85603ms) ✔ el listado reutiliza tabla, búsqueda y casillas traducidas y conserva las selecciones bloqueadas (108.042052ms) ✔ L04.2: campos de recursos recuperan orden y página sin heredar otra pestaña (167.398384ms) ✔ el catálogo muestra plantillas de serie y acción de alta sin formularios junto al listado (115.143825ms) ✔ los formularios tienen ayuda inferior y selección de campos en diálogo con alta rápida (50.526938ms) ✔ iconos de recursos: catálogo y selector traducido conservan la selección al editar y copiar (229.571942ms) ✔ catálogo global: lectura mínima y navegación traducidas, sin administración para ordinarios (36.045985ms) ✔ R2.4: mutación global invalida solo instalaciones cacheadas que usan su UUID (3.423236ms) ✔ R2.5: cambio global invalida configuraciones afectadas y preserva otras compañías (1.158612ms) ✔ SO global: lectura pública es/en conserva identidad estructurada y navegación propia (11.661124ms) ✔ SO global: invalida software y su catálogo sin refrescar aplicaciones ni perfiles (1.589217ms) ✔ columnas de características de recursos: identidad, campos nuevos de catálogo, instantáneas y nombres repetidos (23.45335ms) ✔ columnas elegidas es/en: cero, falso, fecha localizada, unidades y guion para campos ajenos (73.833287ms) ✔ los campos compartidos conservan un único ID y todos sus contextos de catálogo e instantánea (2.829631ms) ✔ columnas generales e integración es/en: notas, fechas, autores y referencias semánticas (31.745039ms) ✔ orden de recursos: aislamiento por compañía y pestaña, incluida Todo (16.513977ms) ✔ orden de recursos: una URL explícita prevalece sobre la preferencia sin sobrescribirla (1.108812ms) ✔ preferencias opcionales: datos inválidos y almacenamiento bloqueado no impiden listar (1.174612ms) ✔ cambiar pestaña limpia el orden y la paginación anteriores conservando la búsqueda (0.422305ms) ✔ la integración de buzón conserva su configuración explícita y no inventa referencias (3.047833ms) ✔ los valores iniciales toleran catálogo pendiente y limitan el nombre sin cambiar la entrada (1.86692ms) ✔ nombre propuesto: prioriza los identificadores de cada plantilla y limita su longitud (19.457508ms) ✔ nombre propuesto: contempla campos personalizados y descarta valores no identificativos (1.662218ms) ✔ paso de campos: exige valores obligatorios y acepta cero y respuestas negativas (0.523206ms) ✔ paso de campos: requiere la dirección de buzón aunque la plantilla la marque opcional (13.524045ms) ✔ recursos: listado con alta modal y sin formulario visible, en español e inglés (127.894465ms) ✔ Recursos: las pestañas incluyen plantillas vacías e inactivas y combinan identidad y búsqueda (421.335414ms) ✔ recurso: ayuda inferior, plantilla con alta rápida y sin asignaciones de recursos (17.78119ms) ✔ licencia: formulario reutilizable con campos opcionales y ayuda antes de guardar (32.084143ms) ✔ asistencia: alta de recurso con plantilla específica y características opcionales (6.850473ms) ✔ alta por pasos: solo muestra la plantilla inicialmente y traduce su navegación (14.455054ms) ✔ indicador de alta: conserva la plantilla elegida y explica el paso actual en ambos idiomas (12.246331ms) ✔ recursos: resumen de plantilla con unidades, booleanos traducidos, cero y límite de cuatro (24.829866ms) ✔ recursos: ficha lateral compacta traducida con cierre, acciones y contenido relacionado (18.940503ms) ✔ recursos: inventario y panel usan el icono vigente de la plantilla sin cambiar la especificación (23.082547ms) ✔ dominio: el formulario traduce el contexto pendiente y solo presenta un entorno confirmado (19.031704ms) ✔ SMB: formulario explica acceso automático o histórico sin selectores incompatibles, es/en (9.3907ms) ✔ campo declarativo: traduce opciones propias y conserva valores que coinciden con el prototipo (33.183154ms) ℹ tests 124 ℹ suites 0 ℹ pass 124 ℹ fail 0 ℹ cancelled 0 ℹ skipped 0 ℹ todo 0 ℹ duration_ms 5080.204188