docs(sound-engine): el stamp de sema y la matriz del modo audio, medidos

Cierra los dos pendientes del hilo que no exigían los ojos del usuario, y
sanea el documento, que afirmaba cosas ya cumplidas.

STAMP DE SEMA — cerrado por las dos mitades.

Dónde aterriza: con un MutationObserver sobre el subárbol del player, un clic
en play estampa contact-activate y commit-toggle-play (commit · neutral) sobre
el PROPIO play-button, no sobre el provider, y los limpia al cerrarse el hold.

Que la regla del pack casa: A/B del pico de la envolvente dentro del mismo
componente — transporte (play, mute) 0.0001, o sea silenciado; commit-complete
0.05, audible. Los osciladores sí se construyen, la ganancia nunca sube: es la
resta de gain de D-AP2.7 funcionando. Queda anotada la trampa en la que caí,
comparar ese pico con el 0.25 de un Button de otra página y creer ver una
contradicción: el A/B tiene que ser dentro del mismo componente.

F6, MATRIZ DEL MODO AUDIO — las 16 combinaciones (4 variantes × claro/oscuro ×
LTR/RTL) recorridas buscando partes colapsadas, botones estrujados y desbordes.
Un solo defecto: en `bar` el time-slider colapsa a ancho 0 y el mute a 20px, en
las CUATRO combinaciones, así que no es del eje ni del tema. Visto: el scrubber
queda reducido a un punto ámbar entre 0:00 y 6:12 — una barra de app sin barra
de progreso — mientras el volumen conserva su ancho completo. `card` y `row`
limpias; lo que oculta `inline` es lo que su receta declara.

HIGIENE — el documento decía «sin commitear» del rediseño y del waveform, y
pedía un re-plan del player que ya está hecho. Verificado contra git: rediseño
2f872ef86, waveform 0ab6cc822 + 905012507, rutas limpias. La sección «Por dónde
sigue» se reescribe con lo que queda de verdad: dos miradas del usuario y dos
decisiones (qué cede en `bar`, y el rojo de audio-player en lint.test.ts).

docs:check 0 sobre 564 documentos.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
alpha-0.1-dir-prefs
dev 2 months ago
parent 1cb61567e5
commit 5ff5202038

@ -160,22 +160,89 @@ sema, que se queda en nivel `'full'`. El framework sí lo soporta
Medido sobre la envolvente del propio earcon; una ganancia de bus aguas abajo
NO se midió, así que el veredicto de «se oye o no» es del oído.
## Stamp de sema en navegador — CERRADO por las dos mitades (2026-08-04) ✅
**Mitad 1 — dónde aterriza.** Medido con un `MutationObserver` sobre el subárbol
del player, filtrando `data-event*`. Un clic en play produce, **sobre el propio
`[data-media-player-play-button]`** y no sobre el provider:
| evento | familia · intent | fase |
| -------------------- | -------------------- | -------- |
| `contact-activate` | `contact` | `active` |
| `commit-toggle-play` | `commit` · `neutral` | `active` |
…y a continuación los atributos se limpian, que es la ventana del hold
cerrándose. El stamp aterriza en el **botón**, como el morfo promete.
**Mitad 2 — la regla del pack CASA.** A/B dentro del propio player, midiendo el
pico de la envolvente programada (parche sobre `AudioParam.prototype`):
| disparo | pico | veredicto |
| -------------------------------- | ---------- | ---------- |
| play-button (transporte) | **0.0001** | silenciado |
| mute-button (transporte) | **0.0001** | silenciado |
| `commit-complete` (fin de pista) | **0.05** | audible |
Los osciladores **sí se construyen** (8 parámetros programados) pero la ganancia
nunca sube: es la resta de gain de D-AP2.7 / pack D.5, funcionando. Un `<Button>`
corriente fuera del player mide **0.25** — 2500× el transporte.
⚠️ **Trampa en la que caí**: comparé ese 0.25 de un Button de otra página con el
transporte y creí ver una contradicción con D-AP2.7. No la había — son
poblaciones distintas. **El A/B tiene que ser dentro del mismo componente.**
## F6 — matriz visual del modo audio: MEDIDA, 1 defecto (2026-08-04)
Las **16 combinaciones** (4 variantes × claro/oscuro × LTR/RTL) recorridas
programáticamente, buscando partes colapsadas, botones estrujados y desbordes:
- `card` y `row`: limpias en las 4. Sólo se oculta `live-indicator`, que es lo
correcto (la receta lo esconde si no hay directo).
- `inline`: oculta artwork/title/artist/time/rate/mute/volume — **por diseño**,
es lo que la receta declara para la nota de voz.
- **`bar`: el defecto.** `time-slider` colapsado a **ancho 0** y `mute-button` a
**20px**, en las **cuatro** combinaciones — así que no es del eje ni del tema,
es que la fila no tiene sitio. **Visto**: el scrubber queda reducido a un solo
punto ámbar entre `0:00` y `6:12`, o sea una barra de app persistente **sin
barra de progreso**, mientras el slider de **volumen** sí conserva su ancho
completo. Ningún desborde en ninguna combinación.
Queda la **mirada** del usuario sobre `card`/`row`/`inline` (la medición no juzga
estética) y la decisión de qué cede en `bar`.
## 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
## Por dónde sigue (reescrito 2026-08-04 — lo anterior estaba cumplido)
⚠️ **Higiene del documento**: la tabla de Estado de arriba dice «sin commitear»
del rediseño y de las fases F4/F5 del waveform. **Es rancio y está verificado**:
el rediseño es `2f872ef86`, el waveform `0ab6cc822` + `905012507`, y esas rutas
están limpias en el árbol. El «re-plan del reproductor sobre el servicio» que
esta sección pedía **también está hecho** (F3: el player consume
`uix.sound.media(el, { metadata })`), igual que sus dos pendientes de cierre —
escenario mixto y teclas de medios.
De este hilo quedan **cuatro cosas, y ninguna es código a ciegas**:
1. **La mirada del usuario sobre el modo audio** — `card` / `row` / `inline`.
La matriz está medida (sección F6) y sólo `bar` tiene defecto; el juicio
estético de las otras tres es suyo.
2. **Qué cede en `bar`** — decisión de diseño, no se improvisa. Hoy el
`time-slider` colapsa a 0 y el mute a 20px mientras el volumen conserva su
ancho. Opciones obvias: dar `flex` al time-slider y quitárselo al volumen ·
esconder el volumen por debajo de cierto ancho · bajar el scrubber a una
segunda fila.
3. **La mirada del waveform (su F6)** — sigue pendiente desde el 2026-08-01.
4. **El rojo de `audio-player` en `lint.test.ts`** — guard compartido, decisión
pendiente entre categoría nueva o `KNOWN_MISSING_MORFO`.
**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.
El siguiente ítem de CÓDIGO del componente no es de este hilo sino del handoff
hermano: **`settings-button`**, lo único que separa al morfo de 23/23.
Ver [`CONTINUE-player-rtl.md`](./CONTINUE-player-rtl.md) §0.
## Trampas de este repo (verificadas a base de perder tiempo)

Loading…
Cancel
Save

Powered by TurnKey Linux.