metis-desk/docs/cierre-programa-listados-l04-4.md
2026-10-25 01:19:17 +02:00

47 KiB
Raw Blame History

L04.4 — Auditoría integral y cierre del programa de listados

Fecha: 24 de octubre de 2026. Entorno: WSL2, Node 24.20.0, pnpm 11.25.0, Chromium headless mediante Playwright MCP Docker con la imagen fijada por el proyecto.

1. Resumen ejecutivo

Dictamen: B — cierre condicionado. El patrón principal tiene regresión funcional y visual por muestras, y se corrigen dos incumplimientos demostrados: desmontaje de tablas del detalle del dashboard durante carga/error y contraste de filas seleccionadas en oscuro. No se acredita una homogeneidad universal del producto ni cumplimiento WCAG global.

El inventario distingue composiciones activas de piezas internas/exportadas. Incluye una matriz por consumidor y 22 capacidades; sus cifras definitivas figuran en la sección 3. Las condiciones para acreditar el cierre pleno aparecen en la sección 20. La densidad móvil general, variantes no ensayadas y el trabajo concurrente de aplicaciones globales conservan su clasificación pendiente; no se ocultan mediante excepciones funcionales.

2. Alcance y metodología

Se consultan AGENTS, DESIGN, la matriz de skills, el patrón de listados y diálogos, componentes, rutas, procedimiento MCP, ambas auditorías originales y los informes L02.1–L04.3. Se buscan consumidores actuales mediante rg en módulos activos y se inspeccionan EntityTable, navegación, columnas, normalización, estados, History, selectores y composiciones de relaciones. Se excluyen vendor, archive y las primitivas como consumidores de producto adicionales.

Se registran status/diff y una copia de 2206 fuentes antes de cambiar código. El repositorio ya contenía cambios extensos, incluidos los del programa y trabajo concurrente R2.4. source-before, initial-sha256.json y el delta propio permiten distinguirlos. No se restablecen archivos ni se interpreta el diff completo contra Git como trabajo de L04.4. La revisión se realiza sobre un workspace cambiante, no sobre un commit congelado: las pruebas acreditan los recorridos y versiones observados, con hashes finales del inventario.

Se prepara una única instalación visual nueva mediante visual-audit.py. El volumen real persistido en ella es 15 compañías; 50 personas, 51 activos y 66 recursos en la principal. Las suites amplían únicamente respuestas de lectura: 50 puestos, 50 perfiles, 50 sedes, 50 departamentos y 50 registros por familias de configuración; 50 publicaciones SMB, 50 pertenencias y sus historiales. Los payloads se validan con schemas reales y las cardinalidades del grafo, incluido el par persona/host activo. No se utiliza la base habitual. Las consultas POST de resolución son lecturas interceptadas, sin escrituras de entidades.

La muestra cubre primitivas y composiciones distintas, no el producto cartesiano de entidades × tamaños × temas × estados. Las suites históricas se reutilizan en lotes; se repiten los casos afectados por correcciones o por una fixture incompatible.

Skills consultadas: ux-tables (principal), ux-design-review, ux-navigation, ux-search, ux-inputs-and-forms, ux-empty-states, ux-error-recovery, ux-microcopy, shadcn, vercel-composition-patterns y vercel-react-best-practices. Aportan criterios de escaneo, identidad, retorno, selección provisional, errores recuperables y composición sin copiar estado remoto. AGENTS/DESIGN y las APIs instaladas prevalecen. No están disponibles los auditores especializados que ux-design-review propone como dependencias, entre ellos ux-heuristics-audit, ux-accessibility-audit, ux-aesthetics-audit y ux-mobile-responsiveness-audit. No se instalan ni se declaran ejecutados. No se cambia estética por recomendaciones genéricas.

3. Inventario final de consumidores

El inventario completo y matriz está versionado: identificador estable L044, módulo, componente, ruta, SHA-256, superficie, ámbito, patrón, estado, prueba, excepción, pendiente y las 22 capacidades.

Una unidad es una composición funcional. Se separan ámbitos/pestañas o lados de una relación cuando modifican el contrato; no se cuentan filas, cada celda UL, cada instancia de SelectWithAction ni componentes internos como consumidores distintos. AssetList se cuenta para inventario y AssetPickerDialog para selección. DashboardRecordsTable es implementación de las variantes del diálogo, no una cuarta superficie.

Se localizan 101 composiciones/candidatos: 99 superficies activas y dos piezas excluidas.

Estado Número
Verificado 2
Pendiente 23
Verificado parcialmente 49
Excepción justificada 25
No aplicable 2

