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.
svelte-kit-vice/continue.md

21 KiB

Continue

Fecha de corte: 2026-05-15. Rama: active-uix.

Actualizacion 2026-05-15:

  • Auditoria Soma/Eidos ampliada aplicada por fases y empujada:

    • Cobertura nueva para Select, Popover, Toast y RangeCalendar.
    • Las clases runtime internas DialogProvider, DrawerProvider y PopoverProvider dejan de exportarse desde los barrels publicos; los wrappers siguen usandolas por import directo.
    • computeCommandScore sigue reexportado desde Command por DX, pero el algoritmo vive como computeFuzzyScore en src/libs/strings.
    • table-core se mueve a src/libs/datagrid con su test.
    • form-core se mueve a src/libs/forms, usa el Standard Schema comun de src/libs/standard-schema.ts, elimina la copia local de Soma y anade tests de dirty/touched/reset, issues y submit async.
    • Inventario de Soma actualizado: ya no lista como planned componentes que existen en el arbol activo.
    • SelectType/ScrollAlignment y el resto de tipos publicos de componentes salen de types.ts; los barrels ya no exportan contratos desde *-provider.svelte.ts (excepto el wrapper Svelte publico de Select).
    • Dismissal y SafePolygon usan uix.timers cuando Soma lo tiene disponible, con fallback nativo solo para uso standalone fuera de UIX.
    • Cobertura nueva para Combobox: selección single/multiple, inputValue y filtrado de items disabled.
    • Cobertura nueva para DatePicker, DateRangePicker y TimePicker: registro runtime, cierre controlado tras selección y escritura de sliders de hora al valor compartido.
    • Cobertura nueva para TimeRangePicker: valores por endpoint, sliders y cierre al completar ambos extremos.
    • Cobertura nueva para TimeRangeField: validación de rango y foco de label via ActiveDom.
    • Cobertura nueva para TimeField: validación, sync de segmentos 12h y commit solo cuando los segmentos de tiempo renderizados estan completos.
    • Correccion TimeField: el announcer se inicializa con $effect en vez de onMount() dentro de la clase, y datetime separa areAllTimeSegmentsFilledDOM(...) del helper de fecha.
    • Cobertura nueva para DateRangeField: validación de rango y foco de label via ActiveDom.
    • Cobertura ampliada para DateFieldProvider: validación, sync de segmentos date/time y commit solo cuando los segmentos renderizados estan completos.
    • Correccion DateField: el announcer se inicializa con $effect en vez de onMount() dentro de la clase.
    • Cobertura nueva para VirtualList: cálculo de ventana, scrollToIndex y compensación anti-jump.
    • Correccion VirtualList: la compensación de mediciones dinámicas sobre viewports internos pasa por ActiveDom.scrollTo(...) y usa scrollOffset + delta como fuente reactiva.
    • Cobertura nueva para VirtualGrid: cálculo de ventana 2D y scrollToCell via ActiveDom.
    • Cobertura nueva para NumberField: parsing localizable, teclado spinbutton, triggers, props ARIA y scrubber.
    • Correccion NumberField: el root expone dir efectivo (prop -> prefs) en lugar del prop crudo.
    • Cobertura nueva para FileUpload: aceptación/rechazo de ficheros, dropzone, input oculto, items, progress, remove y clear.
    • Cobertura nueva para ColorField: commit por segmentos, edición hex con teclado, selector de formato, input oculto y foco de label via ActiveDom.
    • Cobertura nueva para ColorPicker: helpers de canales, trigger/value/hidden, area 2D, slider de canal y swatches con commit/cierre.
    • Cobertura nueva para NavigationMenu: timers UIX de apertura/cierre, enlace item/trigger/content, foco por teclado, list y link props.
    • Cobertura nueva para TreeGrid: expansión, selección/rango, filas visibles bajo ancestros colapsados, navegación, row/cell/header y expand trigger.
    • Cobertura nueva para DropdownMenu: trigger open/close, scoping de items, item select, checkbox/radio groups, submenu delayed/open y group/separator.
    • Cobertura nueva para ContextMenu: apertura por contextmenu con anchor virtual, scoping de items, item select, checkbox/radio, submenu delayed/open y group/separator.
    • Validado por fase:
      • npm run check -> 0 errores, 0 warnings.
      • npm run test -> 194 archivos, 2121 tests OK.
      • tests focales de Select/Popover/Toast/RangeCalendar -> 11 tests OK.
      • tests focales Dialog/Drawer/Popover/Select -> 10 tests OK.
      • command-provider.svelte.test.ts -> 2 tests OK.
      • $libs/datagrid/table-core.svelte.test.ts -> 8 tests OK.
      • $libs/forms/form-core.svelte.test.ts -> 3 tests OK.
      • combobox-provider.svelte.test.ts -> 3 tests OK.
      • tests focales DatePicker/DateRangePicker/TimePicker -> 7 tests OK.
      • time-range-picker-provider.svelte.test.ts -> 3 tests OK.
      • time-range-field-provider.svelte.test.ts -> 3 tests OK.
      • time-field-provider.svelte.test.ts -> 3 tests OK.
      • date-range-field-provider.svelte.test.ts -> 3 tests OK.
      • date-field-provider.svelte.test.ts -> 7 tests OK.
      • virtual-list-provider.svelte.test.ts -> 3 tests OK.
      • virtual-grid-provider.svelte.test.ts -> 2 tests OK.
      • number-field-provider.svelte.test.ts -> 4 tests OK.
      • file-upload-provider.svelte.test.ts -> 4 tests OK.
      • color-field-provider.svelte.test.ts -> 4 tests OK.
      • color-picker-provider.svelte.test.ts -> 4 tests OK.
      • navigation-menu-provider.svelte.test.ts -> 4 tests OK.
      • tree-grid-provider.svelte.test.ts -> 4 tests OK.
      • dropdown-menu-provider.svelte.test.ts -> 6 tests OK.
      • context-menu-provider.svelte.test.ts -> 6 tests OK.
      • guardia rg "from './.*provider\\.svelte'" src/uix/soma/components -g 'exports.ts' -> solo queda select/components/select-provider.svelte, que es wrapper publico, no runtime provider.
    • Commits nuevos empujados:
      • a3bcb66c — Refresh UIX audit follow-up docs
      • 25870b4e — Expand Soma component coverage
      • e1a21269 — Hide internal Soma provider classes from barrels
      • 4829ce13 — Move command scorer to shared strings lib
      • 02c1fb43 — Move table core to datagrid lib
      • d319ec6b — Move form core to forms lib
      • 701f83d6 — Document Soma coverage and domain lib split
      • 3050d273 — Align Select public types and Soma inventory
      • eaeebd69 — Route Soma layer timers through UIX scheduler
      • 9fa00fa2 — Move Soma public types out of providers
      • 05f87dc4 — Add Combobox provider coverage
  • Auditoria UIX post-Soma/Eidos aplicada parcialmente:

    • SoundChannel ya no usa document.addEventListener/removeEventListener directamente para el unlock listener; consume una superficie DOM inyectada compatible con ActiveDom.listen(...) y ActiveDom.getDocument(...).
    • Se rompe el ciclo type-only sema/types.ts <-> sema-map.ts moviendo ids, signatures y overrides de canales a src/uix/sema/channels.ts.
    • Se rompe el ciclo type-only de Floating moviendo Side, Align, Boundary, SIDE_OPTIONS y ALIGN_OPTIONS a src/uix/soma/layers/floating/placement.ts.
    • Tests iniciales añadidos para los puntos de mayor riesgo de Soma: Dialog, Drawer, Command, Calendar y DateField.
    • Validado:
      • npm run check -> 0 errores, 0 warnings.
      • npx vitest run src/uix/sema src/uix/soma/layers/floating -> 117 tests OK.
      • npx vitest run focal de los 5 nuevos tests Soma -> 16 tests OK.
    • Commits nuevos empujados:
      • 802ebce6 — Tighten sema channel and floating contracts
      • c6d24eee — Add high-risk Soma provider tests
  • Intent queda como vocabulario unico en src/uix/intent.ts. No existen alias EidosIntent, UixIntent, ToastIntent ni SemaIntent; Sema usa IntentBinding / IntentPolicy cuando necesita especializar el contrato del evento, pero el intent canonico no pertenece a una capa concreta.

  • MorfoData valida nombres data-*: solo acepta atributos publicos lowercase kebab-case; data-_* queda reservado para estado privado del provider y no puede declararse en morfo.

  • frontend queda eliminado del arbol activo: no hay src/arts/frontend, factory defineActiveFrontend, alias $frontend, ruta /active/docs/fend ni servicio services.frontend. Las referencias documentales restantes son notas explicitas de retirada o usos genericos de la palabra frontend.

  • themeDimension(...) y densityDimension(...) fueron retiradas del catalogo publico de $prefs. Las preferencias visuales theme/mode/density son entradas de ActiveEidos; prefs mantiene solo dimensiones transversales o custom via primitivas genericas.

  • SemaActiveChannel fue eliminado. La unica fuente publica para canales es SemaChannelId.

  • Verificaciones ejecutadas despues de la retirada:

    • npm run check -> 0 errores, 0 warnings.
    • npm run test -> 165 archivos, 2002 tests OK.
  • Commits nuevos empujados:

    • a4cbe0c0 — Tighten intent and morfo contracts
    • fbacd113 — Remove frontend art
    • 68dd40ef — Remove visual prefs dimensions

