uix(theming): text-scramble no tiene contrato que escribir — y el barrido de fantasmas, hecho

Sin cambios de código: su veredicto §5 y el registro.

Su 50 % no es ni deuda ni logro, es la suma de dos cosas que no son knobs:

- **Los dos literales son la técnica sr-only** (`width`/`height: 1px` en
  `[data-text-scramble-sr]`), idéntica a `text-blur` y al resto del catálogo:
  existe para que el lector de pantalla lea el texto entero mientras la versión
  animada se parte en caracteres. Moverlos rompe la técnica.
- **Los dos «públicos» son tipografía que el componente no debería acuñar**
  (`--text-scramble-font` / `-size`, con fallback y sin declarar): es la firma
  1.bis pendiente. Escribirles contrato ahora sería acuñar exactamente lo que
  esa firma propone retirar. Con esto, 1.bis son **7 claves en 4 de los 5**
  componentes de la familia; `text-blur` es el único limpio: hereda.

Y el `font` apunta a un FANTASMA, medido en navegador: `var(--font-mono, …)` no
existe —el canónico es `--font-family-mono`— así que pinta `ui-monospace` e
**ignora la mono del tema** (`Azeret Mono`, que está ahí al lado).

EL BARRIDO MECÁNICO QUE PEDÍAN `--radius-xs` Y `--font-size-4xl`, HECHO:

5.793 custom properties declaradas en todo `src/uix/eidos` (fundación + capas +
recetas + `generated/`) contra los `var(--x, fallback)` de las recetas cuyo `--x`
sea vocabulario de SISTEMA → **9 referencias fantasma**. (Las que van sin
fallback ya las guarda `recipe-css-contract`; el hueco eran justo las que
«funcionan por accidente».) Tabla completa en next-features §13:

- `--color-content-tertiary` ×3 (float-panel, proof-of-human clock y
  rotate-align) — **es el caso histórico** que `recipe-contract` §1 cita como
  origen de su propia regla, y sigue vivo en tres recetas.
- `--style-{body,prose,label,caption}-font-variation-settings` ×4 (`text.css`) —
  los estilos con nombre emiten 6 claves y ésta no está: **el eje de fuente
  variable no llega nunca al primitivo `Text`**.
- `--font-family-sans` (palabras, track WIP) y `--font-mono` (text-scramble).

Ninguna se arregla aquí. El barrido debería ser un guard: misma lógica que el
test de fantasmas sin fallback que ya existe, con el filtro de vocabulario de
sistema encima.

Guards: censo `--only` sin cambio (50 %, es el veredicto lo que cambia) ·
component-audit PASS · docs:check 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
alpha-0.1-background
dev 2 months ago
parent 5b10005ef7
commit 5e7462a3ff

@ -67,6 +67,33 @@ no distingue lo que debería — se marca `⚠`.
<!-- veredicto:start -->
_(pendiente — lo escribe el autor; se conserva al regenerar)_
**Medido 2026-08-22. NO hay contrato que escribir, y su 50 % no es ni deuda ni
logro: es la suma de dos cosas que no son knobs.**
**Los dos literales son la técnica sr-only** (`width: 1px` / `height: 1px` en
`[data-text-scramble-sr]`), idéntica a la de `text-blur` y a la del resto del
catálogo: existe para que un lector de pantalla lea el texto completo mientras
la versión animada se parte en caracteres. No son estética; moverlos rompe la
técnica. El resto (`display: inline-block`, `white-space: pre`, `margin: 0`)
es mecánica del efecto.
**Los dos «públicos» son tipografía que este componente NO debería acuñar** —
`--text-scramble-font` y `--text-scramble-size`, consumidos con fallback y sin
declarar. Es la firma **1.bis** pendiente (CONTINUE §5): la doctrina del eje
(F2-B regla 2, cinco precedentes) dice que una receta CONSUME la capa
tipográfica (`--style-*`) o HEREDA. Escribirles un contrato ahora sería acuñar
exactamente lo que esa firma propone retirar. **Se espera a la firma.**
**Y el `font` apunta a un FANTASMA, medido en navegador**: el valor es
`var(--text-scramble-font, var(--font-mono, ui-monospace, monospace))` y
`--font-mono` **no existe** en eidos — el nombre canónico es
`--font-family-mono`. Lo que pinta hoy es `ui-monospace, monospace`, la mono
del sistema operativo, **ignorando la mono del tema** (`Azeret Mono`, que está
ahí, en `--font-family-mono`). Un componente que declara «mono como el seed»
y no usa la del tema es precisamente lo que la firma 1.bis viene a cerrar.
Registrado en `next-features` §13 junto con el barrido mecánico que lo
encontró: **9 referencias fantasma con fallback** en todo el catálogo de
componentes.
<!-- veredicto:end -->

