Cero claves nuevas. Su 29 % de deuda eran CUATRO literales que son identidad, y
ahora van firmados. Diff de computed 0 sobre 1.216 valores en 8 estados y 5
nodos; R-5.4 de 7/17 a 17/17 SIN una sola adjudicación, dos corridas de acuerdo;
capturas 2× antes/después idénticas byte a byte.
LOS CUATRO LITERALES SON IDENTIDAD, NO KNOBS
El line-height: 1 del icono —un glifo solo no tiene interlineado, la misma
anotación que su hermana field.css—, el 100 % doble del ::before —el anillo ES la
caja del indicador, que ya mide por --_search-field-loading-size— y el
border-radius: 50 %. Ese último la §4 pedía acuñarlo como
loading-indicator-radius: sería un knob que SÓLO puede romper el componente. El
arco es un BORDE que gira; con cualquier otro valor la ruleta deja de leerse como
una. Es la clase 4 de F2-B, «el 50 % de un círculo», al pie de la letra.
DIEZ DE SUS DIECISIETE TOKENS NO SE HABÍAN MEDIDO NUNCA
El centinela leía 7/17 porque la demo no monta dos estados: el indicador de carga
sólo existe con loading (ocho tokens) y la X sólo se desvanece con el campo
VACÍO, y el escenario arranca con valor (clear-hidden-opacity). Los dos
interruptores entran como prepareWith, y EL ORDEN IMPORTA: el clic en la X tiene
que ir PRIMERO, porque la propia regla que enciende le quita después el
pointer-events al botón que la disparó. La sonda necesita el de loading por lo
mismo: 4 → 5 nodos, sin perder ninguno.
LOS DOS PRIVADOS NO SON DEUDA
--_search-field-icon-size y --_search-field-loading-size son el conmutador por
talla y sus cinco fuentes son, cada una, una clave pública. Se quedan: 58 de las
162 recetas resuelven así su eje size —incluidas las cerradas al 100 % este mes,
empty-state y banner—, y convertirlas al ámbito size: del TSC cambiaría la
especificidad de la emisión sin ganar un punto de alcance.
⚠ UN DEFAULT MEDIDO, ANOTADO, NO CAMBIADO
Las dos escalas del mismo renglón divergen en los dos últimos peldaños. Medido en
Chrome con transiciones y animación congeladas, forzando data-size sobre el nodo
real, icono → indicador: xs 14→14, sm 16→16, md 18→18, lg 20→18, xl 32→20. El
contrato lo declara de frente (loading-indicator-size-lg apunta a
--size-md-icon-size y -xl a --size-lg-icon-size), así que en xl la ruleta es DOCE
píxeles menor que la lupa que tiene al lado. No es deuda de alcance —las diez
claves alcanzan—, es diseño que huele a copia a medias. Mueve píxel: D-TH.5 lo
saca de este eje. Escrito en el veredicto §5 y en el README.
CIFRAS Y GUARDS
Censo 71 % → 100 % (15 knobs → 11: público 10, literal 4 → 0, excepción firmada
0 → 4; sistema 1, fuera del ratio). Contrato 17 claves, intacto — no hay cambio
en base.ts ni en generated/. component-audit PASS · eidos-lint invalid 0 (9
morfo-backed, 4 eidos-only) · vitest src/uix/eidos 35/36 (único rojo
skin-media-player, preexistente) · rtl:check 0 · docs:check 0 · npm run check sin
errores en ficheros de este componente. README con su sección «Talla y tema» y
pestaña Tokens en la demo (17 claves, verificada con clic de Playwright tras
networkidle).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>