337 lines
26 KiB
Markdown
337 lines
26 KiB
Markdown
# L03.3 — Coherencia, visibilidad y limpieza de filtros
|
||
|
||
Fecha: 24 de octubre de 2026. Referencias: [L01](auditoria-listados-l01.md),
|
||
[L03.1](contexto-listados-l03-1.md), [L03.2](normalizacion-busquedas-l03-2.md),
|
||
[L02.2](configuracion-columnas-l02-2.md), [L02.3](estados-listados-l02-3.md),
|
||
[patrón de listados](patron-de-listados-de-entidades.md) y [Playwright MCP](playwright-mcp.md).
|
||
|
||
## 1. Resumen ejecutivo
|
||
|
||
Se integra el filtro de archivadas de Sedes en el contrato existente de EntityTable;
|
||
se preserva el ámbito de compañía al limpiar el directorio de Compañías y se conecta
|
||
el cambio de cerradas de instalaciones de software al reinicio de página. La tabla
|
||
compartida diferencia búsqueda efectiva vacía de texto visible formado por espacios y
|
||
devuelve el foco al buscador después de limpiar, sin desplazarlo programáticamente.
|
||
|
||
No se introducen filtros, componentes, props, dependencias, estilos ni otro motor de
|
||
consulta. No cambia la comparación L03.2, el proveedor remoto ni la arquitectura de
|
||
History. Los cambios previos y simultáneos del workspace se conservan.
|
||
|
||
## 2. Inventario dirigido y estado por consumidor
|
||
|
||
Inventario basado en las APIs y controladores instalados. «Correcto» significa que el
|
||
contrato de código ya encajaba; la cobertura de navegador se detalla aparte. En todos
|
||
los casos la búsqueda por defecto es `""`; no se amplían los campos buscables.
|
||
|
||
| Consumidor / responsable | Criterios y defaults; dónde viven | Activación, dependencia y visibilidad | Limpieza / página | Resultado de L03.3 |
|
||
| --- | --- | --- | --- | --- |
|
||
| Sedes · SiteSection / useSiteSectionController | Búsqueda local EntityTable; showArchived=false local | Checkbox marcado incluye las archivadas además de activas; listado de la compañía recibida | q vacía y false; filterKey reinicia página, conserva sort/tamaño/columnas | Corregido: faltaban las tres conexiones de filtro |
|
||
| Personas · PeopleSection | q y contactsOnly=false en URL | Checkbox «Solo contactos», búsqueda visible; ambos se combinan dentro de compañía | Borra q y contactsOnly, página 1 por mecanismo L03.1 | Ya correcto |
|
||
| Perfiles · WorkProfilesPage / controlador | q y archived=false en URL | Checkbox archivados y texto; inicialización/configuración de perfil es navegación independiente | Borra q y archived; conserva selección/configuración y compañía; página 1 | Ya correcto |
|
||
| Activos · AssetInventoryPage / AssetList | q y template=null en URL; picker usa estado propio | Pestaña Todo/plantilla y texto; estado/sede son columnas y campos buscables actuales, no filtros nuevos | Borra q/plantilla, página 1; conserva selección, orden y preferencias | Ya correcto |
|
||
| Recursos · ResourcesPage / controlador | q y template=null en URL | Pestaña y texto; recurso seleccionado en ruta tiene contrato independiente | Borra q/plantilla y página, conserva ruta de selección | Ya correcto |
|
||
| Compañías · CompaniesPage / controlador | q y activeOnly=false en URL; initialActiveOnly procede de navegación | Checkbox «Solo activas»; companyId/initialCompanyId se muestra como ámbito, no selector borrable | Borra q/activeOnly; conserva companyId; filterKey reajusta página | Corregido: se borraba companyId y faltaba filterKey. Vacío del ámbito usa noResults existente |
|
||
| Puestos · WorkstationsPage / controlador de Assets | Búsqueda local | No hay filtro adicional de sede, responsable o archivadas | Limpia solo búsqueda; página local al inicio | Ya correcto; no se migra a URL |
|
||
| Procesos · ProcessesPage / controlador | q y closed=false en URL | Checkbox incluye cerrados; compañía sigue siendo ámbito | q/closed a defaults; filterKey y setter ajustan página | Ya correcto |
|
||
| Accesos remotos · RemoteConnectionsPage / controlador | q y closed=false locales | Checkbox incluye removed/never_configured; initialPersonId limita ámbito | Limpia q/closed; conserva persona; filterKey reajusta página | Ya correcto en código |
|
||
| Software del ordenador · SoftwareInstallationsPanel | q y closed=false locales | Checkbox incluye instalaciones cerradas; assetId fija ordenador | Limpia q/closed; conserva activo; ahora filterKey reajusta página al cambiar closed | Corregido: página podía permanecer en 3 al cambiar conjunto |
|
||
| Carpetas, correo, certificados, aplicaciones e impresoras de perfil · controladores de configuraciones | q en URL; sin otro filtro de cerradas | initialProfileId es ámbito recibido, no un filtro borrable; recursos/perfiles relacionados se consultan antes de presentar | Limpia q, conserva perfil; página local se reinicia | Ya correcto en código |
|
||
| Teletrabajo · TeleworkAuthorizationsPage / controlador | q en URL | initialPersonId fija persona de origen; sin filtro adicional de cerradas | Limpia q, conserva persona | Ya correcto en código |
|
||
| Cuentas y accesos · AccessWorkspacePage / controlador | q en URL; kind/env/resource contextuales | Tabs de categoría; environmentId y resourceId tienen indicadores y acciones explícitas de quitar ámbito | Limpiar borra solo q; las acciones específicas quitan cada ámbito; filterKey compuesto reajusta página | Contrato específico preservado |
|
||
| Catálogos activos/recursos · CatalogPage / controladores | q y tab en URL, tab validada con fallback | tab identifica colección de plantillas/campos/relaciones, no un filtro de la misma colección | Limpia q; conserva tipo y alcance global/compañía | Ya correcto en código |
|
||
| Marcas · BrandsPage / controlador | q genérica y status="" local | Selector de estado visible; vacío equivale a todos | q/status a defaults; filterKey existente | Ya correcto en código |
|
||
| Infraestructura · InfrastructurePage | q genérica y role="" local | Selector de rol, sin implicar topología detallada | q/rol a defaults; conexiones de filtro existentes | Ya correcto en código |
|
||
| Otros EntityTable sin filtro propio | Búsqueda genérica local | Texto visible | Solo búsqueda | Reciben corrección compartida de vacío/foco |
|
||
| PickerList / RemoteOptionPicker | Estado local provisional / consulta delegada por cursor | Selección y criterios del selector; no equivalen al listado padre | No se alteran selección, cursor ni contratos del proveedor | Sin cambios; regresiones específicas |
|
||
|
||
### Persistencia, vuelta y ausencia de coincidencias
|
||
|
||
Los criterios locales (Sedes, Puestos, accesos remotos, software, marcas y roles) se
|
||
conservan mientras su componente sigue montado, incluido abrir/cancelar su diálogo;
|
||
una recarga completa restablece los defaults. No se les promete restauración de ficha.
|
||
Los criterios URL sobreviven recarga/enlace compartido según su parser vigente.
|
||
`contactsOnly=invalid` se interpreta false; `archived=invalid` se rechaza en la frontera
|
||
de ruta estricta, antes de presentar tabla. No se unifican esas políticas existentes.
|
||
El retorno con scroll/foco de L03.1 se conserva en sus pilotos Activos/Recursos/Personas;
|
||
no se generaliza esa garantía a todos los consumidores.
|
||
|
||
En EntityTable sin coincidencias, q efectiva o `filtersApplied` seleccionan el mensaje
|
||
de criterios. Sin ellos se usa el vacío aportado por el consumidor. Un ámbito sin
|
||
compañía coincidente muestra el `noResults` existente, sin invitar a crear la primera
|
||
compañía ni ofrecer borrar el ámbito con Limpiar filtros. Los listados que esperan
|
||
referencias antes de montar la tabla conservan esa política de carga.
|
||
|
||
## 3. Clasificación de estado y casos ambiguos
|
||
|
||
- **Datos:** q, contactos, archivadas, cerradas, plantilla de inventario, estado y rol.
|
||
Incluye controles que amplían el conjunto respecto al default, como archivadas.
|
||
- **Presentación:** visibilidad de columnas y tamaño de página. El orden válido se
|
||
conserva también; la página se ajusta cuando cambia el conjunto. No existe una nueva
|
||
preferencia de densidad en esta entrega.
|
||
- **Contexto:** compañía, persona/perfil/activo de origen, tipo de catálogo,
|
||
categoría/entorno/recurso en accesos y selección contextual mediante ruta.
|
||
- **Temporal:** apertura de menú/diálogo, foco y selección provisional del picker.
|
||
|
||
`template` en inventarios sí es criterio limpiable; `tab` de catálogo identifica otra
|
||
colección. `companyId` del directorio viene de navegación y se muestra como ámbito.
|
||
Los botones para quitar entorno/recurso de accesos son acciones explícitas distintas
|
||
de limpiar la búsqueda. Esta clasificación no intenta borrar todos los parámetros URL.
|
||
|
||
## 4. Contrato común de limpieza
|
||
|
||
Se reutilizan **filtersApplied**, **filterKey** y **onClearFilters**. El consumidor
|
||
define los defaults y restablece exclusivamente sus criterios; EntityTable limpia
|
||
su búsqueda, reajusta página y enfoca el input con `preventScroll`. El componente
|
||
genérico no conoce DTOs, nombres de filtros, permisos ni endpoints.
|
||
|
||
`filtersApplied` representa desviaciones de los criterios propios respecto a defaults;
|
||
`filterKey` identifica cambios del conjunto relevantes para página local. Con navegación
|
||
controlada, los setters del consumidor mantienen el ajuste de página L03.1. No se
|
||
reemplaza ese mecanismo ni se copia el estado completo a localStorage.
|
||
|
||
## 5. Corrección de Sedes y reproducción de L01-03
|
||
|
||
Antes de editar producción se reprodujo con 50 sedes GET (40 activas, 10 archivadas):
|
||
activar archivadas, escribir `l03`, limpiar. El resultado fue búsqueda vacía,
|
||
checkbox marcado, 50 resultados, botón de limpieza ausente y foco en BODY. Las capturas
|
||
históricas de L01 permanecen; esta reproducción está en `before/` de L03.3.
|
||
|
||
SiteSection ahora aporta `filtersApplied={showArchived}`, `filterKey={String(showArchived)}`
|
||
y callback a false. El default false está declarado en su controlador; no se convierte
|
||
una preferencia persistente en filtro. Se conservan permisos, mutaciones y diálogos.
|
||
|
||
## 6. Consumidores equivalentes
|
||
|
||
Compañías integra exclusivamente activeOnly como criterio adicional, preserva companyId
|
||
y utiliza ambos en la clave de conjunto. Se retira el setter interno de companyId que
|
||
solo utilizaba la limpieza. SoftwareInstallationsPanel añade la clave de closed; sus
|
||
flags y limpieza ya estaban conectados. Personas, Perfiles, inventarios, Procesos y
|
||
accesos remotos ya usaban las conexiones correspondientes y no requieren duplicarlas.
|
||
|
||
## 7. Visibilidad
|
||
|
||
Se mantienen búsqueda, checkbox/selector/tab, contador y botón existentes. No se añade
|
||
una barra ni chips que resten filas en móvil. El checkbox activo por sí solo ya ofrece
|
||
Limpiar filtros en Sedes; tras limpiar desaparece porque no hay criterios que borrar.
|
||
Estado marcado, etiquetas y pestaña seleccionada no dependen solo del color.
|
||
|
||
## 8. Página, orden y preferencias
|
||
|
||
Cambiar archivadas, activas o cerradas reinicia página local mediante filterKey;
|
||
los filtros navegables siguen sus setters. Limpiar vuelve a página 1, mantiene sort
|
||
válido, tamaño y columnas. Se comprueba desde página 3 y con tamaño 25/columna oculta.
|
||
No se reinterpreta una respuesta provisional vacía como conjunto definitivo.
|
||
|
||
## 9. URL y History
|
||
|
||
Los setters existentes modifican sus parámetros con el mecanismo de History vigente;
|
||
los parámetros admitidos ajenos a la acción se conservan. La ruta rechaza claves
|
||
desconocidas; no se altera ese contrato para simular tolerancia. No se añaden rutas, claves de sesión ni push por
|
||
pulsación. L03.1 sigue definiendo los consumidores con restauración de contexto completa.
|
||
No es necesaria una modificación de [rutas del cliente](rutas-del-cliente.md).
|
||
|
||
## 10. Búsqueda normalizada
|
||
|
||
No cambia createTextMatcher ni los campos de cada consumidor. La tabla decide el
|
||
mensaje de vacío con `currentSearch.trim()`; una cadena de espacios puede permanecer
|
||
visible/en URL y disponer de acción para borrarla, pero no significa búsqueda efectiva
|
||
activa ni obliga a mostrar «sin coincidencias». Se conservan caja/tildes, Unicode,
|
||
ñ diferenciada, puntuación técnica y consulta original según L03.2.
|
||
|
||
## 11. Carga, error y vacío
|
||
|
||
No se modifica la máquina de estados de L02.3. La limpieza cambia criterios del usuario,
|
||
sin invalidar consultas ajenas ni borrar criterios ante errores. Las pruebas de carga
|
||
usan demoras GET liberadas por señal, sin esperas arbitrarias. Se distinguen carga
|
||
inicial, refetch con caché, vacío definitivo y cero coincidencias. Software/Sedes no
|
||
adquieren artificialmente la máquina de estados del inventario.
|
||
|
||
## 12. Accesibilidad y skills
|
||
|
||
La acción usa los botones y nombres es/en existentes. Se prueba activación por teclado,
|
||
checkbox, foco al buscador, cancelación y siete tamaños; no se añaden aria-live.
|
||
El contraste y foco de los componentes compartidos se contrastan en regresiones, sin
|
||
afirmar una auditoría WCAG completa.
|
||
|
||
Skill principal **ux-search**: criterio visible y recuperación sin perder ámbito.
|
||
Complementarias: **ux-tables** para página/orden; **ux-microcopy** y **ux-empty-states**
|
||
para distinguir vacíos; **ux-navigation** para contexto; **shadcn** para controles reales;
|
||
**vercel-composition-patterns** y **vercel-react-best-practices** para conservar
|
||
responsabilidades y evitar nuevo estado derivado. **rdx-solid** guía la corrección
|
||
mínima y las pruebas rojas/verdes. Se respetan DESIGN y los patrones frente a sugerencias
|
||
genéricas de autosuggest, chips o nuevas barras. Los auditores especializados citados
|
||
por skills no están instalados: no se instalan ni sustituyen pruebas realizadas.
|
||
|
||
## 13. Playwright: entorno y evidencias
|
||
|
||
Se reutiliza una sesión ordinaria válida de una instalación desechable ya activa,
|
||
mediante el MCP Docker fijado por el proyecto. No se inicia otra instalación visual
|
||
ni se retira el preparador de su propietario. `visual-audit-volume.py` prepara de
|
||
forma idempotente **15 compañías, 50 personas, 51 activos y 66 recursos** persistidos
|
||
en esa instalación `metis_desk_test`. Las pruebas de UI bloquean escrituras de negocio.
|
||
|
||
Las **50 sedes, 50 perfiles y 50 instalaciones** son interceptaciones GET controladas
|
||
con IDs, schemas y estados reales, no registros persistidos. Hay 40 activos/vigentes
|
||
y 10 archivados/cerrados en cada conjunto de prueba. Usan personas, ordenadores y
|
||
aplicaciones sintéticos existentes. No se acredita integración de escritura con ellas.
|
||
|
||
Procedimiento reproducible: mantener abierto el preparador documentado, ejecutar el
|
||
preparador de volumen y pasar su ruta privada mediante METIS_PLAYWRIGHT_STORAGE_STATE
|
||
a `python3 scripts/filter-ui.test.py`. No guardar sesiones en Git ni incluir su contenido
|
||
en logs. Para ejecutar únicamente L03.3 seleccionar los métodos test_21 a test_31;
|
||
sin selección incluye las regresiones de contexto heredadas. El script intercepta
|
||
únicamente el WebSocket del origen de desarrollo para evitar HMR durante un recorrido:
|
||
las recargas por cambios simultáneos del workspace interrumpieron intentos anteriores.
|
||
No se intercepta el inicio de sesión ni se sustituye la lógica de filtros.
|
||
|
||
El índice local de evidencias y los resultados por ejecución se encuentran en
|
||
`.artifacts/playwright/l03-3/`. Los resultados técnicos y la cobertura ejecutada figuran
|
||
en las secciones siguientes.
|
||
|
||
### Cobertura específica ejecutada
|
||
|
||
Los **once métodos específicos** pasan juntos en `browser-filters-stable.log` (263,935 s):
|
||
|
||
| Escenario | Verificado | Datos / evidencia representativa |
|
||
| --- | --- | --- |
|
||
| Sedes, ambos criterios | 50→40, búsqueda vacía, checkbox false y foco input | GET; before/sites-after-clear-1440.png frente a after/sites-after-clear-1440.png |
|
||
| Sedes, solo archivadas y ningún criterio | Checkbox y limpieza coherentes, 40 defaults, sin overflow global | GET; siete tamaños, after/sites-cleared-1920.png, -390.png y -320.png |
|
||
| Página 3 y preferencias | Cambio de criterio→1; limpiar conserva desc, tamaño 25 y Dirección oculta | GET; measurements sites-preferences |
|
||
| Cero resultados / diálogo / vacío real | Limpiar recupera 40; Escape mantiene criterios; espacios no anuncian cero coincidencias | GET vacío y poblado; after/sites-empty-spaces-390.png |
|
||
| Personas y Perfiles | q/flag desaparecen de URL; 50 y 40; foco vuelve a búsqueda | Personas persistidas / perfiles GET; capturas de ambos después de limpiar |
|
||
| Activos y Recursos | Plantilla+búsqueda sin coincidencias→51/66; selección de recurso en ruta y orden conservados | Persistidos; measurements assets/resources-empty-cleared y resources-selection-after-clear |
|
||
| Compañías | q/activas se borran; companyId y compañía resultante permanecen; sin falsa acción de borrar ámbito. Desde página 2, activas→1 y limpiar conserva desc | Persistidos; after/company-scope-cleared-1440.png |
|
||
| Software | Página 3→1 al incluir cerradas (50); limpiar→40 y foco input | GET; measurements software-after-clear |
|
||
| Carga inicial / refetch | Limpiar Sedes con GET retenida→40; inventario pendiente no anuncia vacío y termina con 51 | Sedes GET / API de activos retenida; after/assets-clear-during-loading-1440.png |
|
||
| Idioma y teclado | Espacio/Enter activan limpieza; idioma conserva criterios; es/en y foco input | GET Sedes; after/english-keyboard-clear-390.png |
|
||
| Parámetros | contactsOnly inválido tolerado como false; archived inválido rechaza ruta sin tabla; booleano válido permite limpiar | URL real; measurements invalid-archived-rejected |
|
||
| Ámbito accesos | Limpiar solo q conserva kind=account, environmentId y companyId | API real vacía; ID de entorno sintético sin entidad, prueba de ámbito/URL, no de relaciones pobladas |
|
||
|
||
Resoluciones de Sedes: **1920×1080, 1440×900, 1366×768, 1024×768, 768×1024,
|
||
390×844 y 320×640**. Los controles cambian de distribución sin añadir bandas; se abren
|
||
las capturas de 1440, 320 y 390 en inglés. El contenedor conserva el scroll horizontal de
|
||
tabla; en 320 las columnas laterales siguen requiriendo ese desplazamiento. La densidad
|
||
vertical y otras decisiones pendientes de L01-01 no se declaran resueltas.
|
||
|
||
Intentos conservados: la reproducción roja de Sedes y dos pruebas SSR fallidas preceden
|
||
al cambio. La primera suite detectó dos errores de instrumentación (texto `25▼` y espera
|
||
inapropiada de estado de inventario en una ficha). Otra usó una clave desconocida de URL,
|
||
que la ruta estricta rechaza correctamente. Se ajustan las pruebas al contrato real, sin
|
||
relajar producción. Hubo recargas Vite registradas y una ejecución de contexto interrumpida
|
||
con GET retenidas; no cuentan como verdes. Tras aislar HMR, los once métodos pasan juntos.
|
||
|
||
## 14. Pruebas técnicas
|
||
|
||
Se conservan las pruebas rojas previas a la corrección y sus resultados verdes.
|
||
La prueba de compañía comprueba es/en, ámbito sin criterios borrables y vacío del
|
||
ámbito; la prueba de EntityTable distingue espacios visibles del vacío efectivo.
|
||
Los resultados globales se comparan por diagnóstico y archivo con la línea base;
|
||
no se corrige vendor ni trabajo ajeno para obtener una suite verde.
|
||
|
||
### Resultados realmente ejecutados
|
||
|
||
| Comprobación | Resultado de esta ejecución | Evidencia local |
|
||
| --- | --- | --- |
|
||
| pnpm typecheck | Falla, salida 2; mismo TS2375 de calendar.tsx:165 que la línea base, locale opcional | typecheck.log / baseline-typecheck.log |
|
||
| Tipos dirigidos: pnpm exec tsc -p de rdx-ui, companies, assets y resources --noEmit | Los cuatro pasan | rdx/companies/assets/resources-typecheck.log y .exit |
|
||
| pnpm lint | Falla: 17 errores, 2 warnings, 4 infos; baseline 15/1/4 | lint.log / baseline-lint.log |
|
||
| pnpm check | Falla: 173 errores, 2 warnings, 4 infos; baseline 167/1/4. Inspección ampliada posterior: 183/2/4 sobre 2013 archivos | check.log, baseline-check.log, check-full.log |
|
||
| Biome dirigido a los ocho archivos TSX/TS/JSON propios y ESLint de espaciado | Pasa; sin supresiones ni cambios vendor | scoped-check.log / spacing.log |
|
||
| pnpm test, con MariaDB temporal separada | Falla, 7 tareas pasan de 8; Compañías 225/228; no suite global verde | test.log / test.exit |
|
||
| Compañías: prueba específica nueva | Pasa es/en, compañía presente y ámbito sin coincidencia | companies-filters-final.log |
|
||
| rdx-ui, pruebas dirigidas | Pasa, 13 archivos; en ejecución global, 78 casos pasan | rdx-test.log / test.log |
|
||
| Activos, pruebas dirigidas | Pasa, 27 archivos; ejecución global 144 casos | assets-tests.log / test.log |
|
||
| Recursos, pruebas dirigidas | Pasa, 11 archivos; ejecución global 80 casos | resources-tests.log / test.log |
|
||
| Core/navegación, pruebas dirigidas | Pasa, 3 archivos; ejecución global 11 casos | navigation-tests.log / test.log |
|
||
| pnpm build | Pasa, 2 tareas; conserva aviso de chunk web grande | build.log / build.exit |
|
||
| Python | py_compile del script nuevo pasa | No se instala framework adicional |
|
||
|
||
Los recuentos de archivos y casos del runner se indican por separado; el reporte directo
|
||
resume archivos, mientras Turbo muestra los casos de cada suite. La base de integración
|
||
usa solo `metis_desk_test`, credenciales efímeras fuera de Git y eliminación automática;
|
||
no se usa la base de auditoría para fixtures destructivas.
|
||
|
||
**Comparación de fallos, sin atribución por simple recuento:** el TS2375 de vendor coincide
|
||
en archivo/línea/mensaje antes y después. Lint conserva diagnósticos de person-photo y
|
||
migraciones existentes. La inspección ampliada encuentra además formato/espaciado en
|
||
`workstation-configuration-item.tsx`, `workstation-configuration-metadata.tsx`,
|
||
`workstation-profile-identity.tsx` y `workstation-detail.test.tsx`, archivos de trabajo
|
||
simultáneo ajeno a los cambios de filtros. Los ocho archivos propios pasan la comprobación
|
||
separada; no se declara que el aumento global completo fuera ya preexistente.
|
||
|
||
La ejecución global mantiene los dos fallos SSR documentados en L03.2:
|
||
`companies-page.test.tsx:180` (recuento de Personas) y `:210` (microcopy del formulario).
|
||
Aparece también `workstation-detail.test.tsx:863`, «perfiles: total conocido, alcance del
|
||
preview y fila expandida fuera de los primeros cinco», que espera un contador cero.
|
||
Este último no se etiqueta como fallo histórico L03.2: pertenece al trabajo simultáneo
|
||
sobre la ficha de puestos y ese archivo no se modifica en L03.3. No se oculta ni se
|
||
corrige automáticamente fuera del alcance. La lista de fallos se conserva en test.log.
|
||
|
||
Archivos propios: EntityTable y su prueba; SiteSection; CompaniesPage, su controlador
|
||
y la nueva prueba company-filters; SoftwareInstallationsPanel; inclusión de la prueba en
|
||
package.json de Companies; scripts/filter-ui.test.py y los seis documentos de esta entrega.
|
||
No se modifican AGENTS, rutas, hooks de History, comparación textual, backend o vendor.
|
||
Los diffs generales del workspace también contienen cambios anteriores/simultáneos.
|
||
|
||
## 15. Regresiones y alcance de los hallazgos
|
||
|
||
Se contrastan L03.1/L03.2 y los escenarios aplicables de L02/V01/V02/V06. Las mediciones
|
||
históricas permanecen y la resolución de L01-03 se limita al comportamiento reproducido.
|
||
V05/V07/V08/V12 conservan su alcance documentado; no se convierte esta entrega en L04.
|
||
|
||
### Regresiones ejecutadas
|
||
|
||
Se verifican **57 métodos distintos de navegador** contando L03.3 y las regresiones,
|
||
no las repeticiones como casos adicionales:
|
||
|
||
| Familia | Resultado real | Log / mediciones |
|
||
| --- | --- | --- |
|
||
| L03.3, criterios y limpieza | 11/11 juntos; Compañías ampliada se repite y pasa | browser-filters-stable.log, company-page-browser.log; after/measurements-522693.json y -535976.json |
|
||
| L03.2, comparación y consulta original | 8/8 juntos, 301,235 s | search-regressions.log; regressions/search/ |
|
||
| L02.3, carga/error/actualización y V02/V06 | 8/8 juntos, 279,181 s | states-regressions.log; regressions/states/ |
|
||
| L02.2, columnas, responsive, teclado y preferencias | 8/8 juntos, 197,278 s | columns-regressions.log; regressions/columns/ |
|
||
| L02.1, pickers locales/remoto de prueba, selección provisional, zoom y foco | 8/8 juntos, 207,715 s | pickers-regressions.log; regressions/pickers/ |
|
||
| L03.1, retorno/URL/orden/página/scroll/foco y capacidad V01 | 12/14 en lote; los dos restantes pasan en repetición limpia (38,422 s). El lote completo **no** es verde | context-regressions-stable.log, context-page-size-repeat.log; after/measurements-529969.json y JSON de la repetición |
|
||
|
||
La primera ejecución de contexto se interrumpe tras fallos de recarga y respuestas GET
|
||
retenidas. En la repetición con HMR aislado pasan los primeros doce; el método 13 recibe
|
||
un documento sin contenido (snapshot `ready-timeout`, 75 errores indicados por MCP),
|
||
antes de completar la prueba de tamaño. No se conserva el detalle de esos 75 errores
|
||
tras la navegación siguiente y no se inventa una causa. Deja tamaño 25 sin restaurar;
|
||
el método 14 espera 10 y observa página 2. Los métodos 13 y 14 pasan juntos al repetir
|
||
exclusivamente esos dos en navegador limpio, sin cambiar producción ni sus aserciones.
|
||
No se presenta el lote de catorce como aprobado.
|
||
|
||
Las consolas finales de los once escenarios propios, Compañías, búsquedas, columnas y
|
||
selectores no muestran errores ni warnings. Estados registra cuatro 503 controlados
|
||
sobre `/api/assets/:company`, esperados en su prueba de fallo. Las guardas de escritura
|
||
registran `[]`. La consola final se refiere al documento activo: no sustituye los
|
||
errores intermedios conservados en snapshots y logs. El índice completo está en
|
||
`.artifacts/playwright/l03-3/INDICE.md`; incluye capturas abiertas, consola, medidas,
|
||
volumen, pruebas rojas/verdes y todos los intentos.
|
||
|
||
## 16. Limitaciones y pendientes L04
|
||
|
||
La revisión de código no acredita una interfaz poblada de todas las configuraciones,
|
||
administración o relaciones. No se certifica el proveedor remoto completo contra
|
||
servicios reales ni se cambia SQL/HTTP. Se mantienen las limitaciones históricas de
|
||
V05, V07, V08 y V12 y el problema de densidad L01-01. No se implementan L04 ni filtros
|
||
de sede/responsable/estado inexistentes en los inventarios actuales.
|
||
|
||
La comprobación general de enlaces añadidos en el diff del workspace detecta una referencia
|
||
simultánea a `implementacion-uiux-ficha-puesto-v2.1.md` que todavía no existe. No pertenece
|
||
a L03.3 y se conserva; los destinos documentales añadidos por esta entrega sí existen.
|
||
`git diff --check` es correcto. La sesión visual reutilizada permanece con su preparador
|
||
original; solo se retiran navegadores y MariaDB de integración propios. Las credenciales, sesiones y capturas
|
||
de esta entrega quedan fuera de Git.
|
||
|
||
|
||
## Seguimiento L04.1
|
||
|
||
[L04.1](adopcion-listados-l04-1.md) adopta URL de orden/página, preferencias explícitas de
|
||
columnas y retorno de scroll/foco en Puestos, Perfiles y directorio de Compañías. Conserva
|
||
la búsqueda normalizada y los campos de cada entidad, los filtros de archivados/activas
|
||
y el ámbito. La limpieza controlada agrupa criterios y página en un único replace.
|
||
Las medidas y limitaciones anteriores se conservan; los resultados nuevos se registran
|
||
en el informe L04.1. Restan L04.2–L04.4 y no se declara V05 ni L04 resueltos universalmente.
|