4.4 KiB
CONTINUE — motor de sonido + reproductor
Kickoff para la sesión siguiente: "Lee
docs/process/CONTINUE-sound-engine.mdy sigue por donde toque." Fecha: 2026-07-30 · Ramaalpha-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 deprepare, 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.sounden ambos modos de arranque, conownsSound(idioma ya shipped:ownsMotion/ownsScene), fila en la tabla ejecutablecontracts.ts, ydefineEngineSound()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)
- La invariante de contexto único en un navegador real. Hoy ninguna
página enchufa
soundEnginea su propioEngineSemantic— el estudio de sema incluido (temas/sema/_lib/audition.ts:35monta el suyo consound: true), así que esa página abre un segundo contexto. Con el aviso nuevo ya lo dirá por consola: abrir/temas/semay mirar el warn es la primera comprobación de mañana. Arreglo natural: pasarlesoundEngine: uix.sound. - 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 devesvite dev --force: reescribenode_modules/.vite/depspor 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 deAudioContext), 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_toolsí funciona. - Filtrar
npm run checkcon cuidado: las rutas llevan\\doble, así que un patrónsema.chansNO casa consema\\chansy da falsos «0 errores propios». Ocurrió. - El árbol está compartido con otras sesiones (palabras, menubar,
dropdown-menu, blocks/cta, alpha…).
git reset -q+addsolo lo propio, siempre en un bloque atómico.
Ajenos y preexistentes detectados (NO tocados)
contracts.test.ts3 rojos:aura,menubar,radio-group.docs:check1 error:eidos/components/callout/README.md:23dice «8 roles», son 9.Board.svelte:42warnbinding_property_non_reactive— inofensivo ahí (lectura imperativa); se arregla conlet els = $state({}).temas/sema/_lib/audition.tstiene 2 errores de tipos preexistentes.
Siguientes pasos posibles
- F5 — desbloquear el reproductor y reescribir su D-AP.11 contra el art ya existente (su premisa —«no hay motor»— era falsa).
- Cerrar la invariante: pasar
soundEnginealEngineSemanticdel estudio y comprobar que el warn desaparece. - 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í.