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

8.6 KiB

CONTINUE — el hilo del audio: REDISEÑO en curso ($sound = orquestador)

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

Lo que pasó el 2026-07-31 — giro de raíz

Se presentó el gate del reproductor (D-AP.1…13) y el usuario lo rechazó de raíz: el sistema de sonido es un frankenstein — nació de los diseños de otros módulos (sema, media-player) y se parchea en función de lo que había, en vez de partir de su función: orquestador de TODOS los aspectos del sonido, como motion / timers / scene. Los consumidores se adaptan al servicio, no al revés. El rediseño se hizo clean-room y su gate quedó FIRMADO el mismo día (aprobación del plan + D-SR.4/D-SR.7 explícitas).

Estado

Iniciativa Estado
PLAN-sound-engine.md ✅ CERRADA (histórica). Su §16.1 («la voz es del art») queda REVOCADA por el rediseño
PLAN-sound-redesign.md ✅ COMPLETA (las dos entregas, 2026-07-31) — sin commitear. E1: F0–F2 + escucha A/B del usuario («suena igual»). E2: F3 (media citizenship: sound.media(el) provee el transporte con la forma del puerto MediaProvider + foco + duckUiWhileContent + visibilidad content-aware + attach() opt-in) · F4 (MediaSession de la fuente activa) · F5 (factoría con EngineSoundPolicyOptions; contracts.ts y estudio sin tocar, declarado). AUDITADA (§9 del plan): AU-1…AU-9 resueltas — duck ahora PERSISTENTE (estado derivado, holder = ducker más reciente; test nacido en rojo) · guards post-dispose · re-registro idempotente por elemento · drift guard soma↔art · bundle medido (16,2 KB min / 5,6 KB gz) · 3 guards vistos fallar por mutación. 28 suites / 305 tests verdes · check 73 = baseline, 0 propios · docs:check 0 · prettier limpio en lo propio. Pendientes que exigen una página consumidora (llegan con el re-plan del player): medición Chrome del escenario mixto · prueba manual de teclas de medios
PLAN-audio-player.md 🗄️ ARCHIVO (hechos + análisis que el v2 referencia)
PLAN-audio-player-v2.md ✅ GATE FIRMADO 2026-07-31 («ok, continua»; H-9 = CABLEAR · D-AP2.7 = solo duck global). F1 ✅ · F2 ✅ COMPLETAS (2026-07-31; morfo 8/8 · player 18/18 · check 74=baseline 0 propios). Detalle F2 en la fila del plan; el commit de rate cabalga ratechange (patrón G-5 de nacimiento). ⚠️ translations:check BLOQUEADO POR AJENO (langs/components/palabras.ts con url: rompe el stripper del script; palabras = excluido, no se toca) — correr cuando se arregle. F3 ✅ COMPLETA (2026-07-31; player 10/10 · morfo 8/8 · check 74=baseline viva, 0 propios) — detalle en la fila F3 del plan: transporte por el servicio como default (pin con motor REAL) · metadata público (opts+types+wrapper) · nativeMediaProvider retirado (media-provider.ts = contrato puro; drift-guard borrado) · G-5 aplicado · formatDuration · 6 sub-providers+wrappers+exports · README (tablas al día). F4 ✅ (docblock del pack = doctrina D-AP2.7: el silencio lo posee el servicio vía duckUiWhileContent, receta escrita; la resta-de-gain v1 queda diseñada SIN cablear a propósito; stamp en navegador → F7). F5 EN CURSO — buffer-swap ✅ COMPLETO (29/29 · check 74=baseline 0 propios · eidos-lint limpio): el TimeSlider soma pasa secondaryValue={bufferedTime} y monta Slider.SecondaryRange; el div .mp-buffered + --media-buffered + --_mp-buffered + --_mp-rail RETIRADOS (css/provider/test/morfo-docblocks/READMEs al día); el look se conserva (42% → --slider-secondary-bg en scope). F5 ✅ COMPLETA (detalle en la fila F5 del plan: 6 wrappers + AudioLayout + <AudioPlayer> con metadata derivada + 4 variantes + tokens; 37/37 contratos · lint 0 inválidos · check 78 = baseline+4 ajenos NUEVOS de arts/connection, 0 propios). D-AP2.7 v2 FIRMADA Y EJECUTADA (2026-07-31, SIN COMMITEAR): el transporte del player es SILENCIOSO por defecto — pack D.5 (resta de gain; contact.silent nuevo en sounds.ts) sobre commits de botones + descendientes (contact de Buttons, commit-set de Sliders); commit-fail/commit-complete audibles; handle-drag conserva su resolver por mecanismo (declarado); voz reactivable en capa 5b. F7-construible ✅ COMMITEADO en c4d64ba98 (live badge localizado vía soma · demo con <AudioPlayer> + selector de variante + snippet en paridad · README eidos §modo-audio · component:audit --only media-player PASS · check 74 = baseline, 0 propios). QUEDAN — y todos exigen ojos o la máquina del usuario: F6 verificación VISUAL de las 4 variantes × light/dark × RTL (abrir /uix/components/media-player, chip audio, recorrer variantes; captura y MIRADA) · medición Chrome del escenario mixto (earcon + media, 1 contexto — patrón javascript_tool del §15 del plan del motor) · teclas de medios / pantalla de bloqueo (metadata en el SO) · stamp sema en navegador (data-event="commit-toggle-play" aterrizando en el play-button con la regla del pack casando). Nota demo: duckUiWhileContent se activa componiendo el app con defineEngineSound({duckUiWhileContent: 0.2}) — la demo actual no recompone el uix global; se muestra como receta en el README (decisión: no tocar la composición raíz de las demos desde la página del player). Después: F4 sema · F5 eidos (AudioLayout+AudioPlayer+variantes+buffer en Slider.SecondaryRange) · F6 formas · F7 demo+medición Chrome+teclas de medios. ⚠️ baseline de check fluctúa por la rama viva (~74, 0 propios; filtrar SIEMPRE con \\\\ e incluir consumidores). Lección F1: claves nuevas de ActiveProps van OPCIONALES o rompen todos los call-sites

