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.
|