diff --git a/continue.md b/continue.md
index 32b1e6119..44ea9b6b0 100644
--- a/continue.md
+++ b/continue.md
@@ -81,6 +81,16 @@ Actualizacion 2026-05-16:
`~sium`.
- Ninguna feature nueva entra si solo duplica Zod/Valibot sin consumidor
propio de Active.
+- Soma public surface:
+ - Cerrado: el wrapper publico de Select pasa de
+ `components/select-provider.svelte` a `components/select.svelte`. El
+ runtime interno sigue en `select-provider.svelte.ts`.
+ - Cerrado: `Command`, `Form` y `Table` ya no reexportan motores de `$libs`.
+ Los consumidores deben importar `computeFuzzyScore` desde `$libs/strings`,
+ `createForm` desde `$libs/forms` y `createTable`/tipos desde
+ `$libs/datagrid`.
+ - Guardia nueva en `src/uix/contracts.test.ts`: ningun barrel publico de Soma
+ puede exportar desde `*provider.svelte` ni desde `$libs/*`.
Actualizacion 2026-05-15:
@@ -89,8 +99,8 @@ Actualizacion 2026-05-15:
- 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`.
+ - `computeCommandScore` ya no se reexporta desde Command; 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
@@ -99,7 +109,7 @@ Actualizacion 2026-05-15:
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).
+ `*-provider.svelte.ts`.
- `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
@@ -291,8 +301,8 @@ Actualizacion 2026-05-15:
- `drag-drop-provider.svelte.test.ts` -> 2 tests OK.
- guardia `*-provider.svelte.ts` sin test directo -> `NO_MISSING_PROVIDER_TESTS`.
- 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.
+ -> 0 resultados; Select ya no conserva el wrapper publico con nombre
+ `select-provider.svelte`.
- Commits nuevos empujados:
- `a3bcb66c` — `Refresh UIX audit follow-up docs`
- `25870b4e` — `Expand Soma component coverage`
diff --git a/src/uix/contracts.test.ts b/src/uix/contracts.test.ts
index b954c5bdc..8008948e0 100644
--- a/src/uix/contracts.test.ts
+++ b/src/uix/contracts.test.ts
@@ -315,6 +315,26 @@ describe('UIX layer contracts', () => {
expect(missingExports).toEqual([]);
});
+ it('guards Soma public barrels from provider implementation filenames', () => {
+ const violations = collectPublicSomaComponentDirs()
+ .map((dir) => join(HERE, 'soma', 'components', dir, 'exports.ts'))
+ .filter((file) =>
+ /from ['"][^'"]*provider\.svelte(?:\.ts)?['"]/.test(readFileSync(file, 'utf8'))
+ )
+ .map((file) => file.replace(REPO_ROOT, ''));
+
+ expect(violations).toEqual([]);
+ });
+
+ it('guards Soma public barrels from shared lib facades', () => {
+ const violations = collectPublicSomaComponentDirs()
+ .map((dir) => join(HERE, 'soma', 'components', dir, 'exports.ts'))
+ .filter((file) => /from ['"]\$libs\//.test(readFileSync(file, 'utf8')))
+ .map((file) => file.replace(REPO_ROOT, ''));
+
+ expect(violations).toEqual([]);
+ });
+
it('guards Soma public component modules against Morfo soma scope', () => {
expect(collectPublicSomaComponentDirs()).toEqual(collectMorfoComponentNamesByScope('soma'));
});
diff --git a/src/uix/soma/components/command/exports.ts b/src/uix/soma/components/command/exports.ts
index d7c31854c..8a165a788 100644
--- a/src/uix/soma/components/command/exports.ts
+++ b/src/uix/soma/components/command/exports.ts
@@ -13,8 +13,6 @@ export { default as Empty } from './components/command-empty.svelte';
export { default as Loading } from './components/command-loading.svelte';
export { default as Separator } from './components/command-separator.svelte';
-export { computeFuzzyScore as computeCommandScore } from '$libs/strings';
-
export type {
CommandFilterFn,
CommandApi,
diff --git a/src/uix/soma/components/form/README.md b/src/uix/soma/components/form/README.md
index f9017499f..0cb382668 100644
--- a/src/uix/soma/components/form/README.md
+++ b/src/uix/soma/components/form/README.md
@@ -24,7 +24,7 @@ No single library covers all axes. `soma/Form` is the only one built on **Svelte
```svelte
@@ -330,7 +332,7 @@ The unique columns soma wins: **runes-native**, **UI primitives integrated**, **
```svelte