No basta con montar EntityTable para clasificar como Verificado. Las excepciones describen una finalidad legítima; no acreditan sus capacidades de teclado/estados sin pruebas. Las superficies con mera cobertura histórica lo indican expresamente. El apéndice contiene el índice por consumidor; los detalles y capacidades permanecen en el CSV.

4. Matriz de capacidades y verificación

Orden de las capacidades: cabecera, búsqueda, normalización, filtros, limpieza, ordenación, paginación, columnas, identidad, preferencias, inicial, refetch, error, vacío, sin coincidencias, navegación, restauración, scroll, foco, accesibilidad, responsive e i18n es/en.

Código Significado
T Comprobación actual específica de esa capacidad y consumidor, dentro de la muestra indicada.
C Capacidad localizada por revisión de código/composición o contrato común; no equivale a prueba visual del consumidor.
P Capacidad aplicable pendiente de acreditar; no es una excepción.
E Diferencia funcional justificada en la columna excepción.
N No aplicable a esa superficie.

Las pruebas de una primitiva no se propagan como T a todos sus consumidores. Un selector por cursor no recibe ordenación/paginación local; un modal sin navegación no requiere URL. La semántica de búsqueda remota sigue perteneciendo al proveedor, fuera de esta entrega.

5. Contratos transversales definitivos

La fuente normativa es el patrón de listados, en especial «Incorporar o revisar un consumidor». Define tres bandas, responsabilidades, URL/preferencias/History, búsqueda/filtros, estados y excepciones. No hay que reinterpretar cada informe histórico para incorporar un listado.

EntityTable representa colecciones completas. El módulo aporta campos, datos, acciones y filtros; rdx-ui no conoce DTO, rutas de API ni persistencia. Query posee los datos; la URL posee criterios compartibles; localStorage conserva preferencias compatibles; History conserva lectura y retorno por entrada/propietario; el borrador del picker es local. Las ausencias en celdas son —, conservando cero y estados de negocio.

6. Excepciones justificadas

  • Historiales: identidad de evento/revisión y orden cronológico, sin orden alfabético obligatorio.
  • Resúmenes y previews: estructura proporcional a su finalidad, sin añadir todas las herramientas de EntityTable.
  • Dashboard remoto: página de diez registros con total real, o actividad cronológica. No ordenar/filtrar localmente esa página como colección completa.
  • Publicaciones y directorio: cursores opacos del proveedor, sin total inventado; vigentes e históricos independientes.
  • Pickers: borrador provisional, foco inicial en búsqueda, confirmar/cancelar; no persistencia de URL o del borrador por uniformidad.

Usuarios sin permiso, Infraestructura sin regresión específica y aplicaciones globales concurrentes no se justifican como excepciones: conservan pendientes de cobertura.

7. Hallazgos V01–V12

ID Evidencia y estado histórico Contraste L04.4 y conclusión acotada
V01 V01.1–V01.4, once tamaños y presupuestos por contenedor. Matriz actual en siete tamaños, más navegación móvil. Sin overflow global en la muestra; no significa buena densidad en todos los móviles.
V02 Cerrado en inventario claro; oscuro no acreditado. Reproducido en oscuro: mínimo 2,87:1. Corregido en Activos/Recursos; mínimo actual 7,80:1 claro y 14,51:1 oscuro en enlaces/acciones/textos medidos. Otros pares y superficies pendientes.
V03 Tres pasos de activos/recursos estables en los tamaños del sprint. Regresión de geometría de ambos asistentes; no extrapolar a todos los pasos de puesto/perfil.
V04 Ayuda/progreso fija consume cuerpo móvil. Sigue pendiente. El picker útil no prueba la densidad de todos los asistentes.
V05 Cierre por escenarios L03.1 y adopciones L04.1–3. URL, Atrás/Volver, scroll/foco y contexto independiente en la muestra; restantes consumidores se distinguen en matriz. No cierre universal.
V06 Disparadores del inventario y alternativa de foco verificados. Regresión de Escape/Cancelar y selectores anidados; no certificación de todos los modales.
V07 Comparación local L03.2 resuelta por escenarios. Personas Unicode/ñ y pickers con borrador; helper compartido sin cambiar campos. Proveedores remotos no acreditados por esa prueba.
V08 Columnas L02.2: búsqueda, grupos, identidad y preferencias. Recarga/preferencias, teclado/es-en y catálogos con parámetros inválidos. No prueba de cada columna dinámica posible.
V09 Seis cabeceras Revisión/Review breves. Regresión actual de las seis cabeceras. No cambiar causas de revisión ni estados de negocio.
V10 Jerarquía de ficha, secciones vacías. No resuelto globalmente. Abrir fichas/relaciones no prueba una reducción transversal de vacíos.
V11 Representación de ausencias en tablas de ficha. Contrato normativo —, cabeceras del dashboard y datos sintéticos revisados. Extensión completa de todos los renderizadores pendiente; no confundir con mensajes de estado o DL fuera de una tabla.
V12 Cierre inicial/refetch por escenarios L02.3 y L04. Regresión de diez estados; se descubre y corrige el detalle del dashboard. Otras variantes sin ensayo quedan en matriz, sin convertir la prueba común en certificación.

