You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
6.3 KiB
136 lines
6.3 KiB
# Hand-offs — May 2026 (extracted from the layer READMEs)
|
|
|
|
These session hand-off notes used to live inline at the top of the UIX layer
|
|
READMEs. They were pulled out so those reference docs read as timeless. Kept
|
|
here for traceability; the rules they fixed are now reflected in the docs
|
|
themselves and enforced by `src/uix/contracts.ts` + `contracts.test.ts`.
|
|
|
|
> The `active_architecture.md` §0 hand-off (the largest one) is **not** here yet:
|
|
> it embeds the referenced "contratos mínimos" table that other docs link to, so
|
|
> it gets separated from its handoff framing during the architecture (E1) pass,
|
|
> not in this mechanical extraction.
|
|
|
|
---
|
|
|
|
## From `src/uix/README.md` (intro blockquote) — 2026-05-14
|
|
|
|
> **Visión de conjunto**: para entender las cuatro capas (morfo, soma, sema,
|
|
> eidos) en una sola lectura, motivaciones y articulación incluidas, ir a
|
|
> `active_architecture.md`. Este README mantiene la introducción más narrativa.
|
|
>
|
|
> **Hand-off de continuación**: el estado actual de migración y los próximos
|
|
> pasos viven en `continue.md`.
|
|
> **Handoff 2026-05-14**: pausa deliberada antes de seguir programando.
|
|
> Los contratos mínimos entre `active-uix`, `morfo`, `soma`, `sema`, `eidos`,
|
|
> `adom`, `langs`, `format` y `prefs` quedan descritos en
|
|
> `active_architecture.md`, sección "Handoff 2026-05-14". Ya queda fijada la
|
|
> regla principal de ownership: solo `ActiveApp` y `ActiveUix` standalone crean
|
|
> servicios compartidos. La tabla ejecutable de contratos vive en `contracts.ts`
|
|
> y se valida en `contracts.test.ts`. La tabla de naming canónico vive en
|
|
> `active_architecture.md#01-naming-canonico`. Ownership DOM P1 queda cerrado:
|
|
> las escrituras gestionadas por UIX pasan por `ActiveDom`.
|
|
>
|
|
> **Convenciones doctrinales del API** (intent ↔ color, subset por componente,
|
|
> root visual con partes attached en eidos, sound prepare-time priming): viven en
|
|
> `src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md`. Autoritativo para todo wrapper /
|
|
> migración nueva.
|
|
|
|
---
|
|
|
|
## From `src/uix/morfo/README.md` — Handoff 2026-05-14
|
|
|
|
Morfo debe seguir siendo declarativo: no instancia servicios y no conoce
|
|
`ActiveUix`. Sus campos solo entran en el contrato cuando son superficie
|
|
cross-layer real; si un dato pertenece a una sola capa, vive en esa capa.
|
|
|
|
Decisiones cerradas:
|
|
|
|
- `texts` declara las ranuras de texto del componente como idlangrefs absolutos
|
|
(`'#?components.{kebab}.{key}|fallback'`). El catálogo multilingüe vive en
|
|
`src/uix/langs/components/{kebab}.ts` (fuera del morfo).
|
|
- Textos comunes usan `v.commonRef(...)` o un idlangref absoluto; no se
|
|
duplican en cada morfo.
|
|
- `registerMorfo(morfo)` registra el contrato `data-*`. El catálogo de strings
|
|
(`componentLangs` + `commonLangs`) lo registra `ActiveUix` al arrancar; el
|
|
morfo nunca extiende `ActiveLangs` dinámicamente.
|
|
- Si Soma, Sema y Eidos necesitan un dato compartido, pasa por morfo o por un
|
|
contrato publico; no por imports laterales entre capas.
|
|
- La regla 2-de-3 sigue vigente para extender morfo.
|
|
|
|
---
|
|
|
|
## From `src/uix/sema/README.md` — Handoff 2026-05-13
|
|
|
|
Sema ya tiene contrato explicito de DOM: si el canal visual esta activo,
|
|
`EngineSemantic` debe recibir `dom` o `projector`. Si se construye desde
|
|
`ActiveUix`, recibe el `dom` de `ActiveUix`; si se usa directamente fuera de
|
|
UIX, el integrador debe pasar un writer explicito o usar `visual:false`.
|
|
Sema no cae a escrituras DOM directas por defecto.
|
|
|
|
Tambien queda por decidir si `emit` debe seguir siendo secuencial estricto de
|
|
forma global o si la secuenciacion pertenece al evento/morfo. No cambiar esto
|
|
sin documentar antes la tabla de contratos minimos en `../active_architecture.md`.
|
|
|
|
---
|
|
|
|
## From `src/uix/soma/README.md` — Handoff 2026-05-14
|
|
|
|
Soma no debe crecer ahora con `ActiveSoma`/`EngineSoma` por simetria. El
|
|
contrato minimo de `SomaRuntime` con `ActiveUix` (`dom`, `events`, `langs`,
|
|
`format`, `prefs`) queda descrito en `src/uix/contracts.ts`. La regla de
|
|
ownership ya queda cerrada: Soma no crea servicios compartidos. Recibe `dom`
|
|
desde el scope `Soma.runtime(...)`; si no hay una superficie `ActiveDom`, falla
|
|
en la raiz activa, no dentro de un componente.
|
|
|
|
Punto critico para manana: confirmar que todo atributo mutable sigue pasando
|
|
por el servicio DOM activo, y que ninguna ausencia de `dom` hace que Soma o
|
|
Sema caigan a escrituras directas.
|
|
|
|
---
|
|
|
|
## From `src/uix/eidos/README.md` — Handoff 2026-05-14
|
|
|
|
Eidos queda congelado a nivel de componentes hasta reauditar la arquitectura
|
|
de UIX. No tocar `src/uix/eidos/components/*` salvo orden explicita.
|
|
|
|
Actualización 2026-05-17: la migración de componentes se reanudó por orden
|
|
explícita. La regla vigente no cambia: cada componente nuevo debe seguir
|
|
`components/README.md`, envolver partes públicas de Soma directamente y añadir
|
|
sólo superficie visual de Eidos.
|
|
|
|
Antes de seguir con wrappers o recipes por componente hay que respetar estas
|
|
decisiones:
|
|
|
|
- que contrato minimo consume `Eidos` desde `ActiveUix`;
|
|
- `ActiveEidos` asume authoring, validacion, generacion CSS, persistencia y
|
|
contexto visual;
|
|
- `events` es el servicio perceptivo runtime y `morfo.translations` es el
|
|
catalogo declarativo de texto owned por el componente;
|
|
- que parte se genera desde codigo y que parte puede venir solo por CSS;
|
|
- como se mantiene la regla de escritura DOM unica en standalone `dom:false`.
|
|
|
|
La referencia de arranque esta en `../active_architecture.md`, seccion
|
|
`Handoff 2026-05-14`.
|
|
|
|
---
|
|
|
|
## From `src/uix/active-uix/README.md` — Handoff 2026-05-14
|
|
|
|
La regla de ownership queda cerrada:
|
|
|
|
> Solo los composition roots crean servicios compartidos. Si hay `ActiveApp`,
|
|
> `attachActiveUix(app)` consume sus servicios y falla si falta alguno
|
|
> requerido. Si no hay app, `createActiveUix(...)` es el composition root local
|
|
> y crea los servicios/prefs de UIX. `morfo`, `soma`, `sema`, `eidos` y los
|
|
> componentes no crean `dom`, `langs`, `prefs`, `format`, `clipboard` ni
|
|
> equivalentes.
|
|
|
|
La revision de naming queda cerrada asi: `events` es el nombre publico del
|
|
motor perceptivo en `ActiveUix` y tambien el nombre del servicio que
|
|
`defineUixServices(...)` registra en `ActiveApp`. `semantic` queda reservado
|
|
para el payload declarativo de `morfo.events[].semantic`, no para servicios
|
|
runtime. `morfo.translations` queda como catalogo declarativo owned por el
|
|
componente. `prefs` es el unico nombre para preferencias: `ActiveUix` expone
|
|
el `ActivePrefs` bruto y las capas inferiores consumen vistas acotadas cuando
|
|
no deben mutar.
|