47 KiB
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 |