Se conservan las capturas, fechas y resultados de auditoría original y L01; esta tabla añade contraste actual, sin reescribirlos.

8. Hallazgos L01-01–L01-04

ID Contraste y estado
L01-01 Capacidad de pickers comprobada; densidad general móvil pendiente. A 320×640 el primer cuerpo de Activos comienza en y=527 y cabe una fila completa; Recursos y=594, ninguna completa; Correo y=487, una completa. Puede haber contenido parcial y scroll: no significa pérdida de datos.
L01-02 Identidad protegida y selección provisional verificadas en pickers/columnas elegidos. No se permite ocultar toda identidad; otros consumidores se clasifican individualmente.
L01-03 Sedes: archivadas + búsqueda + limpiar restablece criterios y página conservando preferencias/orden. Regresión específica actual y teclado/es-en.
L01-04 Microcopy visible/accesible contrastado en selectores reales y revisión de cabeceras. La ausencia de un auditor especializado de microcopy no se presenta como una ejecución. Persisten otros textos no revisados.

9. Resultados funcionales

Se comprueban consultas normalizadas sin perder el texto visible, filtros/limpieza, orden y página, preferencias/columnas, recarga/URL directa/parámetros inválidos, listado → ficha → Atrás/Volver, edición/cancelación, aislamiento de compañías y sublistados, y selección provisional entre páginas y búsquedas.

Catálogos: ámbito global/local, pestañas, vigencia/retirada, identidad y acciones según restricción existente. Configuraciones: siete familias, ámbito y referencias, estados, modales de edición/historial, cancelación sin desmontar tabla. Relaciones: cursores, publicador elegible, respuestas obsoletas, error/reintento, históricos y retorno. No se guardan formularios de negocio para probar el cierre.

10. Resultados visuales

Resolución Activos, Recursos, Correo Selector SMB Otros recorridos
1920×1080 Claro y oscuro; geometría y foco Flujo/capacidad en claro Contraste seleccionado en ambos temas
1440×900 Claro y oscuro; capturas Claro y oscuro Configuraciones, catálogos, columnas y retorno
1366×768 Claro y oscuro; geometría Flujo/capacidad en claro Contexto y asistentes
1024×768 Claro y oscuro; geometría Flujo/capacidad en claro Contexto y asistentes
768×1024 Claro y oscuro; geometría Flujo/capacidad en claro Contexto y asistentes
390×844 Claro y oscuro; capturas Claro y oscuro Estados y variantes del dashboard, relaciones
320×640 Claro y oscuro; capturas Claro y oscuro Paneles/modales, cursor y retorno

Las mediciones incluyen viewport, contenedor, ancho de tabla, overflow global/interno, altura anterior a los datos, filas completas visibles, cabeceras y rectángulo del foco. No aparece overflow horizontal global en estas mediciones. El horizontal interno de tablas con columnas técnicas es deliberado; se conserva su posición donde el recorrido lo prueba. El tema se aplica mediante .dark y emulateMedia; no se prueba una preferencia de tema persistida. No se mide CLS ni rendimiento de render. Tampoco se atribuye al tema completo el contraste medido en dos filas seleccionadas.

11. Accesibilidad

Se ejecutan Tab/Shift+Tab, Enter, Space, Escape y flechas en los controles pertinentes, con búsqueda inicial de pickers, selección/radios/checkboxes, confirmación/cancelación, retorno al disparador y alternativa contextual cuando desaparece el origen. Se revisan nombres accesibles, cabeceras/scope, aria-sort, selección, mensajes de error y foco visible. Las capturas y snapshots son evidencia de esos recorridos, no una prueba con lector real.

No se ejecutan lector de pantalla real, auditor especializado ni zoom nativo del navegador. La prueba heredada de escalado efectivo de texto al 200 % sigue etiquetada como tal. No se afirma cumplimiento WCAG completo. Los ratios de contraste se calculan sobre los colores compuestos realmente renderizados mediante canvas, en el estado seleccionado.

12. Estados de consulta

