|
|
|
|
# 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 (`<script lang="ts">`, `v.langRef(...)`) o menciones
|
|
|
|
|
historicas explicitas.
|
|
|
|
|
5. `attachActiveUix(app)` no crea sustitutos si faltan servicios requeridos.
|
|
|
|
|
6. `SoundChannel` ya no registra listeners globales en el constructor; prima
|
|
|
|
|
el contexto en `prepare()` solo cuando una senal sonora entra en el gesto.
|
|
|
|
|
7. `createActivePrefsDomProjection(...)` proyecta `dir`, `data-motion`,
|
|
|
|
|
`data-sound` y `data-haptic`; `ActiveEidos` proyecta `data-theme`,
|
|
|
|
|
`data-mode` y `data-density`.
|
|
|
|
|
8. `SomaRuntime`, `registerMorfo` y `applyMapOverrides` tienen optimizaciones
|
|
|
|
|
basicas de churn/copia aplicadas.
|
|
|
|
|
|
|
|
|
|
## Pendiente P2
|
|
|
|
|
|
|
|
|
|
1. Soma: la API canonica publica de parte es `runtime.part(...)`.
|
|
|
|
|
`registerContract(...)` ya no se llama desde Soma; `registerMorfo(...)` lo
|
|
|
|
|
registra todo. `createAttrs(...)` queda solo como helper tipado para
|
|
|
|
|
`querySelector`/tooling, no como mecanismo runtime.
|
|
|
|
|
2. Morfo: los atributos `data-*` con valor libre ya se modelan con
|
|
|
|
|
`emit: 'value'`; `progress/meter` declaran `data-value`, `data-min` y
|
|
|
|
|
`data-max` en morfo y `SomaRuntime` lo cubre con test dedicado.
|
|
|
|
|
3. Morfo translations: mantener `translations` en el morfo, `commonRef` para
|
|
|
|
|
textos compartidos y `langs.ts` solo como constantes imperativas legacy.
|
|
|
|
|
4. Frontend/ActiveApp: cerrado para esta fase. `frontend` es servicio legacy
|
|
|
|
|
opt-in; no pertenece al core de `ActiveApp` ni a UIX. Las preferencias
|
|
|
|
|
transversales se proyectan desde `arts/prefs`; las visuales pertenecen a
|
|
|
|
|
`ActiveEidos`.
|
|
|
|
|
5. ActiveApp docs: actualizado que `langs`, `dom`, `format`, `events` y
|
|
|
|
|
`frontend` son servicios opt-in, y que `frontend` no debe usarse para
|
|
|
|
|
codigo UIX nuevo.
|
|
|
|
|
|
|
|
|
|
## Pendiente Eidos
|
|
|
|
|
|
|
|
|
|
1. Primitivas visuales sin tocar componentes: `layout` ya queda incorporado
|
|
|
|
|
al `EidosConfig` con `containerWidth`, `containerPaddingInline`,
|
|
|
|
|
`contentWidth` y `aspectRatio`, y se genera en CSS/contrato como
|
|
|
|
|
`--container-width-*`, `--container-padding-inline`, `--content-width-*`
|
|
|
|
|
y `--aspect-ratio-*`.
|
|
|
|
|
2. Mantener `EidosConfig` como authoring object persistible y CSS-only como
|
|
|
|
|
modo valido mediante `themeSource: 'css'`.
|
|
|
|
|
3. Density queda como primitive bridge: `scale`, `spaceScale`, `controlScale`
|
|
|
|
|
y `contentScale` para `compact`, `comfortable`, `spacious`; `ActiveEidos`
|
|
|
|
|
proyecta `data-density` y Eidos publica aliases activos como
|
|
|
|
|
`--density-space-scale`.
|
|
|
|
|
4. `src/uix/eidos/generated/base.css` queda como primer artefacto CSS generado
|
|
|
|
|
desde `EidosConfig` base mediante `npm run generate:eidos-css`; `index.css`
|
|
|
|
|
lo importa como foundation estatica.
|
|
|
|
|
5. Pendiente: decidir que tokens per-component de `tokens/components/*`
|
|
|
|
|
quedan como recipe estable y cuales deben salir de `EidosConfig`.
|
|
|
|
|
6. Pendiente: retirar `contracts/`, `tokens/` o `themes/base/` del entrypoint
|
|
|
|
|
estatico cuando las recipes ya no dependan de aliases historicos.
|
|
|
|
|
7. No reintroducir engine visual separado, carpeta `engine`, ni wrapper `Eidos` sin
|
|
|
|
|
contrato propio.
|
|
|
|
|
|
|
|
|
|
## Pendiente de limpieza
|
|
|
|
|
|
|
|
|
|
- Resolver los 3 warnings de toast cuando se vuelva a tocar la demo.
|
|
|
|
|
- No commitear logs temporales: `.codex-vite-dialog*.log`, `debug.log`, `md`.
|
|
|
|
|
- Antes de seguir con componentes, releer `src/uix/active_architecture.md`,
|
|
|
|
|
`src/uix/active-uix/README.md`, `src/uix/eidos/README.md`,
|
|
|
|
|
`src/uix/soma/README.md` y este archivo.
|