@ -919,6 +919,14 @@ para resolver después** (autor, 2026-08-22):
CONSUME la capa tipográfica (`--style-*`) o HEREDA (`link` → `inherit`):
un TextGradient dentro de un `h1` ES un h1.
**Son SIETE claves en CUATRO de los cinco componentes** (medido 2026-08-22 al
adjudicar `text-scramble`): las cinco de arriba más `text-scramble.font` y
`.size`, éstas aún sin declarar en `base.ts`. Y la de `text-scramble` es la
peor de todas porque además apunta fuera del canon: `var(--font-mono, …)`,
nombre que **no existe** —el canónico es `--font-family-mono`—, así que pinta
`ui-monospace` y **el componente ignora la mono del tema** (`Azeret Mono`).
Medido en navegador. `text-blur` es el único limpio de la familia: hereda.
**Resolución propuesta**: retirar las cinco claves y heredar del contexto.
Mueve defaults (TextFocus deja de imponer 3rem/900, TextCircular 1.5rem/900,
TextGradient 500) → firma del autor. Con ello muere el fantasma `4xl` sin
@ -926,5 +934,29 @@ para resolver después** (autor, 2026-08-22):
(autor, 2026-08-22). Refuerza además el barrido mecánico que `--radius-xs`
ya pedía: `var(--nombre, …)` cuyo nombre no emite ningún generador.
- **⚠ El barrido mecánico está HECHO: 9 referencias fantasma con fallback en el
catálogo de componentes** (2026-08-22). Es lo que pedían el hallazgo de
`--radius-xs` y el de `--font-size-4xl`, y ya no hay que suponer cuántas
quedan. Método: recoger las **5.793** custom properties declaradas en TODO
`src/uix/eidos` (fundación + capas + recetas + `generated/`) y buscar en las
recetas los `var(--x, fallback)` cuyo `--x` sea vocabulario de SISTEMA y no
esté declarado — el sistema nunca lo escribe en runtime, así que un nombre
ausente es una errata. (Los `var(--x)` SIN fallback ya los guarda
`recipe-css-contract`; el hueco eran justo los que llevan fallback, que
«funcionan por accidente».)
| referencia inexistente | dónde | qué pinta en su lugar |
| --- | --- | --- |
| `--color-content-tertiary` ×3 | `float-panel.css:227` · `proof-of-human/clock.css:87` · `proof-of-human/rotate-align.css:114` | `--color-content-secondary`. **Es el caso histórico** que `recipe-contract` §1 cita como origen de la regla («shipped a month that way») y sigue vivo en tres recetas |
| `--style-{body,prose,label,caption}-font-variation-settings` ×4 | `text.css:32,55,65,75` | `normal` — los estilos con nombre emiten 6 claves y ésta no está, así que **el eje variable no llega nunca al primitivo `Text`** |
| `--font-family-sans` | `palabras.css:296` | `sans-serif` del sistema. El canónico es `--font-family-primary` (palabras es track WIP) |
| `--font-mono` | `text-scramble.css:11` | `ui-monospace`. El canónico es `--font-family-mono` |
Ninguna se arregla aquí: dos son tipografía y esperan la firma 1.bis, y las
otras dos familias son decisión de diseño (¿existe un slot `tertiary`?
¿el eje variable debe emitirse por estilo?). El barrido, en cambio, **debería
ser un guard**: la lógica es la misma que la del test de fantasmas sin
fallback que ya existe, con el filtro de vocabulario de sistema encima.
**Deps**: ninguna. Son mejoras del instrumental del eje, ejecutables cuando
estorben.