Estado Evidencia actual
Inicial pendiente / correcta States 01; estructura reservada y llegada de filas. Closure 95/98 para dashboard.
Inicial fallida States 04 y configuraciones 74; error diferenciado de vacío.
Refetch pendiente States 03 y relaciones 90; filas/criterios anteriores conservados.
Refetch fallido con datos States 03 y Closure 95: aviso de datos anteriores, sin desmontar tabla.
Reintento Recuperación con HTTP esperado, foco en destino persistente y mismos criterios.
Vacío real States 04 y configuraciones 74; no inventar resultados.
Sin coincidencias Búsquedas/filtros/columnas y compañías del dashboard 98; limpieza accesible.
No autorizado 403 interceptado: States 04, relaciones 90 y dashboard 95; cero filas previas visibles.
Catálogo pendiente States 02; no normalizar página/plantilla contra dependencias provisionales.

Los 403/503, compuertas y cambios de respuesta son interceptaciones sintéticas explícitas, no incidentes espontáneos del servidor. La autenticación sí es real: usuario ordinario, formulario real y sesión privada del preparador. Una simulación de permiso del listado no certifica la seguridad del backend ni la política del nuevo proveedor global.

13. Navegación, retorno e integridad arquitectónica

useListLocation conserva criterios compartibles; useEntryState valida estado de lectura por scope/clave. useListReturn separa inventario y ficha, identifica tabla/origen y espera la composición antes de aplicar scroll/foco. Los datos remotos siguen en Query. Se prueban independencia de tablas y cursores, retorno por identidad, X/Y y origen desaparecido. Un refetch no se utiliza para volver a aplicar foco inicial.

La búsqueda estática localiza una normalización de avatar y una comparación de duplicados en alta de acceso: tienen otra finalidad y no constituyen búsquedas de listados divergentes. No se localizan dependencias de dominio/API en la implementación productiva de rdx-ui. Los únicos accesos directos a History de esta muestra están centralizados en Core. Las preferencias conservan las claves existentes y los borradores no se serializan. Esta revisión no es una demostración formal de ausencia de cualquier duplicación del repositorio.

El riesgo real encontrado fue el estado ignorado por BlockState en el detalle del dashboard. Infraestructura conserva el contrato anterior loading/unavailable y requiere ensayo compuesto; no se afirma que sus errores estén probados por usar las mismas consultas. La nueva selección de aplicaciones globales cambió de componente y propósito durante la auditoría: no se valida por analogía con el picker de publicaciones ni se modifica su proveedor.

14. Pruebas automatizadas

47 métodos MCP distintos, todos con resultado final correcto: 42 regresiones y 5 nuevos. Se realizaron 56 intentos de método: 49 correctos, dos aserciones fallidas que reprodujeron defectos reales, cuatro errores de instrumentación y uno interrumpido. Los 55 completados incluyen repeticiones: no son 55 casos distintos. Se seleccionaron 42 de los 126 métodos históricos; 84 no seleccionados, sin presentarlos como SkipTest ni como comprobados actualmente. El ledger identifica cada lote y sus repeticiones.

Lote Métodos distintos con resultado final correcto Evidencia
L02.1 selectores 4 regression-pickers.log
L02.2 columnas 2 regression-columns.log
L02.3 estados 4 regression-states.log
L03.1 contexto 3 regression-context.log
L03.2 búsqueda 2 regression-search.log
L03.3 filtros 2 regression-filters.log
Visual V01/sprint 5 regression-responsive.log
L04.1 3 Primeros siete resultados de adoption-regression.log
L04.2 9 Cuatro en lote inicial y cinco en adoption-regression-tail.log
L04.3 8 adoption-regression-tail.log
Nuevos L04.4 5 94 geometría 42 combinaciones; 95 estados/altura/403; 96 picker en dos temas; 97 contraste de dos inventarios; 98 otras variantes del dashboard

El lote inicial de adopción pasa siete métodos, falla en 71 por el nuevo propósito de resolución y se interrumpe durante 73 para sustituir la fixture. Los trece métodos restantes se ejecutan de nuevo y pasan. La instalación visual no se recrea para esos reintentos. La suite nueva inicial se inició antes de corregir el dashboard, pero ejecutó 95 después: no se presenta como una línea base congelada. Se conservan su ejecución y las repeticiones dirigidas de 95/97/98 con el código y la instrumentación finales.

