- 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.
6.0 KiB
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 materializa D-SO-01–07. La auditoría arquitectónica 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.tsyresource-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.tsyverify-global-resource-enablement.ts. - Contratos:
common/operating-system-identity.ts, DTO de referencias/requests/responses yresource-client-contract.ts. Companies propaga las capacidades v3 de software y mantiene los propósitos de perfiles. - Web:
global-applicationscompone el comportamiento compartido;global-operating-systemsaporta página, lectura/etiquetas de identidad y revisión.software-reference-href.tscentraliza destinos por tipo/scope. - Configuración:
apps/server/src/config/database.ts, composición de Identity y Resources. Ambos flags SO conservan el predeterminadofalse. - 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.