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/docs/process/CONTINUE-sound-engine.md

4.4 KiB

CONTINUE — motor de sonido + reproductor

Kickoff para la sesión siguiente: "Lee docs/process/CONTINUE-sound-engine.md y sigue por donde toque." Fecha: 2026-07-30 · Rama alpha-0.1-sec-dom.

Handoff corto. La verdad detallada vive en los dos planes; esto solo dice en qué punto está cada cosa y qué trampas evitar.


Estado

Iniciativa Estado
PLAN-sound-engine.md ✅ COMPLETA — F0…F4 hechas. Solo queda F5 (desbloquear el reproductor), que es decisión de sesión
PLAN-audio-player.md ⏸️ APARCADO — D-AP.1…D-AP.12 sin firmar. Su cabecera lleva 5 correcciones pendientes de incorporar antes de presentar nada

Qué se construyó

$sound / EngineSound (src/arts/sound/) — el runtime Web Audio extraído de sema/chans/sound.ts, que tenía ~63% de máquina mezclada con doctrina. Un AudioContext por documento, síntesis de earcon, samples con caché y fallback, desbloqueo por gesto, autoSuspend opt-in y aviso al segundo contexto vivo.

  • SoundChannel: 407 → 136 líneas, solo doctrina (gate de prepare, política de reducción, «el canal resuelve el NIVEL, el motor aplica la ganancia»).
  • Sema no importa el art: lo recibe por puerto inyectado.
  • uix.sound en ambos modos de arranque, con ownsSound (idioma ya shipped: ownsMotion / ownsScene), fila en la tabla ejecutable contracts.ts, y defineEngineSound() para attach.

Gate al cerrar: 17 suites / 198 tests · check en la baseline exacta (73 errores, 0 propios) · sound.test.ts verde sin tocar un solo assert.

Lo que NO está verificado (y hay que verificar)

  1. La invariante de contexto único en un navegador real. Hoy ninguna página enchufa soundEngine a su propio EngineSemantic — el estudio de sema incluido (temas/sema/_lib/audition.ts:35 monta el suyo con sound: true), así que esa página abre un segundo contexto. Con el aviso nuevo ya lo dirá por consola: abrir /temas/sema y mirar el warn es la primera comprobación de mañana. Arreglo natural: pasarle soundEngine: uix.sound.
  2. La escucha comparativa fina. El usuario confirmó que suena, pero no se hizo un A/B earcon a earcon contra el comportamiento previo.

Trampas de este repo (verificadas a base de perder tiempo)

  • NO arrancar un dev server si el del usuario está vivo. npm run dev es vite dev --force: reescribe node_modules/.vite/deps por debajo del que corre → dos runtimes de Svelte → la página deja de hidratar (lifecycle_outside_component) → parece regresión de audio y no lo es. Pasó el 2026-07-30. Verificar con tests deterministas (dobles de AudioContext), no levantando servidores. Recuperación (PowerShell): parar node → Remove-Item -Recurse -Force node_modules/.vite/deps → npm run dev → Ctrl+Shift+R.
  • El panel del navegador no pinta en este entorno (viewport 0×0); javascript_tool sí funciona.
  • Filtrar npm run check con cuidado: las rutas llevan \\ doble, así que un patrón sema.chans NO casa con sema\\chans y da falsos «0 errores propios». Ocurrió.
  • El árbol está compartido con otras sesiones (palabras, menubar, dropdown-menu, blocks/cta, alpha…). git reset -q + add solo lo propio, siempre en un bloque atómico.

Ajenos y preexistentes detectados (NO tocados)

  • contracts.test.ts 3 rojos: aura, menubar, radio-group.
  • docs:check 1 error: eidos/components/callout/README.md:23 dice «8 roles», son 9.
  • Board.svelte:42 warn binding_property_non_reactive — inofensivo ahí (lectura imperativa); se arregla con let els = $state({}).
  • temas/sema/_lib/audition.ts tiene 2 errores de tipos preexistentes.

Siguientes pasos posibles

  1. F5 — desbloquear el reproductor y reescribir su D-AP.11 contra el art ya existente (su premisa —«no hay motor»— era falsa).
  2. Cerrar la invariante: pasar soundEngine al EngineSemantic del estudio y comprobar que el warn desaparece.
  3. Retomar el reproductor por su F0: firmar D-AP.* con las 5 correcciones de la cabecera ya incorporadas (segmentos, G-2 bloqueante, ducking…).

No registrado en next-features.md a propósito: ese fichero está modificado por otra sesión y no se toca desde aquí.

Powered by TurnKey Linux.