Comando / alcance Resultado real
pnpm --filter @metis/core --filter @metis/assets --filter @metis/resources --filter @metis/companies --filter @repo/rdx-ui typecheck Cinco paquetes correctos; repetido después de la receta de contraste. Companies se repite después del último cambio de altura.
pnpm typecheck Falla en calendar.tsx:165 TS2375 de vendor; baseline y repetición global.
pnpm exec biome check <10 fuentes propias> / pnpm exec eslint <10 fuentes propias> Correctos, sin diagnósticos; comprobación adicional del último cambio de diálogo correcta.
pnpm lint --max-diagnostics=1000 Falla globalmente: 15 errores, 1 warning y 5 infos en la última ejecución. Firmas archivo/regla comparadas con baseline; cero en código propio.
pnpm check --max-diagnostics=1000 Falla globalmente: 168 errores, 1 warning y 5 infos. No se reformatea código ajeno.
node --import tsx --test .../company-list-query-state.test.ts Fichero dirigido correcto. La ejecución global identifica los siete casos del fichero, incluidos cuatro nuevos de API/estado del dashboard, correctos. Se registra el primer import erróneo corregido.
pnpm test --continue=always Dos ejecuciones con MariaDB de integración desechable separada. La final pasa 8/10 tareas; mantiene dos expectativas SSR y una HTTP. Core 14/14, rdx-ui 79/79, Assets 147/147, Resources 102/102, Companies 252/254; servidor HTTP 8/8 e integración 18/19.
pnpm build Correcto; repetido después de contraste y del último ajuste de altura.
python3 -m py_compile scripts/list-closure-ui.test.py / node --check scripts/software-reference-read.fixture.js Correctos.
Enlaces/diff/CSV Rutas de las 101 filas existentes; enlaces introducidos válidos; delta propio contra copia inicial y revisión de 19 archivos.

No se declara pnpm test global ni el monorepo completamente verde. El test global final se ejecutó después de la corrección de estados del dashboard y antes de terminar el ajuste contextual de estilo/altura; estos últimos se verifican con MCP, tipos, Biome/ESLint y build posteriores. No se repite innecesariamente la integración de servidor por un cambio de clases.

Los lotes, repeticiones y fallos intermedios se conservan. No hubo una sola ejecución monolítica. No se suman repeticiones como métodos nuevos. Las pruebas omitidas de las suites históricas permanecen fuera de cobertura actual, aunque existan logs antiguos.

15. Evidencias Playwright

Raíz: .artifacts/playwright/l04-4/. Índice: indice-evidencias.json. Incluye inventario JSON/CSV, mediciones, foco/scroll/URLs, capturas y árboles accesibles, validaciones de schemas/cardinalidades, logs de lotes y comandos, comparación con baseline, proveniencia de fallos y delta propio. El índice indica qué capturas se abrieron realmente. La captura de contraste oscuro anterior se conserva separada de la final. La captura inicial del dashboard fue reemplazada al repetir su nombre: su antes se acredita mediante dashboard-before.log y measurements-1117914.json (cero tablas), no mediante una captura final presentada como anterior.

El archivo compartible evidencias-l04-4.zip contiene únicamente evidencia seleccionada, no la copia de fuentes, sesiones, cookies ni credenciales. Los artefactos locales ignorados no sustituyen la matriz y conclusiones versionadas. Para repetir: preparar visual-audit.py, ampliar con visual-audit-volume.py y ejecutar los métodos identificados usando METIS_PLAYWRIGHT_STORAGE_STATE del preparador nuevo; no copiar rutas de sesión antiguas. Las suites se ejecutan con el servidor MCP documentado, no con un Chromium instalado en WSL.

16. Fallos globales y deuda técnica

Fallo Clasificación y prueba de origen Impacto y siguiente actuación
Calendar vendor TS2375, locale opcional Preexistente acreditado: mismo SHA-256 de calendar.tsx en el commit c2f753e (L03.1, anterior a L04), baseline y fuente actual. Bloquea typecheck global. Resolver aparte con una decisión explícita sobre vendor; no tocarlo en L04.4.
Companies SSR :180, Personas (1) Preexistente acreditado: test, CompanySectionNavigation y CountBadge idénticos a c2f753e. El contador es un componente separado, no el literal esperado. Expectativa SSR desalineada con composición previa a L04; revisar semánticamente en su tarea. No se altera para forzar verde.
Companies SSR :210, texto de acceso Preexistente acreditado: test, PersonForm y EntityHelp idénticos a c2f753e; el literal ya no forma parte de ese formulario. Revisar contrato/copy de personas en tarea propia. No se cambia la expectativa aquí.
Identity HTTP :82, 401 frente a 404 Preexistente acreditado: test, createApp y dashboard.routes idénticos a c2f753e. El router monta authenticate antes de resolver /api/dashboard/work, inexistente. El diff de identity-runtime concurrente no cambia ese montaje. Resolver expectativa/diseño de ruta retirada en tarea de seguridad/pruebas. No cambiar autenticación o la aserción HTTP en L04.4.
Dos assertions R2.4 de recursos, primera ejecución Pendiente de determinar en esa ejecución; código concurrente fuera de L02–L04. Se conservan archivo/líneas y log inicial. La segunda ejecución ya no reproduce los fallos (102/102). No atribuirlos automáticamente a deuda anterior ni a esta entrega. No se modifica ese código.
Lint/check global Mezcla de baseline y cambios concurrentes; clasificación por archivo/regla en el comparador. No toda advertencia se declara preexistente. Sin diagnósticos en el código propio verificado de L04.4; deuda global fuera de alcance.

