# Continue Fecha de corte: 2026-05-13. Rama: `active-uix`. ## Estado validado - `ActiveUix` ya no crea ni conoce `Soma` ni `Eidos`. - Solo `ActiveApp` y `createActiveUix(...)` standalone crean servicios compartidos. - `attachActiveUix(app)` reutiliza servicios de `ActiveApp` y falla temprano si faltan `langs` o `dom`. - El servicio runtime de traducciones se llama `langs`. No confundir: - `prefs.language` alimenta `langs`. - `prefs.locale` alimenta `format`. - `prefs.direction`, `prefs.motion`, `prefs.sound` y `prefs.haptic` se proyectan mediante `createActivePrefsDomProjection(...)`. - `events` es el nombre publico del motor perceptivo en `ActiveUix`; `semantic` queda solo como payload de `morfo.events[].semantic`. - `ActiveEidos` queda aplanado: no existe engine visual separado ni directorio `engine` bajo Eidos. - Los helpers de configuracion/render/persistencia de Eidos viven en `src/uix/eidos/lib`. - `ActiveEidos` asume configuracion, validacion, contrato CSS, render, persistencia y scope visual. - Los componentes Eidos siguen congelados salvo orden explicita. Validaciones ejecutadas en esta fase: - `npx vitest run src/uix/eidos/active-eidos.test.ts src/uix/eidos/active-eidos-config.test.ts` -> 37 tests OK. - `npx vitest run src/arts/adom/test/active-dom.test.ts src/uix/soma/runtime.svelte.test.ts src/uix/morfo/registry.test.ts src/uix/sema/resolver.test.ts src/uix/sema/chans/sound.test.ts src/uix/sema/chans/visual.test.ts src/uix/eidos/active-eidos.test.ts src/uix/eidos/active-eidos-config.test.ts src/uix/contracts.test.ts` -> 115 tests OK. - `npm run check` -> 0 errores, 3 warnings conocidos en `web/routes/uix/components/toast/+page.svelte`. ## Arquitectura acordada La regla central queda asi: ```text ActiveApp o ActiveUix standalone crean servicios. ActiveUix expone servicios y prefs. Morfo declara contrato y translations. Soma consume ActiveUix/Soma scope y transcribe morfo al DOM via uix.dom. Sema/events emite ocurrencias perceptivas; no debe inventar servicios. ActiveEidos consume ActiveUix y resuelve config/tokens/CSS runtime. Los componentes no crean servicios compartidos. ``` `portal` queda como preferencia/target generico de `ActiveUix`; Soma lo adapta a su `portalTo`. No usar nombres como `somaPortalTo` en `ActiveUix`. ## P1 cerrado 1. Auditoria DOM iniciada en `src/uix/dom_audit.md`. - Corregido: `TextSelection` ya escribe/restaura `user-select` via `ActiveDom.apply`. - Corregido: announcers/live regions de Soma y descripciones ocultas de date/time usan `ActiveDom.writeNode/writeText/removeNode`. - Correcto: `ActiveUix` prefs, `SomaRuntime`, `VisualChannel`/`DomSignalProjector` y `ActiveEidos` usan `ActiveDom`. - Barrido P1 sin escrituras directas de produccion restantes; quedan lecturas DOM y fixtures de tests. 2. Tabla de contratos minimos cerrada como codigo/tests: `src/uix/contracts.ts` + `src/uix/contracts.test.ts` cubren `ActiveUix`, `SomaRuntime`, `EngineSemantic/events`, `ActiveEidos` y `Morfo`. 3. Sema queda purgado de las slices visuales `motion`, `color` y `presence`. El mapa canonico resuelve solo `hold`, `sound` y `haptic`; Eidos reacciona visualmente a `data-event-*` y a sus propios tokens CSS. 4. Naming `langs` revisado en mensajes/docs/tipos principales. Quedan solo usos tecnicos validos (`