Actualizacion 2026-05-14:

  • Revision post-cambios aplicada. La supuesta perdida de proyeccion cross-modal queda resuelta como aclaracion de ownership: la proyeccion vive en arts/prefs mediante createActivePrefsDomProjection(...), no en ActiveUix.
  • Documentacion de ecosistema actualizada en src/uix/* y src/arts/*: ownership de prefs/proyeccion/Eidos, naming canonico (langs, events, active-app, storage, connection, session, cache, timer, logger) y marcas historicas en docs de diseno antiguas.
  • Archivos documentales de revision retirados. Las conclusiones vigentes quedan absorbidas por src/uix/active_architecture.md, los README de capa y src/uix/contracts.ts.
  • Limpieza Eidos CSS/runtime aplicada: index.css ya solo importa fonts, generated/base.css, archetypes.css, events.css y recipes activas. Se retiraron CSS historicos de contracts/, themes/base/, tokens/motion.css, tokens/index.css y los token files de componentes.
  • Migracion Eidos recipe tokens aplicada: los aliases --{component}-* viven en EidosConfig.recipes, el tema base los define en src/uix/eidos/lib/recipes/base.ts, y generated/base.css los publica desde npm run generate:eidos-css.
  • Superficie de consulta de recipes aplicada: ActiveEidos.listRecipes() y getRecipeTokens(component) exponen aliases para editores de theme sin inspeccionar CSS ni devolver handles mutables del config interno.
  • La shell /uix ya no carga fuentes remotas; reutiliza las fuentes locales de Eidos (Instrument Sans, Azeret Mono) para que las validaciones Playwright no dependan de red externa.
  • src/uix/contracts.test.ts ahora incluye guardias de regresion para que ActiveUix no vuelva a bootear Soma/Eidos, los providers Soma no usen registerContract/registerPart, y la shell /uix no escriba prefs.theme.
  • Naming langs: constantes runtime y diagnosticos ya usan langs / langs.mono; se corrigieron menciones documentales residuales [lang] y lang.mono.
  • Contrato directo fuera de ActiveUix aclarado: EngineSemantic con visual activo necesita dom o projector y falla con SemaConfigError si faltan; ADom directo solo usa disabledDom cuando el caller lo pide.
  • src/arts/prefs/README.md reescrito al modelo actual schema-based. Se elimina la arquitectura historica de capabilities como guia principal; las dimensiones visuales theme/mode/density pertenecen a ActiveEidos.
  • src/uix/morfo/README.md actualizado: fija translations, commonRef, registro via registerMorfo y soma.runtime(...) como contrato vigente.
  • frontend retirado como artefacto: no queda factory, alias ni ruta activa.
  • Validacion global ejecutada: npm run check, tests focales UIX/arts y npm run build pasan. Solo queda el warning de chunks grandes del build.
  • Eidos general queda cerrado sin tocar componentes: no hay EngineEidos, wrapper Eidos, eidos/engine ni eidos/core/headless; se anade guardia de regresion en contracts.test.ts.
  • recipes queda como RecipeTokenSet plano por decision: subir a tipo estructurado solo cuando exista builder/consumer real que lo necesite.
  • Commits nuevos empujados:
    • 694eb5c5 — Clarify prefs projection contract
    • 223cdf9e — Align sema docs with channel ownership
    • 3dc775f4 — Update UIX architecture notes
    • b1215549 — Fix UIX docs theme and popover dismiss
    • 6da10987 — Prune legacy Eidos CSS runtime
    • d822597f — Generate Eidos recipe tokens from config
    • 65958538 — Expose Eidos recipe token queries
    • 4233be62 — Update UIX continuation notes
    • 2df58074 — Use local fonts in UIX docs
    • 8ad04714 — Refresh UIX architecture docs
    • e2ba371b — Add UIX architecture regression guards
    • 71e05765 — Align langs diagnostic wording
    • 607dfdbb — Clarify direct UIX service contracts
    • 475ac775 — Refresh prefs architecture docs
    • 35958a49 — Clarify morfo translation contract
    • bd37e5dd — Clarify legacy frontend density docs
  • Validado de nuevo:
    • npx vitest run src/uix/contracts.test.ts src/arts/prefs/test/dom-projection.test.ts src/uix/active-uix/active-uix.svelte.test.ts src/uix/eidos/active-eidos.test.ts src/uix/soma/runtime.svelte.test.ts -> 79 tests OK.
    • npx vitest run src/uix/sema/engine.test.ts src/uix/soma/runtime.svelte.test.ts -> 48 tests OK.
    • npx vitest run src/uix/eidos/active-eidos-config.test.ts src/uix/eidos/generated-css.test.ts src/uix/eidos/active-eidos.test.ts src/uix/contracts.test.ts -> 52 tests OK.
    • npm run check -> 0 errores, 0 warnings.
    • npx vitest run src/uix/contracts.test.ts -> 12 tests OK.
    • npm run check tras wording langs -> 0 errores, 0 warnings.
    • Playwright /uix: toggle dark actualiza html[data-theme="base-dark"], html[data-mode="dark"] y mantiene html[data-density="comfortable"]; sin pageerror, sin errores de consola y sin requestfailed.

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.
  • Shells UIX deben pasar modo/densidad visuales a ActiveEidos mediante modeSource/densitySource; no escribir prefs.theme.
  • 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, 0 warnings.

Arquitectura acordada

La regla central queda asi:

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. Ownership DOM P1 cerrado.
    • 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.
  9. frontend retirado; ActiveApp ya no puede declarar un servicio visual shell heredado.
  10. themeDimension/densityDimension retiradas; el catalogo $prefs no ofrece dimensiones visuales UIX.

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. frontend no existe como artefacto activo ni como servicio opt-in. Las preferencias transversales se proyectan desde arts/prefs; las visuales pertenecen a ActiveEidos.
  5. ActiveApp docs: actualizado que langs, dom, format y events son servicios opt-in; no hay servicio visual shell heredado.

Eidos cerrado para modulo general

  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. Cerrado: los tokens per-component de las recipes activas quedan como aliases estables y authorables en EidosConfig.recipes.
  6. Los CSS historicos de contracts/ y themes/base/ quedan retirados del arbol activo. El contrato se publica desde ActiveEidos.getCssContract() / renderContractCss() y el base desde generated/base.css.
  7. tokens/ ya no forma parte del entrypoint estatico. Las recipes CSS consumen los mismos custom properties, pero los valores salen de generated/base.css.
  8. ActiveEidos.listRecipes() y getRecipeTokens(component) exponen los aliases para editores de theme sin leer CSS. El tipado plano de recipes es intencional mientras no haya builder/consumer estructurado.
  9. No reintroducir engine visual separado, carpeta engine, ni wrapper Eidos sin contrato propio.

Pendiente de limpieza

  • Validacion navegador /uix cerrada despues de mover recipe tokens y retirar fuentes remotas: carga sin requestfailed, sin errores de consola y el toggle dark sigue aplicando data-theme, data-mode y estilos visuales.
  • Siguiente foco recomendado: reauditar componentes Eidos option C solo cuando se autorice explicitamente. No mezclar esa fase con runtime ni arquitectura general.
  • Warnings de toast resueltos; npm run check queda en 0 errores / 0 warnings.
  • 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.

Powered by TurnKey Linux.