failure-provenance.json contiene hashes y comparaciones con c2f753e y HEAD, no solamente referencias a L04.3. La antigüedad de una expectativa no acredita por sí sola toda la suite: la clasificación anterior se apoya también en el código responsable sin cambios y la causa concreta. Los cuatro fallos de instrumentación y una interrupción del navegador se distinguen de estos fallos globales y de los dos defectos reales corregidos.

17. Correcciones realizadas en L04.4

L044-D01 — tabla del detalle del dashboard, gravedad media. Antes: abrir «Activos registrados» con GET retenido mostraba cero tablas; BlockState sustituía herramientas y filas también al fallar un refetch y no ofrecía recuperación local. Después: estados compuestos existentes, tabla/cabeceras/skeleton persistentes, filas anteriores identificadas, reintento y aviso de antigüedad, paginación conservada y deshabilitada cuando procede. El modal usa layout estable y su rectángulo inicial coincide con el de llegada de datos en la prueba dirigida. Un 401/403 se propaga con su semántica al estado del cliente y oculta caché; no se cambia ningún contrato HTTP, permiso, autenticación ni proveedor. Se extrae DashboardRecordsTable por responsabilidad real, sin un nuevo motor de tablas. Unidad de estado/API y MCP 95/98.

L044-D02 — contraste de selección oscura, gravedad alta para lectura. Antes: texto y enlaces blancos sobre accent rosa, 2,87–2,95:1. Después: receta contextual compartida entitySelectionRowClass para Activos y Recursos; fondo muted en selección oscura, primario/texto/foco contextual y fondo coherente de acciones fijadas. Claro conserva su combinación existente. Mínimos medidos 7,80:1 y 14,51:1. MCP 97 acredita ambas entidades/temas, no botones deshabilitados o todos los tokens de la aplicación.

Instrumentación. La fixture POST de referencias admite los dos propósitos instalados, software-installation y application-configuration, con respuestas sintéticas separadas. No amplía permisos ni prueba el proveedor. Se corrige una ruta de import de la prueba unitaria; se espera la respuesta real del reintento; se usa el texto de traducción instalado; el contraste se mide a 1920 para disponer de panel inline, no del modal que hace inerte la tabla subyacente a 1440. Los fallos intermedios permanecen registrados.

18. Riesgos residuales

  • Densidad móvil L01-01/V04: corregir capacidad del picker no evita cero filas completas de Recursos al inicio en 320×640.
  • Variantes y consumidores pendientes: Usuarios requiere permiso aislado; Infraestructura requiere regresión propia; resúmenes de dashboard no quedan certificados por el detalle corregido.
  • R2.4 concurrente: catálogo global, coincidencias y selector por propósito necesitan su propia matriz funcional del proveedor y permisos; el hash señala la versión observada.
  • V10/V11 y otras fichas/asistentes: no cerrar por extrapolación desde listados.
  • Lector real, zoom nativo, contraste global y rendimiento con volúmenes mayores: no ejecutados.
  • El workspace contiene cambios ajenos; la validación no certifica una futura combinación de esos cambios sin nueva regresión.

19. Recomendaciones posteriores

Priorizar una tarea acotada de densidad a 320×640 con presupuesto anterior a datos y filas útiles medido; una regresión de Infraestructura/Usuarios con permisos sintéticos; y el cierre propio de R2.4 tras estabilizar contratos. Tratar calendario, SSR y expectativa HTTP en sus ámbitos responsables. No iniciar aquí otra ola de adopción, virtualización o arquitectura.

20. Dictamen y condiciones de cierre

B — cierre condicionado. Se acredita el patrón y su muestra principal, con dos defectos reproducidos y corregidos y sin defecto crítico propio conocido pendiente. No corresponde un cierre limpio universal: quedan límites relevantes de cobertura y densidad documentados.