Qué es el rediseño (resumen; la verdad está en el plan)

$sound gobierna 7 dominios: sustrato (contexto único — se conserva, verificado) · mezcla (master → buses ui/content; prefs.sound ↔ ui SOLO) · voces (calibración = dato del consumidor; sema registra la suya; default = valores actuales, cero cambio audible) · ciudadanía de media (el servicio PROVEE el transporte con la forma del puerto MediaProvider) · política/foco (mixed/exclusive/duck; duckUiWhileContent sustituye el parche D-AP.7) · percepción (decode; analyser/picos v2) · MediaSession (del servicio).

Pendiente que solo puede hacer el usuario

  • Escucha A/B de F2 ✅ hecha: «suena igual» (2026-07-31).
  • Prueba manual de teclas de medios / pantalla de bloqueo — cuando exista una página que consuma sound.media() (el re-plan del player la traerá).

Por dónde sigue

Re-plan del reproductor sobre el servicio (iniciativa aparte, con su gate): el player consume uix.sound.media(el, { metadata }) como su MediaProvider (su adaptador nativo se retira al migrar — sin shims), hereda foco/MediaSession del servicio, y sus hechos medidos (H-1 · H-9 · H-10/G-5 · gaps G-1/G-2/G-3 del Slider) siguen siendo el terreno. El pin de asignabilidad handle↔puerto ya existe (media-provider-drift.test.ts, lado soma). Al migrarlo quedan: la medición Chrome del escenario mixto (earcon + media, 1 contexto) y la prueba de teclas de medios.

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

  • NO arrancar un dev server si el del usuario está vivo (vite dev --force reescribe deps → dos runtimes → lifecycle_outside_component). Acoplarse al puerto 5173. Recuperación: parar node → borrar node_modules/.vite/deps → npm run dev → Ctrl+Shift+R.
  • El panel del navegador no pinta (viewport 0×0); javascript_tool sí — con eso se midieron los contextos.
  • Un guard que no has visto fallar no vale — quitar el cableado y ver el rojo.
  • Una medición no es un diagnóstico — README → CANON §8 → book-deviations → código, antes de acusar a una pieza.
  • Filtrar npm run check con cuidado: rutas con \\ doble; un patrón con / no casa y da falsos «0 propios».
  • El árbol está compartido con otras sesiones — git reset -q + add solo lo propio, en un bloque atómico. contracts.test.ts viene modificado de otra sesión: no tocarlo en E1 (su fila sound no pinea métodos y sigue verdadera).

Ajenos y preexistentes detectados (NO tocados)

  • contracts.test.ts 3 rojos ajenos: aura, menubar, radio-group.
  • docs:check 1 error ajeno: eidos/components/callout/README.md:23 («8 roles», son 9).
  • temas/sema/_lib/audition.ts: 2 errores de tipos preexistentes.

Powered by TurnKey Linux.