Los 25 knobs visuales salieron del contrato en 998d72191, y con ellos su
`values: [...]` — que era con lo que un guard podia rechazar `[data-size='huge']`.
Comentarlos dejo esa validacion sin fuente. Vuelve desde donde el enum vive de
verdad: la union de TS con la que el prop esta tipado.
No en eidos-lint. El mecanismo YA EXISTIA en recipe-css-contract para `variant`
(«Variant canon enforcement», desde antes de esta jornada). Esto lo extiende, no
lo inventa:
- el colector de valores CSS toma el attr por parametro en vez de fijar
`variant`;
- un extractor nuevo entiende `Extract<Base, 'a' | 'b'>` — donde viven cinco de
los ejes (AvatarSize, ImageSize, SkeletonSize, QrCodeSize,
AvatarBadgePosition) — y el miembro `boolean` de `AvatarRing`;
- 11 ejes en KNOB_AXES, inspeccionando 44 valores CSS reales.
`qr-code.cell-shape` queda FUERA, y el motivo esta escrito en la tabla: estampa
`data-cell-shape` en el `<svg>` raiz, pero NINGUNA regla CSS lo lee — la forma la
dibuja el encoder en la geometria del `<path>`. Con el dentro, el test pasaba
inspeccionando el conjunto vacio, que satisface toda asercion de contencion que
se haya escrito jamas. De ahi la asercion `used.size > 0`: un eje ciego es fallo,
no verde. Medido antes de ponerla: 11 ejes miraban 44 valores y el doceavo no
miraba nada, en verde. Es la misma leccion que layer-check, que en su primera
ejecucion paso habiendo inspeccionado cero elementos.
Probado por mutacion, 4/4 — typo en un valor CSS, union estrechada, union
reescrita a un alias ilegible, eje cegado por renombrado de reglas. Arbol
restaurado byte a byte despues (git diff --stat vacio).
Prettier marca el fichero, pero ya lo marcaba en HEAD: 7 de los 14 tests de
src/uix/eidos/ estan sucios, todos por punto y coma. El bloque nuevo sigue el
estilo del fichero. No se formatea al pasar.
Y el handoff, con lo que queda. Buscando si los ejes con alias estaban cubiertos
en otro sitio aparecio component-visual-attrs.test.ts: es la MITAD DE PRESENCIA
del mismo problema, lleva ahi desde antes, cubre 60+ componentes y guarda
data-size / data-variant / data-color enteramente fuera de morfo. Es la prueba,
en el propio arbol, de que la sentencia del autor no inaugura nada — describe
como estaba construido el sistema ya. Su hueco esta medido: image, skeleton,
qr-code y s-text no tienen ninguna fila, y avatar no lista ring, position ni
stacking. Anadir filas es decision del autor: presentada y sin firmar.
suite eidos 421/421 en 32 ficheros (recipe-css-contract aporta 42) · suite
completa 4960/4969, y los 3 fallos que no son los 6 conocidos eran timeouts por
inanicion de CPU: 161/161 en aislamiento · contracts.test.ts 6 preexistentes
(waveform, media-player, audio-player, menubar, aura, radio-group, tabs), ninguno
de este eje · check 69 = base intacta · docs 0/628 · rtl 0/178 · morfo:check
6/159 preexistentes.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>