Formato puro: `npm run format` (dos pases; siete ficheros no convergían en el
primero) sobre todo lo que .prettierignore no excluye (web/ congelado,
.claude/, artefactos generados). Este commit va en .git-blame-ignore-revs.
Neutralidad medida fichero a fichero, compilando y minificando con esbuild (y
con el compilador de Svelte, cliente y servidor, para .svelte) la versión de
HEAD y la formateada: 1 031 ficheros de código idénticos; 9 CSS que solo
difieren en espacios pegados a un paréntesis (`var( --x )` frente a
`var(--x)`), que CSS no tokeniza como significativos; 510 Markdown sin
compilación posible (docs:check los valida). Los dos generados y el guard que
dependía del formato se resolvieron en el commit anterior.
Verificación sobre este árbol: npm run lint exit 0 · gate entero verde salvo
focus-census, arreglado en el commit anterior y re-ejecutado (9/9): check:gate
OK (src/ y scripts/ a cero) · docs:check 0/0 · arts/blocks/packs/rtl/
translations/agent · eidos:lint 0 inválidos · apps:check (boot 27/27, 0
errores) · suite 465/466 → 466/466 con el guard corregido · build de la raíz
exit 0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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>