- Add softwareReferenceHref helper function for generating resource links. - Create useGlobalResourceEditor hook for managing global application resources. - Implement useGlobalResourceForm hook for handling global resource forms. - Introduce GlobalSoftwareCatalogProvider for context management of global applications. - Develop GlobalOperatingSystemsPage to render global operating systems using the existing GlobalApplicationsPage. - Add operating system form identity helpers for managing OS-specific fields. - Create operating system specification labels for better localization. - Implement OperatingSystemIdentityReview component for reviewing OS identities. - Add OperatingSystemProductFields component for displaying OS product details. - Write tests for resource characteristic control to ensure proper translation and value handling. - Create a Python script for auditing global operating systems UI interactions. - Add tests for expanded workstation profiles to ensure proper functionality and responsiveness.
53 lines
6.0 KiB
Markdown
53 lines
6.0 KiB
Markdown
# Implementación — Catálogo global de sistemas operativos
|
||
|
||
Fecha: 25 de octubre de 2026. Base: rama `main`, HEAD inicial `ddebfadc1c01117f73f757a91e030b9944427bba`. El árbol estaba limpio al iniciar. Durante el trabajo aparecieron modificaciones concurrentes en perfiles de puesto y documentación de interfaz; se conservaron y no se atribuyen a esta implementación.
|
||
|
||
La [decisión aprobada](decision-catalogo-global-sistemas-operativos.md) materializa D-SO-01–07. La [auditoría arquitectónica](auditoria-catalogo-global-sistemas-operativos.md) permanece como evidencia anterior a la implementación.
|
||
|
||
## Código y contratos
|
||
|
||
| Fase | Implementación |
|
||
| --- | --- |
|
||
| F1 | Seed y evolución de `template:os`; identidad declarativa, edición explícita y comparación semántica conservadora. Campos nuevos opcionales para particulares. |
|
||
| F2 | DTO SO públicos específicos, contrato Resources 3, negociación controlada de clientes anteriores, resolver por propósito y gates independientes. Lectura de aplicaciones filtrada también en R2.6. |
|
||
| F3 | Superficie `/api/resource-global-operating-systems`, repositorio global compartido configurado por tipo, revisión y comprobación transaccional de duplicados, identidad fija desde primera publicación y propagación protegida. Administración web compartida con identidad y textos SO propios. |
|
||
| F4 | Candidatos mixtos, capabilities por tipo, enlaces SO correctos en activo/puesto/panel/historial/mapa, scope conservado en el selector del SO actual e invalidación por UUID y catálogo. |
|
||
| F5 | Unitarias, componentes, contratos, HTTP/MariaDB y Playwright MCP, con evidencias y límites descritos abajo. |
|
||
| F6 | ADR, procedimiento de habilitación/rollback y este registro. Producción sin activar. |
|
||
|
||
Archivos principales:
|
||
|
||
- Resources: `api/domain/operating-system-identity.ts`, `evolve-operating-system-template.ts`, `resource-catalog-seed.ts`; `api/application/operating-system-identity-policy.ts`, `global-resource.use-cases.ts`, `global-resource-specification.ts` y `resource-global-gates.ts`.
|
||
- Persistencia: `sequelize-global-resource.repository.ts`, `resource-reference-metadata.ts`, `resource-reference-reader.ts`, `global-operating-system-reader.ts`, `prepare-resource-template-updates.ts` y `verify-global-resource-enablement.ts`.
|
||
- Contratos: `common/operating-system-identity.ts`, DTO de referencias/requests/responses y `resource-client-contract.ts`. Companies propaga las capacidades v3 de software y mantiene los propósitos de perfiles.
|
||
- Web: `global-applications` compone el comportamiento compartido; `global-operating-systems` aporta página, lectura/etiquetas de identidad y revisión. `software-reference-href.ts` centraliza destinos por tipo/scope.
|
||
- Configuración: `apps/server/src/config/database.ts`, composición de Identity y Resources. Ambos flags SO conservan el predeterminado `false`.
|
||
- Reproducción: `pnpm test:global-operating-systems`, `python3 scripts/visual-audit.py --global-operating-systems --check`, suites unitarias de Resources y pruebas de SO actual/rutas de Companies.
|
||
|
||
No se añadieron entidades, tablas, columnas o relaciones de instalación. La evolución de datos del catálogo y la migración scoped previa se ensayaron en contenedores desechables; no se modificó ninguna base real ni configuración desplegada.
|
||
|
||
## Validación y evidencias
|
||
|
||
Los resultados finales se recogen en el informe de validación adjunto a esta implementación. Se distinguen comprobaciones dirigidas correctas de los fallos generales ajenos al cambio; ninguna incidencia general se interpreta como una validación global correcta.
|
||
|
||
La integración nueva usa 15 compañías y una principal con 50 personas, 50 activos, 50 puestos, 50 perfiles y al menos 50 recursos particulares, además de SO globales y licencias locales. Prueba identidad, borrador, edición no aplicable, revisión obsoleta, equivalentes concurrentes, scopes, CSRF, perfil rechazado, licencias ajenas, contrato v2/v3, versión instalada, desactivación, carrera de instalación y rollback de gates.
|
||
|
||
La auditoría visual usa otra instalación desechable, 15 compañías, el mismo volumen mínimo por entidad principal y 51 productos SO globales de prueba. Realiza escrituras mediante formularios y HTTP públicos. Las capturas se producen en esta intervención; no se reutilizan evidencias de auditorías anteriores. Los fallos de transporte se simulan únicamente para probar carga/error/reintento, conservando el servidor y persistencia reales para las operaciones funcionales.
|
||
|
||
Se consultaron `rdx-solid`, las guías React de composición y rendimiento, `shadcn`, `ui-ux-pro-max`, búsqueda y formularios. Guiaron la reutilización del repositorio, el contexto de tipo entre consumidores reales, el estado remoto en TanStack Query y la revisión accesible en el formulario. No existe una skill específica de Resources; se siguió la documentación normativa del repositorio. No se instalaron skills ni plugins.
|
||
|
||
Durante la prueba de clic real del mapa se detectó que React Flow desactiva eventos de
|
||
puntero en contenedores de nodos no seleccionables. Los overlays de enlace de
|
||
`WorkplaceEquipmentCard` y `WorkplaceSoftwareCard` declaran `pointer-events-auto`,
|
||
igual que la acción existente de añadir activo. El canvas permanece sin selección ni
|
||
arrastre; se recupera únicamente la interacción de los enlaces. Se comprueban ambos
|
||
casos equivalentes, además de la navegación de SO por scope.
|
||
|
||
## Activación y límites
|
||
|
||
**Preparado y habilitado solo en entorno aislado. No desplegado ni activado en producción.**
|
||
|
||
La unicidad semántica depende de las policies y locks de la aplicación, sin UNIQUE SQL EAV. La coexistencia puede conservar productos locales equivalentes; no se fusionan. La identidad fija desde publicación exige crear otro UUID para otro producto comercial. El rollback mantiene lectores v3 y cierra gates; volver a un backend previo después de persistir SO globales rompería sus supuestos.
|
||
|
||
La autorización separada para el entorno desplegado, su preflight y su verificación posterior permanecen pendientes operativos. No son acciones realizadas por esta entrega.
|