Para acreditar cierre pleno: completar las capacidades P de consumidores pendientes de la matriz, verificar permisos de Usuarios en instalación aislada, ensayar las fuentes compuestas de Infraestructura y estabilizar/comprobar los consumidores R2.4 por sus propios contratos. Resolver o aceptar explícitamente la deuda de densidad, V10/V11 y accesibilidad ampliada según el alcance que se pretenda certificar. Los tres tests históricos y typecheck vendor pueden mantenerse como deuda acreditada, sin ocultar que el monorepo global no está verde.

Se ha retirado la única instalación visual propia: sesión privada eliminada, puerto del frontend cerrado, preparador detenido y contenedor metis-visual-db-5be184c6c85a eliminado. Ambas bases temporales de integración se retiraron automáticamente. cleanup.json acredita las comprobaciones; no se detienen ni limpian servicios ajenos al trabajo.

Apéndice — índice de consumidores

ID Módulo · componente · ámbito Superficie Estado
L044-001 assets · AssetList · inventario listado Verificado
L044-002 assets · BrandCatalogPage · global listado Pendiente
L044-003 assets · AssetCatalogPage · global / campos listado Verificado parcialmente
L044-004 assets · AssetCatalogPage · global / plantillas listado Verificado parcialmente
L044-005 assets · AssetCatalogPage · global / relaciones listado Verificado parcialmente
L044-006 assets · AssetCatalogPage · compañía / campos listado Verificado parcialmente
L044-007 assets · AssetCatalogPage · compañía / plantillas listado Verificado parcialmente
L044-008 assets · AssetCatalogPage · compañía / relaciones listado Verificado parcialmente
L044-009 assets · CatalogFieldPickerList · compañía selector Verificado parcialmente
L044-010 assets · InfrastructurePage · compañía listado Pendiente
L044-011 assets · PublicationPicker · compañía selector remoto Verificado parcialmente
L044-012 assets · WorkstationsPage · compañía listado Verificado parcialmente
L044-013 companies · AccessWorkspacePage · global / sistemas listado Verificado parcialmente
L044-014 companies · AccessWorkspacePage · global / cuentas listado Verificado parcialmente
L044-015 companies · AccessWorkspacePage · global / permisos listado Verificado parcialmente
L044-016 companies · AccessWorkspacePage · compañía / sistemas listado Verificado parcialmente
L044-017 companies · AccessWorkspacePage · compañía / cuentas listado Verificado parcialmente
L044-018 companies · AccessWorkspacePage · compañía / permisos listado Verificado parcialmente
L044-019 companies · ApplicationConfigurationsPage · compañía listado Verificado parcialmente
L044-020 companies · AssetRelatedInformation · perfiles del activo sublistado Verificado parcialmente
L044-021 companies · CertificateConfigurationsPage · compañía listado Verificado parcialmente
L044-022 companies · CompaniesPage · global listado Verificado parcialmente
L044-023 companies · DashboardDetailsDialog · compañías listado Verificado parcialmente
L044-024 companies · DashboardDetailsDialog · registros remotos pagina remota Verificado parcialmente
L044-025 companies · DashboardDetailsDialog · actividad historial Excepción justificada
L044-026 companies · DashboardCompaniesPanel · compañía listado Pendiente
L044-027 companies · DepartmentSection · compañía listado Pendiente
L044-028 companies · FolderMappingsPage · compañía listado Verificado parcialmente
L044-029 companies · MailConfigurationsPage · compañía listado Verificado parcialmente
L044-030 companies · PersonDetails · asignaciones de la persona sublistado Pendiente
L044-031 companies · PeopleSection · compañía listado Verificado parcialmente
L044-032 companies · PrinterConfigurationsPage · compañía listado Verificado parcialmente
L044-033 companies · ProcessTemplatesPage · compañía listado Verificado parcialmente
L044-034 companies · ProcessesPage · compañía listado Verificado parcialmente
L044-035 companies · RemoteConnectionsPage · compañía listado Verificado parcialmente
L044-036 companies · SiteSection · compañía listado Verificado parcialmente
L044-037 companies · SoftwareInstallationsPanel · ficha de activo listado Verificado parcialmente
L044-038 companies · SoftwareInstallationsPanel · modal de puesto listado Verificado parcialmente
L044-039 companies · TeleworkAuthorizationsPage · compañía listado Verificado parcialmente
L044-040 companies · WorkProfilesPage · compañía listado Verificado parcialmente
L044-041 companies · WorkstationProfiles · compañía vista compacta Verificado parcialmente
L044-042 identity · UserManagement · administración interna listado Pendiente
L044-043 resources · ResourceApplicationPicker · compañía selector remoto Pendiente
L044-044 resources · ResourceCatalogPage · global / campos listado Verificado parcialmente
L044-045 resources · ResourceCatalogPage · global / plantillas listado Verificado parcialmente
L044-046 resources · ResourceCatalogPage · compañía / campos listado Verificado parcialmente
L044-047 resources · ResourceCatalogPage · compañía / plantillas listado Verificado parcialmente
L044-048 resources · CatalogFieldPickerList · compañía selector Verificado parcialmente
L044-049 resources · GlobalApplicationsList · global cursor Pendiente
L044-050 resources · ResourcesPage · compañía listado Verificado
L044-051 assets · PublicationList · activo / vigente relacion remota Verificado parcialmente
L044-052 assets · PublicationList · activo / historial relacion remota Verificado parcialmente
L044-053 assets · PublicationList · recurso / vigente relacion remota Pendiente
L044-054 assets · PublicationList · recurso / historial relacion remota Pendiente
L044-055 assets · DirectoryRelationshipTable · activo / vigente relacion remota Verificado parcialmente
L044-056 assets · DirectoryRelationshipTable · activo / historial relacion remota Pendiente
L044-057 assets · DirectoryRelationshipTable · recurso / vigente relacion remota Verificado parcialmente
L044-058 assets · DirectoryRelationshipTable · recurso / historial relacion remota Pendiente
L044-059 assets · AssetRelationships · relaciones vigentes/finalizadas vista compacta Pendiente
L044-060 assets · AssetInfrastructurePanel · interfaces y direcciones resumen Excepción justificada
L044-061 assets · AssetSupport · conexiones de soporte vista compacta Pendiente
L044-062 assets · AssetSupportOverview · resumen de soporte resumen Excepción justificada
L044-063 assets · SupportConnectionOverview · ficha de conexión resumen Excepción justificada
L044-064 companies · AssetPrinterUsage · uso de impresora vigente/histórico vista compacta Verificado parcialmente
L044-065 companies · AssetLocalIdentities · identidades locales vista compacta Pendiente
L044-066 companies · MailboxRelations · usos y configuraciones del buzón vista compacta Pendiente
L044-067 companies · CurrentWorkstations · puestos responsables vista compacta Pendiente
L044-068 companies · WorkstationAssets · activos exclusivos/compartidos vista compacta Verificado parcialmente
L044-069 companies · WorkstationSoftware · software del puesto vista compacta Verificado parcialmente
L044-070 companies · WorkstationConfigurationFamily · familias de configuraciones vista compacta Pendiente
L044-071 companies · EnvironmentSection · relaciones del perfil por familia vista compacta Pendiente
L044-072 companies · DashboardActivityPanel · actividad cronológica resumen Excepción justificada
L044-073 companies · DashboardAttentionPanel · incidencias agregadas resumen Excepción justificada
L044-074 companies · ProcessDetail · tareas del proceso editor ordenado Excepción justificada
L044-075 resources · GlobalApplicationCoincidences · coincidencias global/local resumen Excepción justificada
L044-076 assets · WorkstationAssetFields · borrador de activos elegidos selector Pendiente
L044-077 assets · WorkstationSummary · revisión del asistente resumen Excepción justificada
L044-078 companies · WorkProfileSummary · revisión del perfil resumen Excepción justificada
L044-079 assets · DirectoryDomainPicker · dominios elegibles selector remoto Verificado parcialmente
L044-080 assets · AssetPickerDialog · selección simple/múltiple por uso selector Verificado parcialmente
L044-081 companies · WorkProfileSelectionField · puesto / persona / cuenta selector Verificado parcialmente
L044-082 companies · RemoteEndpointFields · endpoint activo / sede selector Pendiente
L044-083 companies · RemoteTargetField · destino activo / recurso selector Pendiente
L044-084 assets · BrandSelect · global selector compacto Pendiente
L044-085 companies · CompanySelect · compañía selector compacto No aplicable
L044-086 assets · AssetHistory · cronología de entidad historial Excepción justificada
L044-087 assets · SupportHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-088 assets · WorkstationHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-089 assets · WorkstationHistory · cronología de entidad historial No aplicable
L044-090 companies · AccessHistory · cronología de entidad historial Excepción justificada
L044-091 companies · ApplicationHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-092 companies · AssignmentHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-093 companies · CertificateHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-094 companies · FolderMappingHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-095 companies · MailConfigurationHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-096 companies · PrinterHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-097 companies · RemoteConnectionHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-098 companies · SoftwareHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-099 companies · TeleworkAuthorizationHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-100 companies · WorkProfileHistoryDialog · cronología de entidad historial modal Excepción justificada
L044-101 resources · GlobalApplicationHistory · cronología de entidad historial Excepción justificada