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.
684 lines
24 KiB
684 lines
24 KiB
# Codex full audit - arquitectura y framework
|
|
|
|
Fecha: 2026-05-27
|
|
Repo: `G:\dev\svelte\vicen`
|
|
Rama observada: `active-uix`
|
|
|
|
## Veredicto ejecutivo
|
|
|
|
La arquitectura principal esta bien orientada: `ActiveApp` compone servicios,
|
|
`ActiveUix` actua como raiz UIX, `Morfo/Soma/Sema/Eidos` mantienen una
|
|
separacion reconocible, y las reglas de alias/runes estan bastante alineadas.
|
|
Hay buenas barreras: `arts` no importa `uix`, `active-uix` no importa Soma ni
|
|
Eidos, Soma no importa Eidos, y `active-app`/`active-uix` pasan sus suites
|
|
propias.
|
|
|
|
Pero el sistema no esta contractualmente sano todavia. El `npm test` global
|
|
falla por `Words`, hay drift real entre docs y codigo, Morfo importa Sema
|
|
aunque su README lo prohibe, algunos Eidos vuelven a exponer `Provider`
|
|
publicamente, y el reporte de componentes declara 34/107 componentes como
|
|
`NEEDS-WORK`. Ademas, la entrada documentada `$active-app/services` no coincide
|
|
con el alias real ni con el codigo vivo, lo que hace que la documentacion de
|
|
composicion sea peligrosa para consumidores.
|
|
|
|
## Alcance revisado
|
|
|
|
Documentacion y contratos revisados:
|
|
|
|
- `src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md`
|
|
- `src/docs/LIBRO_VARIACIONES_Y_EXTENSIONES.md`
|
|
- `src/uix/active_architecture.md`
|
|
- `src/uix/README.md`
|
|
- `src/uix/active-uix/README.md`
|
|
- `src/uix/morfo/README.md`
|
|
- `src/uix/sema/README.md`
|
|
- `src/uix/soma/README.md`
|
|
- `src/uix/soma/SOMA_ARCHITECTURE.md`
|
|
- `src/uix/soma/COMPONENT_GUIDE.md`
|
|
- `src/uix/eidos/README.md`
|
|
- `src/uix/eidos/components/README.md`
|
|
- `web/routes/uix/lib/COMPONENT_AUDIT_GUIDE.md`
|
|
- `web/routes/uix/lib/DEMO_AUTHORING_GUIDE.md`
|
|
- README de `src/arts/*`, con foco especial en `src/arts/active-app`
|
|
- README de `src/libs/*` y `src/svrs/*` relevantes
|
|
- README de `Words` en Morfo/Soma/Sema/Eidos
|
|
|
|
Tambien se revisaron configs, import graph, tests y reportes generados.
|
|
|
|
## Comandos ejecutados
|
|
|
|
- `npm run test` - falla: 1 fichero fallido, 2 tests fallidos en
|
|
`src/uix/contracts.test.ts`.
|
|
- `npx vitest run src/uix/contracts.test.ts` - falla con las mismas 2
|
|
violaciones.
|
|
- `npx vitest run src/arts/active-app/test` - pasa: 8 ficheros, 54 tests.
|
|
- `npx vitest run src/uix/active-uix/active-uix.svelte.test.ts` - pasa:
|
|
1 fichero, 25 tests.
|
|
- `npm run check` - exit 0, pero con 24 warnings Svelte y errores de carga de
|
|
configs dentro de `tmp/lexical`.
|
|
- `npm run build` - exit 0, pero conserva warnings de Svelte/Vite.
|
|
- `npm run component:audit` - exit 0, 107 componentes: 73 PASS,
|
|
34 NEEDS-WORK, 0 BROKEN.
|
|
- `npm run translations:check` - exit 0: 218 refs, 76 catalogos,
|
|
0 errors, 0 warnings.
|
|
- `npm run morfo:vocabulary` - exit 0, pero 107 warnings de vocabulario y
|
|
9 eventos con nombre no canonico.
|
|
- Escaneos estaticos de imports entre `arts`, `active-app`, `active-uix`,
|
|
`morfo`, `soma`, `sema` y `eidos`.
|
|
|
|
## Hallazgos P0
|
|
|
|
### P0-1 - La suite global falla por drift contractual de Words
|
|
|
|
Evidencia:
|
|
|
|
- `src/uix/contracts.test.ts:537` falla en
|
|
`guards hardcoded Soma component data attrs with morfo contracts`.
|
|
- `src/uix/contracts.test.ts:548` falla en
|
|
`guards component translation namespaces as kebab-case`.
|
|
- Atributos Soma no declarados en Morfo:
|
|
- `src/uix/soma/components/words/engine/render.ts`:
|
|
`data-words-find-match`, `data-words-find-active`, `data-words-indent`
|
|
- `src/uix/soma/components/words/engine/serialize-html.ts`:
|
|
`data-language`
|
|
- `src/uix/soma/components/words/words-provider.svelte.ts`:
|
|
`data-words-heading-picker`, `data-words-toolbar-family`,
|
|
`data-words-toolbar-family-panel`, `data-words-code-language-picker`,
|
|
`data-words-code-language-panel`
|
|
- Claves i18n no kebab-case:
|
|
- `components.words.bubbleMenu`
|
|
- `components.words.slashMenu`
|
|
- `components.words.linkEditor`
|
|
- `components.words.findReplace`
|
|
- Las rutas aparecen en `src/uix/morfo/components/words.ts:14-17`,
|
|
`:390`, `:413`, `:476`, `:498`, y en
|
|
`src/uix/soma/components/words/words-provider.svelte.ts:1715`,
|
|
`:1804`, `:2075`, `:2178`.
|
|
|
|
Impacto:
|
|
|
|
Morfo deja de ser la fuente de verdad para el DOM y para las rutas de texto.
|
|
Eso rompe el modelo declarado en `src/uix/README.md`: Morfo declara,
|
|
Soma transcribe, Sema proyecta, Eidos lee. Tambien bloquea CI porque
|
|
`npm run test` queda rojo.
|
|
|
|
Recomendacion:
|
|
|
|
1. Declarar esos `data-*` en `src/uix/morfo/components/words.ts` si son parte
|
|
publica estable, o retirarlos/renombrarlos en Soma si son internos.
|
|
2. Normalizar las rutas i18n a kebab-case, por ejemplo
|
|
`components.words.bubble-menu`, y sincronizar catalogos.
|
|
3. Revisar el README de Words: hoy afirma que esas claves fueron normalizadas
|
|
a camelCase, pero el contrato actual exige kebab-case.
|
|
|
|
## Hallazgos P1
|
|
|
|
### P1-1 - Morfo importa Sema aunque su contrato lo prohibe
|
|
|
|
Evidencia:
|
|
|
|
- `src/uix/morfo/README.md:824` dice que Morfo es TypeScript declarativo puro,
|
|
sin imports de `$uix/sema`, `$adom` ni `$libs/reactive`.
|
|
- Imports reales:
|
|
- `src/uix/morfo/compile.ts:48-49` importa `../sema/durations` y
|
|
`../sema/types`.
|
|
- `src/uix/morfo/types.ts:39-41` importa `../sema/types`,
|
|
`../sema/channels` y `../sema/durations`.
|
|
- `src/uix/morfo/selectors.ts:34` importa `../sema/types`.
|
|
- `src/uix/morfo/schema.ts:31-33` importa `$sium`.
|
|
|
|
Impacto:
|
|
|
|
La capa declarativa queda acoplada a la capa perceptiva. Si Sema cambia sus
|
|
tipos/canales/duraciones, Morfo cambia con ella. Eso invierte parte del flujo
|
|
arquitectonico: Morfo deberia declarar el lenguaje que Sema consume, no
|
|
depender de Sema para poder describirlo.
|
|
|
|
Recomendacion:
|
|
|
|
Mover los tipos compartidos a un contrato neutro, por ejemplo
|
|
`src/uix/contracts` o un submodulo `morfo/semantic-contracts.ts`. Sema puede
|
|
implementar esos contratos, pero Morfo no deberia importar desde Sema.
|
|
Revisar si `$sium` se acepta como validador puro o si el README debe afinar
|
|
la regla.
|
|
|
|
### P1-2 - Eidos vuelve a exponer `Provider` publicamente en 6 componentes
|
|
|
|
Evidencia:
|
|
|
|
- `src/uix/eidos/components/README.md:21-27` prohibe
|
|
`<X.Provider>` y `Provider` publico.
|
|
- `src/uix/eidos/components/README.md:40` exige asignacion explicita,
|
|
no `Object.assign`.
|
|
- Violaciones:
|
|
- `src/uix/eidos/components/announce/index.ts:12`
|
|
- `src/uix/eidos/components/clipboard/index.ts:13`
|
|
- `src/uix/eidos/components/feed/index.ts:19`
|
|
- `src/uix/eidos/components/drag-drop/index.ts:15`
|
|
- `src/uix/eidos/components/tree-grid/index.ts:53`
|
|
- `src/uix/eidos/components/tree-view/index.ts:53`
|
|
|
|
Impacto:
|
|
|
|
La API publica vuelve a tener dos formas mentales: root visual y Provider.
|
|
Eso contradice la "disciplined option C" y perpetua el split retirado
|
|
`flat vs Provider compound`.
|
|
|
|
Recomendacion:
|
|
|
|
Eliminar `.Provider` de los namespaces publicos. El root visual debe ser el
|
|
provider visual si corresponde, y las partes adjuntas deben ser solo las
|
|
partes publicas esperadas (`Trigger`, `Content`, `Item`, etc.).
|
|
|
|
### P1-3 - La entrada documentada `$active-app/services` no coincide con el codigo
|
|
|
|
Evidencia:
|
|
|
|
- `src/arts/active-app/README.md:57` documenta `$active-app/services` como
|
|
path de service factories.
|
|
- `src/arts/active-app/index.ts:8` repite esa promesa.
|
|
- `src/arts/active-app/README.md:106-107` dice que
|
|
`service-factories/` se exporta desde `$active-app/services`.
|
|
- Config real:
|
|
- `svelte.config.js:19` y `vite.config.ts:13` solo definen
|
|
`$active-app -> src/arts/active-app`.
|
|
- Por tanto `$active-app/services` resuelve a
|
|
`src/arts/active-app/services.ts`, que es el contrato de schema, no las
|
|
fabricas.
|
|
- Codigo vivo:
|
|
- `src/uix/active-uix/services.ts:24` importa desde
|
|
`$active-app/service-factories`.
|
|
- `src/arts/README.md:148` tambien usa `$active-app/service-factories`.
|
|
- Prueba directa:
|
|
- Importar `defineActiveLangs` desde `./src/arts/active-app/services.ts`
|
|
lanza `SyntaxError: ... does not provide an export named
|
|
'defineActiveLangs'`.
|
|
|
|
Impacto:
|
|
|
|
La documentacion guia al consumidor a un import path que no funciona. Es una
|
|
violacion fuerte de API publica, aunque no rompe build porque muchos ejemplos
|
|
estan dentro de strings de documentacion.
|
|
|
|
Recomendacion:
|
|
|
|
Elegir una sola direccion:
|
|
|
|
- O se corrige toda la doc a `$active-app/service-factories`.
|
|
- O se crea un alias real y estable `$active-app/services` hacia
|
|
`src/arts/active-app/service-factories`, y se mueve el contrato actual
|
|
`services.ts` a otro nombre (`schema.ts`, `contracts.ts`, etc.).
|
|
|
|
Despues, anadir un test que compile los snippets publicos o al menos valide
|
|
los import paths documentados.
|
|
|
|
### P1-4 - 34 de 107 componentes quedan en NEEDS-WORK
|
|
|
|
Evidencia:
|
|
|
|
`npm run component:audit` genero `tmp/component-audit.md`:
|
|
|
|
- Total: 107 componentes.
|
|
- PASS: 73.
|
|
- NEEDS-WORK: 34.
|
|
- BROKEN: 0.
|
|
|
|
Componentes `NEEDS-WORK`:
|
|
|
|
`alert-dialog`, `announce`, `avatar-group`, `badge`, `button`, `card`,
|
|
`clipboard`, `command`, `drag-drop`, `feed`, `format-date`, `format-number`,
|
|
`grid-list`, `image`, `link-preview`, `listbox`, `menubar`,
|
|
`navigation-menu`, `password-field`, `range-calendar`, `relative-time`,
|
|
`s-text`, `s-text-virtual-list`, `search-field`, `skeleton`, `spinner`,
|
|
`table`, `textarea`, `time-range-field`, `trans`, `tree-grid`, `tree-view`,
|
|
`virtual-grid`, `virtual-list`.
|
|
|
|
Ejemplos de errores:
|
|
|
|
- `alert-dialog`: falta selector root `[data-alert-dialog]`.
|
|
- Muchos Eidos: falta `README.md`.
|
|
- Varios interactivos: falta `:focus-visible`.
|
|
- Varias demos: falta `somaSnippet`.
|
|
- `table`, `textarea`, `tree-grid`: referencias a `--color-*` no declaradas.
|
|
- Interactivos sin URL APG declarada.
|
|
|
|
Impacto:
|
|
|
|
El framework no esta en estado de completitud auditada. La auditoria automatica
|
|
no marca `BROKEN`, pero `NEEDS-WORK` en 34 componentes es suficiente para
|
|
considerar incompleta la implementacion de la arquitectura de componentes.
|
|
|
|
Recomendacion:
|
|
|
|
Convertir el reporte en backlog cerrado por severidad: primero selectores
|
|
root/contrato DOM, luego foco/a11y, luego snippets/demo, luego READMEs. Si el
|
|
estado esperado del repo es "todo auditado", hacer que `component:audit` falle
|
|
cuando haya `NEEDS-WORK`.
|
|
|
|
### P1-5 - Drift doctrinal entre docs: 7 familias vs 8 familias Sema
|
|
|
|
Evidencia:
|
|
|
|
- `src/docs/GUIA_IMPLEMENTACION_SEMAUIX.md:15`: "7 familias. Sin
|
|
excepciones."
|
|
- `src/uix/active_architecture.md:329`: enumera 7 familias.
|
|
- `src/docs/LIBRO_VARIACIONES_Y_EXTENSIONES.md:673`: dice 8 familias,
|
|
incluyendo `delegate`.
|
|
- `src/uix/sema/README.md:576` y `:636-638` documentan `delegate`.
|
|
|
|
Impacto:
|
|
|
|
Los autores de componentes no tienen una fuente unica para saber si
|
|
`delegate` es canonico o extension experimental. Esto afecta Morfo,
|
|
validadores, `morfo:vocabulary`, packs Sema y naming de eventos.
|
|
|
|
Recomendacion:
|
|
|
|
Consolidar la doctrina: si `delegate` es vigente, actualizar la guia base y
|
|
`active_architecture`. Si es extension, marcarlo como extension con gating y
|
|
validacion explicita.
|
|
|
|
### P1-6 - `npm run check` sale verde con ruido que deberia limpiarse
|
|
|
|
Evidencia:
|
|
|
|
`npm run check` devuelve exit 0, pero reporta:
|
|
|
|
- 24 warnings Svelte en 7 ficheros.
|
|
- Warnings a11y por elementos con handlers de puntero sin rol.
|
|
- Variables enlazadas que se actualizan sin `$state(...)`.
|
|
- `href="#"` invalido en demo de `navigation-menu`.
|
|
- `table` demo captura solo valores iniciales de `selectionMode` y
|
|
`multiSort`.
|
|
- `trans` demo tiene cierre implicito de `<span>`.
|
|
- Errores de carga de config dentro de `tmp/lexical` por dependencias no
|
|
instaladas (`svelte-preprocess`, `@sveltejs/adapter-auto`).
|
|
|
|
Impacto:
|
|
|
|
La senal de `check` queda degradada: el comando dice "0 errors", pero imprime
|
|
errores de carga externos y warnings que apuntan a bugs reales de demo.
|
|
|
|
Recomendacion:
|
|
|
|
Mover `tmp/lexical` fuera del workspace escaneado o configurar exclusion real
|
|
para svelte-check. Corregir warnings de rutas UIX y demos. Para CI, definir si
|
|
warnings Svelte deben fallar.
|
|
|
|
### P1-7 - Documentacion de estado obsoleta en `active_architecture`
|
|
|
|
Evidencia:
|
|
|
|
`src/uix/active_architecture.md` contiene un "Estado actual (2026-05-17)" que
|
|
presenta partes como pendientes o cerradas con conteos historicos, mientras
|
|
`src/docs/LIBRO_VARIACIONES_Y_EXTENSIONES.md` documenta cambios posteriores
|
|
del 2026-05-27: persistencia, `a11ySemantic`, familias permitidas y patrones
|
|
polimorficos.
|
|
|
|
Impacto:
|
|
|
|
El documento que deberia orientar la arquitectura activa mezcla estado antiguo
|
|
con reglas vigentes. Esto multiplica decisiones contradictorias en capas
|
|
sensibles como Sema y Eidos.
|
|
|
|
Recomendacion:
|
|
|
|
Separar "historial" de "contrato vigente". El contrato vigente debe decir en
|
|
una pagina corta que docs son canonicos y cuales son libro/historia.
|
|
|
|
## Hallazgos P2
|
|
|
|
### P2-1 - `morfo:vocabulary` produce demasiado warning estructural
|
|
|
|
Evidencia:
|
|
|
|
`npm run morfo:vocabulary` reporta:
|
|
|
|
- 107 warnings de enums `data-*` divergentes.
|
|
- 9 eventos de `words` que no siguen la forma `{family}-{verb}[-{variant}]`:
|
|
`words.commit-content`, `words.commit-format`, `words.commit-link`,
|
|
`words.commit-unlink`, `words.commit-slash-command`, `words.commit-check`,
|
|
`words.commit-history`, `words.commit-clear`,
|
|
`words.signal-invalid-input`.
|
|
|
|
Impacto:
|
|
|
|
El comando no distingue bien entre vocabularios legitimamente nuevos y drift
|
|
real. Al ser solo warning, se acumula ruido y el contrato pierde capacidad de
|
|
bloquear regresiones.
|
|
|
|
Recomendacion:
|
|
|
|
Promover vocabularios recurrentes a `CANONICAL_VOCABULARIES` o marcarlos como
|
|
extension aceptada con razon. Separar warnings esperados de violaciones reales.
|
|
|
|
### P2-2 - `arts` tiene excepciones de dependencia que contradicen la regla amplia
|
|
|
|
Evidencia de import graph productivo entre artes, excluyendo `active-app`:
|
|
|
|
- `src/arts/auth/client.ts -> $http`
|
|
- `src/arts/bus/engine-bus.ts -> $logger`
|
|
- `src/arts/perm/types.ts -> $http`
|
|
- `src/arts/prefs/dom-projection.ts -> $adom`
|
|
- `src/arts/session/bus-helpers.ts -> $bus`
|
|
- `src/arts/session/http-integration.ts -> $http`
|
|
- `src/arts/session/types.ts -> $storage`
|
|
- `src/arts/sium/engine-resolver.ts -> $langs`
|
|
- `src/arts/sium/engine-sium.ts -> $langs`
|
|
|
|
Muchas estan documentadas y parecen intencionales. El problema es que
|
|
`src/arts/active-app/README.md` formula una regla mas dura: los arts no deben
|
|
conocer sibling arts; ese conocimiento pertenece a `active-app`.
|
|
|
|
Impacto:
|
|
|
|
La arquitectura real ya tiene una lista de excepciones. Si no se formalizan,
|
|
las futuras dependencias cruzadas se justificaran por precedente.
|
|
|
|
Recomendacion:
|
|
|
|
Crear una matriz permitida de dependencias entre arts. Diferenciar:
|
|
|
|
- Contratos puros aceptados (`$libs/*`).
|
|
- Infraestructuras core aceptadas (`$logger`, `$bus`, `$timer`).
|
|
- Bridges opcionales aceptados (`prefs/dom-projection -> adom`).
|
|
- Dependencias prohibidas.
|
|
|
|
### P2-3 - `active-app/service-builder.ts` importa Svelte en un `.ts`
|
|
|
|
Evidencia:
|
|
|
|
`src/arts/active-app/service-builder.ts` importa `untrack` desde `svelte`.
|
|
El comentario explica que se usa para construir lazy services dentro de scopes
|
|
reactivos sin capturar mutaciones.
|
|
|
|
Impacto:
|
|
|
|
Probablemente es una decision practica correcta, pero hace que el core builder
|
|
de `active-app` tenga dependencia Svelte aunque no sea `.svelte.ts`. Si la meta
|
|
es que solo `Active*` reactivos carguen Svelte, esto debe documentarse como
|
|
excepcion.
|
|
|
|
Recomendacion:
|
|
|
|
Mantener si es necesario, pero documentarlo en `active-app` como parte del
|
|
contrato del builder. Alternativa: aislar el `untrack` en un adaptador Svelte
|
|
inyectable si se quiere preservar un builder completamente puro.
|
|
|
|
### P2-4 - `src/arts/README.md` promete `sideEffects`, pero `package.json` no lo tiene
|
|
|
|
Evidencia:
|
|
|
|
- `src/arts/README.md:267` dice que `package.json` declara
|
|
`"sideEffects": ["**/*.css", "**/*.svelte"]`.
|
|
- `package.json` no contiene `sideEffects`.
|
|
|
|
Impacto:
|
|
|
|
La politica de tree-shaking y preservacion de CSS/Svelte no esta codificada.
|
|
En un paquete privado puede no doler hoy, pero contradice el documento de
|
|
bundle policy.
|
|
|
|
Recomendacion:
|
|
|
|
Anadir el campo si la politica sigue vigente, o retirar/ajustar la regla del
|
|
README.
|
|
|
|
### P2-5 - Documentacion stale en `format/currency`
|
|
|
|
Evidencia:
|
|
|
|
`src/arts/format/currency/README.md` usa `$formats/currency` y describe
|
|
`src/arts/formats/currency/`, pero el alias real es `$format` y la ruta real
|
|
es `src/arts/format/currency`.
|
|
|
|
Impacto:
|
|
|
|
Consumidores que copien esos snippets importaran desde un alias inexistente.
|
|
|
|
Recomendacion:
|
|
|
|
Corregir el README y anadir un chequeo simple de aliases en snippets de
|
|
documentacion publica.
|
|
|
|
### P2-6 - Build pasa, pero hay senales de bundle/ruido a vigilar
|
|
|
|
Evidencia:
|
|
|
|
`npm run build` pasa, pero:
|
|
|
|
- Repite warnings de Svelte/Vite ya vistos en `check`.
|
|
- Un asset CSS de cliente aparece alrededor de 824 kB sin gzip.
|
|
- Rollup avisa que un comentario `/* @__PURE__ */` en
|
|
`src/uix/soma/components/command/command-provider.svelte.ts` esta en una
|
|
posicion que no puede interpretar y sera removido.
|
|
|
|
Impacto:
|
|
|
|
No bloquea, pero indica que el build no esta limpio y que faltan budgets o
|
|
umbrales para assets grandes.
|
|
|
|
Recomendacion:
|
|
|
|
Registrar budgets de bundle y limpiar warnings del build. Revisar el origen
|
|
del CSS grande y el comentario pure en `command-provider`.
|
|
|
|
### P2-7 - Demos UIX contienen bugs de reactividad/a11y
|
|
|
|
Evidencia:
|
|
|
|
`npm run check` y `npm run build` reportan:
|
|
|
|
- `web/routes/uix/components/navigation-menu/+page.svelte`: enlaces
|
|
`href="#"`.
|
|
- `web/routes/uix/components/table/+page.svelte:104`: `selectionMode` y
|
|
`multiSort` capturados solo al inicializar.
|
|
- `web/routes/uix/components/trans/+page.svelte:375`: cierre implicito de
|
|
`span`.
|
|
- Rutas de demo genericas en `web/routes/demos/*.svelte`: handlers de puntero
|
|
sin rol y refs no reactivas.
|
|
|
|
Impacto:
|
|
|
|
Aunque sean demos, son la superficie de validacion del framework. Bugs ahi
|
|
pueden ocultar errores del componente o ensenar patrones incorrectos.
|
|
|
|
Recomendacion:
|
|
|
|
Limpiar las demos antes de usarlas como material de contrato o referencia.
|
|
|
|
## Hallazgos P3
|
|
|
|
### P3-1 - Muchos README de Eidos faltan por componente
|
|
|
|
El reporte de componentes y el inventario indican que varios directorios
|
|
Eidos no tienen `README.md`: `announce`, `badge`, `button`, `card`,
|
|
`clipboard`, `command`, `drag-drop`, `feed`, `grid-list`, `image`,
|
|
`link-preview`, `listbox`, `menubar`, `navigation-menu`, `password-field`,
|
|
`range-calendar`, `s-text`, `s-text-virtual-list`, `skeleton`, `spinner`,
|
|
`table`, `textarea`, `time-range-field`, `tree-grid`, `tree-view`,
|
|
`virtual-grid`, `virtual-list`, entre otros.
|
|
|
|
Impacto:
|
|
|
|
Reduce trazabilidad por modulo, especialmente porque el usuario pidio auditar
|
|
README por modulo y porque la guia de componente exige documentar contrato,
|
|
comparativa y decisiones.
|
|
|
|
### P3-2 - AGENTS.md esta parcialmente viejo frente a aliases actuales
|
|
|
|
AGENTS.md menciona alias historicos (`@/ling`, `@/logr`, `@/glob`, `@/actx`)
|
|
como criticos, pero los configs actuales exponen sobre todo aliases de
|
|
`arts`, `libs`, `svrs` y `uix`. La instruccion general de mantener
|
|
`svelte.config.js` y `vite.config.ts` sincronizados si se cumple; lo viejo es
|
|
el inventario concreto.
|
|
|
|
Impacto:
|
|
|
|
Bajo para runtime, medio para agentes/humanos que usen AGENTS.md como mapa.
|
|
|
|
## Evaluacion por capas
|
|
|
|
### ActiveApp
|
|
|
|
Estado general: solido como composition root, con una deuda de API docs.
|
|
|
|
Lo que esta bien:
|
|
|
|
- Core: `logger`, `bus`, `timers`, `orca`, `prefs`.
|
|
- Servicios opt-in con schema y topological builder.
|
|
- Presets de orca separados.
|
|
- Dispose en orden razonable.
|
|
- Suite propia verde: 54 tests.
|
|
|
|
Riesgos:
|
|
|
|
- Path publico de service factories documentado como `$active-app/services`,
|
|
pero codigo real usa `$active-app/service-factories`.
|
|
- `service-builder.ts` depende de `svelte/untrack`; probablemente justificado,
|
|
pero debe declararse como excepcion de core.
|
|
- La regla "arts no conocen siblings" necesita matriz de excepciones.
|
|
|
|
### ActiveUix
|
|
|
|
Estado general: bueno y alineado con la intencion de asentarse sobre
|
|
`ActiveApp`.
|
|
|
|
Lo que esta bien:
|
|
|
|
- `createActiveUix(...)` standalone compone servicios locales.
|
|
- `attachActiveUix(app)` exige `langs` y `dom` y no compensa servicios
|
|
faltantes.
|
|
- No importa Soma ni Eidos.
|
|
- `defineUixServices(...)` crea la slice de servicios necesaria para
|
|
`ActiveApp`.
|
|
- Suite propia verde: 25 tests.
|
|
|
|
Riesgos:
|
|
|
|
- Depende del problema de naming de service factories en `active-app`.
|
|
- El contrato de `events` esta bien nombrado, pero la doctrina Sema aun esta
|
|
en drift.
|
|
|
|
### Arts
|
|
|
|
Estado general: arquitectura razonable, con excepciones de dependencia que
|
|
necesitan formalizacion.
|
|
|
|
Lo que esta bien:
|
|
|
|
- Import graph: `arts -> uix` es 0.
|
|
- Muchos modulos separan engine puro y active wrapper.
|
|
- `auth/session/perm/cache/http/storage` tienen docs de seguridad bastante
|
|
claras.
|
|
- `active-app` centraliza presets y composicion.
|
|
|
|
Riesgos:
|
|
|
|
- Algunas dependencias sibling son utiles pero no estan expresadas como matriz
|
|
permitida.
|
|
- Bundle policy de `sideEffects` no esta codificada.
|
|
- `format/currency` README tiene alias/ruta vieja.
|
|
|
|
### Morfo
|
|
|
|
Estado general: el concepto es correcto, la implementacion viola la pureza.
|
|
|
|
Lo que esta bien:
|
|
|
|
- Define contratos DOM/eventos/partes con bastante cobertura.
|
|
- `translations:check` esta verde.
|
|
- `semaSelector` existe y los packs Sema lo usan en general.
|
|
|
|
Riesgos:
|
|
|
|
- Importa tipos de Sema y `$sium`.
|
|
- `Words` tiene drift actual contra los tests de contrato.
|
|
- `morfo:vocabulary` produce demasiado ruido para ser una barrera fuerte.
|
|
|
|
### Soma
|
|
|
|
Estado general: el headless runtime mantiene buena separacion de Eidos, pero
|
|
Words se salio del contrato Morfo.
|
|
|
|
Lo que esta bien:
|
|
|
|
- No se detecto import de Eidos desde Soma.
|
|
- No se detecto import directo de `$libs/dom` desde Soma/Eidos; se usa `$adom`.
|
|
- Los tests globales pasan en casi todo salvo el contrato de Words.
|
|
|
|
Riesgos:
|
|
|
|
- Hardcoded `data-*` en Words no declarados en Morfo.
|
|
- Warnings en demos de Table apuntan a reactividad incorrecta.
|
|
|
|
### Sema
|
|
|
|
Estado general: potente, pero la doctrina no esta consolidada.
|
|
|
|
Lo que esta bien:
|
|
|
|
- Packs usan `semaSelector` en vez de selectores inventados.
|
|
- Visual/Sound/Haptic estan modelados como canales.
|
|
- `defineEngineSemantic` encaja con `ActiveUix.events`.
|
|
|
|
Riesgos:
|
|
|
|
- 7 vs 8 familias no resuelto.
|
|
- Warnings de nombres de eventos `Words`.
|
|
- Morfo depende de Sema para tipos.
|
|
|
|
### Eidos
|
|
|
|
Estado general: wrapper visual bien encaminado, pero con regresiones en API y
|
|
completitud.
|
|
|
|
Lo que esta bien:
|
|
|
|
- No se detecto `Object.assign`.
|
|
- No se detecto Eidos components importando `ActiveUix` directamente.
|
|
- `ActiveEidos` separa tema/modo/densidad de `prefs`.
|
|
|
|
Riesgos:
|
|
|
|
- 6 componentes exponen `.Provider`.
|
|
- 34 componentes NEEDS-WORK afectan Eidos/demos/contratos.
|
|
- Muchos README por componente faltan.
|
|
|
|
## Checks positivos importantes
|
|
|
|
- `svelte.config.js` y `vite.config.ts` tienen aliases sincronizados.
|
|
- Runes mode esta forzado por `dynamicCompileOptions`.
|
|
- `npm run build` pasa.
|
|
- `npm run check` no reporta errores TypeScript/Svelte fatales.
|
|
- `translations:check` pasa sin warnings.
|
|
- `active-app` y `active-uix` pasan tests focalizados.
|
|
- No hay `arts -> uix`.
|
|
- No se encontro `Soma -> Eidos`.
|
|
- No se encontro `Eidos components -> ActiveUix`.
|
|
- No se encontro `ActiveUix -> Soma/Eidos`.
|
|
- No se encontro `$libs/dom` directo desde Soma/Eidos.
|
|
|
|
## Orden recomendado de reparacion
|
|
|
|
1. Corregir `Words` hasta que `src/uix/contracts.test.ts` pase.
|
|
2. Resolver el path publico de service factories de `active-app`.
|
|
3. Sacar imports de Sema desde Morfo.
|
|
4. Eliminar `.Provider` publico en Eidos.
|
|
5. Cerrar los 34 `NEEDS-WORK` del component audit por prioridad.
|
|
6. Consolidar docs canonicas: familias Sema, estado actual, Words i18n,
|
|
`active-app` service path.
|
|
7. Limpiar `npm run check` y `npm run build` de warnings conocidos.
|
|
8. Formalizar matriz de dependencias permitidas entre `arts`.
|
|
9. Codificar `sideEffects` o retirar esa politica del README.
|
|
10. Anadir tests de snippets/import paths publicos para que la doc no pueda
|
|
prometer alias rotos.
|
|
|
|
## Cierre
|
|
|
|
La arquitectura no necesita una reescritura: necesita cerrar contratos. Las
|
|
piezas principales estan bien ubicadas, pero ahora mismo los tests y la
|
|
documentacion muestran que algunas capas estan adelantandose unas a otras.
|
|
El mayor riesgo no es que falte funcionalidad; es que el contrato escrito,
|
|
el contrato testeado y el codigo runtime no siempre son el mismo contrato.
|