Decision del usuario: escribir el contrato antes de tocar codigo.
El documento existe porque `settings-button` lleva declarada desde el principio
prometiendo «velocidad / calidad / pista», y al ir a implementarla resulta que
dos de los tres ejes ya no le corresponden y el tercero no existe.
Auditado sobre el codigo: grep de `quality|bitrate|resolution|level|
representation` sobre el puerto da CERO. Ni `MediaSnapshot` (0 de 14 campos), ni
`MediaProvider` (0 de 9 miembros), ni los espejos de `$arts/sound`.
Y no es un descuido: la calidad NO es intrinseca al `<video>`. Un fichero no
tiene niveles; los niveles aparecen con un manifiesto HLS/DASH y un motor que
elige representacion. Este framework no vendoriza motores, asi que la lista solo
puede venir del consumidor. De ahi que el contrato, si se abre, sera una lista
VACIA para el 90 % de los usos — lo que decide la forma: el control se AUSENTA,
no sale vacio. Misma doctrina que el waveform sin picos.
Queda escrito el contrato minimo (3 campos de snapshot con `qualityId` separado
de `qualityAuto`, `setQuality`, los dos espejos, el evento de morfo que rompe el
censo de 11, los textos) y la trampa que ya nos mordio con la velocidad: el
commit cabalga el RESULTADO, no el clic — pedir 1080p no es haberlo conseguido.
Registrado en el indice `docs/decisions.md`. docs:check 0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>