From f276ef964f4ed6e0ec0b6b224e9b831ca87d8bc0 Mon Sep 17 00:00:00 2001 From: dev Date: Sat, 16 May 2026 04:42:10 +0200 Subject: [PATCH] Guard Sema runtime boundaries --- continue.md | 3 +++ src/uix/contracts.test.ts | 13 +++++++++++++ src/uix/soma/README.md | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/continue.md b/continue.md index 5b2bad9b2..93dad8f2a 100644 --- a/continue.md +++ b/continue.md @@ -114,6 +114,9 @@ Actualizacion 2026-05-16: - Cerrado: eliminado `soma/core/langs.ts`, que era una fachada muerta sobre `src/uix/langs.ts`. El vocabulario `common.*` pertenece a UIX y `ActiveUix` lo registra; Soma solo lo referencia mediante `v.commonRef`. + - Guardia nueva: Sema no puede registrar listeners globales nativos + (`document/window.addEventListener`) ni usar `console.*` en produccion; los + canales deben pasar por servicios inyectados y logger. - Documentacion corregida: README, arquitectura y comentario de `core/soma.svelte.ts` ya no recomiendan que el propio Soma importe desde `$soma/*`. diff --git a/src/uix/contracts.test.ts b/src/uix/contracts.test.ts index 9db123448..c7931a306 100644 --- a/src/uix/contracts.test.ts +++ b/src/uix/contracts.test.ts @@ -489,6 +489,19 @@ describe('UIX layer contracts', () => { expect(() => new EngineSemantic({ visual: false })).not.toThrow(); }); + it('guards Sema production code from direct global listeners and console output', () => { + const violations = listSourceFiles(join(HERE, 'sema')) + .filter((file) => { + const source = stripComments(readFileSync(file, 'utf8')); + return /(?:document|window)\.(?:addEventListener|removeEventListener)\(|console\./.test( + source + ); + }) + .map((file) => file.replace(REPO_ROOT, '')); + + expect(violations).toEqual([]); + }); + it('ActiveEidos is the visual runtime and does not recreate an engine layer', () => { expect(UIX_LAYER_CONTRACTS.activeEidos.publicRuntime).toBe('ActiveEidos'); expect(existsSync(new URL('./eidos/engine', import.meta.url))).toBe(false); diff --git a/src/uix/soma/README.md b/src/uix/soma/README.md index e46a99861..eff253768 100644 --- a/src/uix/soma/README.md +++ b/src/uix/soma/README.md @@ -1010,7 +1010,7 @@ eidos → enhanced visual layer: motion, sound, advanced interactions air/eidos consume soma: -- Importa componentes: `import { Accordion } from '$uix/soma'` +- Importa componentes: `import { Accordion } from '$soma/components'` - Responde a data-\*: `[data-accordion][data-state='open'] { ... }` - Añade props visuales: `size`, `variant`, `color` - Usa mismas translations: `#?common.buttons.close|Close`, `#?components.dialog.trigger|Open dialog`