@ -119,6 +119,21 @@ el test del suelo.
mide; la demo se toca únicamente como INSTRUMENTO (encender una variante para
que la sonda vea los nodos), y lo mínimo.
### 3.ter `text-scramble` ADJUDICADO (2026-08-22) — sin contrato, y por qué
Su 50 % no es deuda ni logro: **dos literales son la técnica sr-only** (como
`text-blur`) y **los dos «públicos» son tipografía que no debería acuñar**, o
sea la firma 1.bis. Escribirle un contrato ahora sería acuñar justo lo que esa
firma propone retirar. Veredicto §5 escrito, cero cambios de código.
De paso salió el **barrido mecánico** que `--radius-xs` y `--font-size-4xl`
pedían: **9 referencias fantasma con fallback** en el catálogo (5.793 nombres
declarados). Tabla en next-features §13. La más grave no es de esta familia:
`--color-content-tertiary` sigue vivo en TRES recetas —es el caso histórico que
`recipe-contract` §1 cita como origen de la regla— y los cuatro
`--style-*-font-variation-settings` de `text.css` significan que **el eje de
fuente variable no llega nunca al primitivo `Text`**. Ninguna se arregla aquí.
### 4. La cola que queda, por alcance
| componente | knobs | nota |
@ -126,7 +141,6 @@ el test del suelo.
| `palabras` | 471 (22 %) | **el mayor del catálogo con diferencia**, sin tocar; D-TH.3 decide si entra |
| `field-langs` | 41 | espera el **mandato Field** (firma 2), que NO es tokenización: manda que los x-field incorporen el wrapper Field — cambia composición y mueve píxel |
| `mockup` | 29 (38 %) | ⚠ **sin ruta de demo (404)**, como `picker-shell`: sin sonda ni guard. Y sale NEEDS-WORK en el audit, preexistente |
| `text-scramble` | 4 (50 %) | sus dos knobs son el `1px` de sr-only — **0 % estructural**, como `text-blur`: escribir el veredicto, no tokens |
| `chronos` | 245 (1 %) | el segundo mayor; sin abrir |
| `result` · `banner` · … | varios | ver el censo, `reach < 20 %` = 19 |
@ -150,9 +164,13 @@ están a 0 % **honesto** (consumen `calendar-surface`).
1.bis **La familia text-effects ACUÑA tipografía propia contra el canon**
(autor, 2026-08-22: «¿qué sentido tiene que text-effects introduzca
diferentes nombres de tipografía cuando ya hay un canon establecido?»).
Cinco claves: `text-focus.word-size` (3rem, vía el fantasma
**Siete claves en CUATRO de los cinco** (medido al adjudicar
`text-scramble`): `text-focus.word-size` (3rem, vía el fantasma
`--font-size-4xl`) y `word-weight` (900) · `text-circular.weight` (900) y
`font-size` (1.5rem) · `text-gradient.font-weight` (500, subida el 22).
`font-size` (1.5rem) · `text-gradient.font-weight` (500, subida el 22) ·
`text-scramble.font` y `.size` (sin declarar). La de `text-scramble`
apunta además a `--font-mono`, que NO existe: pinta `ui-monospace` e
**ignora la mono del tema**. `text-blur` es el único limpio: hereda.
Son opiniones del seed react-bits convertidas en contrato por «valor
verbatim». Doctrina F2-B regla 2: una receta CONSUME la capa tipográfica
(`--style-*`) o HEREDA (`link` → `inherit`); un tratamiento de pintura

@ -455,6 +455,32 @@ de commit. Sin artefacto, el paso no se ha hecho.
## 8. Registro
- 2026-08-22 — **`text-scramble` ADJUDICADO: sin contrato que escribir** (y el
barrido de fantasmas, hecho). Sin cambios de código: su veredicto §5.
Su 50 % no es ni deuda ni logro. **Dos literales son la técnica sr-only**
(`width`/`height: 1px`), idéntica a `text-blur`. **Los dos «públicos» son
tipografía que el componente no debería acuñar** —`font` y `size`,
consumidos con fallback y sin declarar—, o sea la firma **1.bis**:
escribirles contrato ahora sería acuñar exactamente lo que esa firma propone
retirar. Con `text-scramble` la cuenta de esa firma sube a **7 claves en 4 de
los 5** componentes de la familia (`text-blur` es el único limpio: hereda).
Y su `font` apunta a un fantasma: `var(--font-mono, …)` no existe —el
canónico es `--font-family-mono`— así que pinta `ui-monospace` e **ignora la
mono del tema** (`Azeret Mono`). Medido en navegador.
**El barrido mecánico que `--radius-xs` y `--font-size-4xl` pedían está
HECHO**: 5.793 nombres declarados en `src/uix/eidos` contra los
`var(--x, fallback)` de las recetas → **9 referencias fantasma**, tabla en
next-features §13. La más grave no es de esta familia:
`--color-content-tertiary` sigue vivo en TRES recetas (el caso histórico que
`recipe-contract` §1 cita como origen de su regla) y los cuatro
`--style-*-font-variation-settings` de `text.css` significan que el eje de
fuente variable **no llega nunca al primitivo `Text`**. Ninguna se arregla
aquí; el barrido debería ser un guard (misma lógica que el test de fantasmas
sin fallback, con el filtro de vocabulario de sistema encima).
- 2026-08-22 — **`text-gradient` 67 % → 100 %** (7 claves, entrada nueva).
Tercero de la familia text-* con la forma de `text-circular` / `text-focus`
(públicos «de facto» con fallback y sin declarar), pero la propuesta §4

Loading…
Cancel
Save

Powered by TurnKey Linux.