From 694fcb99dc02994c4d0791f9bcfb150be51df35c Mon Sep 17 00:00:00 2001 From: dev Date: Sun, 23 Aug 2026 03:55:34 +0200 Subject: [PATCH] =?UTF-8?q?uix(surface):=20ADJUDICADO=20=E2=80=94=20el=202?= =?UTF-8?q?5=20%=20es=20su=20techo,=20y=20su=20ruta=20de=20demo=20es=20un?= =?UTF-8?q?=20404?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cero claves nuevas: sus cuatro knobs son, uno a uno, doctrina bien aplicada. Surface es la cara de PINTURA de Box, y lo que pinta no es suyo: `bg` y `fg` salen del PUENTE DE PALETA (THM-2) —que es exactamente cómo un tema llega a ellos, por el color— y `--_surface-fill-finish` es el CANAL DE VALOR del acabado de degradado, que el generador deriva por instancia (§39). La rama `inherit` del `fg` suave es intencionada: la tinta del contenido se queda en la global porque el tinte del track es discreto, y está escrito en la receta. PERO NO TIENE RUTA PROPIA: `/uix/components/surface` es un 404, como `picker-shell` y `mockup`. El guard medía una página VACÍA y reportaba 0/25 — incluido `radius`, que está vivísimo—. Apuntado a `/temas/gradientes` (cuatro surfaces, dos variantes, tres colores) y a `/blocks/cta`: 1/25, y el que mueve es el radio (10px → 1234px). Ya son TRES los componentes del canon sin demo → §13. Sus 24 claves de tono son la SUPERSESIÓN de la cascada de paleta medida hoy en `button`: el bloque genérico va el último y gana por orden. Adjudicadas con el patrón compartido. Gates: centinela 1/25 con las 24 adjudicadas · censo 25 %, que es el techo · `docs:check` 0 · sin cambios de código. Co-Authored-By: Claude Opus 5 --- docs/audit/theming/surface.md | 29 +++++++++++++++++++++++++- docs/next-features.md | 8 +++++++ docs/process/PLAN-theming.md | 12 +++++++++++ scripts/theming-sentinel-exceptions.ts | 5 +++++ scripts/theming-sentinel.ts | 4 ++++ 5 files changed, 57 insertions(+), 1 deletion(-) diff --git a/docs/audit/theming/surface.md b/docs/audit/theming/surface.md index 8524e8ac6..3aab3afce 100644 --- a/docs/audit/theming/surface.md +++ b/docs/audit/theming/surface.md @@ -87,6 +87,33 @@ no distingue lo que debería — se marca `⚠`. -_(pendiente — lo escribe el autor; se conserva al regenerar)_ +**ADJUDICADO 2026-08-23 — el 25 % ES su techo, y no hay nada que coser.** Cero +claves nuevas: sus cuatro knobs son, uno a uno, doctrina bien aplicada. + +Surface es la cara de PINTURA de Box (Box es layout por doctrina), y lo que +pinta no es suyo: + +- `--_surface-bg` y `--_surface-fg` salen del **puente de paleta** THM-2 + (`--_surface-palette-{track,solid,contrast}`), que es exactamente cómo un tema + llega a ellos: por el color, no por un token de superficie. La rama `inherit` + del `fg` suave es intencionada —la tinta del contenido se queda en la global + porque el tinte del track es discreto— y está escrita en la receta. +- `--_surface-fill-finish` es el **canal de valor** del acabado de degradado: lo + deriva el generador por instancia (§39), como en `button`. Su dial es del + sistema (`--gradient-finish-lift`). + +**Dos cosas que sí salieron, y las dos son de instrumento o de arquitectura:** + +- **No tiene ruta propia**: `/uix/components/surface` es un **404**, como + `picker-shell` y `mockup`. El guard medía una página VACÍA y reportaba 0/25 — + incluido `radius`, que está vivísimo. Apuntado a `/temas/gradientes` (cuatro + surfaces, dos variantes, tres colores) y a `/blocks/cta`: **1/25**, y el que + mueve es el radio (10px → 1234px). → §13, con los otros dos sin ruta. +- **Sus 24 claves de tono son la SUPERSESIÓN de la cascada de paleta** medida hoy + en `button`: el bloque genérico `[data-surface][data-color]` va el último y + gana por orden. Adjudicadas con el patrón compartido. + +Verificación: centinela **1/25** con las 24 adjudicadas · censo 25 %, que es el +techo · sin cambios de código. diff --git a/docs/next-features.md b/docs/next-features.md index b0ffa1156..5da533895 100644 --- a/docs/next-features.md +++ b/docs/next-features.md @@ -1215,5 +1215,13 @@ Lo que `chart` destapó (2026-08-22): toca aquí porque no es el componente en curso: cuando §12.9 se firme, o se retira o empieza a pintar, y la decisión es la MISMA para las cuatro. +- **⚠ Ya son TRES los componentes canónicos sin ruta de demo**: `picker-shell`, + `mockup` y ahora **`surface`** (`/uix/components/surface` = 404, medido + 2026-08-23). Sin ruta no hay sonda ni guard, y el guard **miente en verde-rojo**: + reportaba 0/25 sobre una página vacía, incluido un `radius` que está vivo. El + parche es el mismo que se le puso a picker-shell —medirlo donde SÍ se renderiza + (`urls` en el override)—, pero la solución de fondo es que un componente del + canon tenga su demo. + **Deps**: ninguna. Son mejoras del instrumental del eje, ejecutables cuando estorben. diff --git a/docs/process/PLAN-theming.md b/docs/process/PLAN-theming.md index 1cd3afae5..59593f689 100644 --- a/docs/process/PLAN-theming.md +++ b/docs/process/PLAN-theming.md @@ -455,6 +455,18 @@ de commit. Sin artefacto, el paso no se ha hecho. ## 8. Registro +- 2026-08-23 — **`surface` ADJUDICADO: el 25 % es su techo**, cero claves nuevas. + Es la cara de PINTURA de Box y lo que pinta no es suyo: `bg` y `fg` salen del + puente de paleta (THM-2) y el acabado es canal de valor del generador (§39). + La rama `inherit` del `fg` suave es intencionada y está escrita en la receta. + + **Pero no tiene ruta**: `/uix/components/surface` es un 404 y el guard medía + una página VACÍA — 0/25, incluido un `radius` vivísimo. Apuntado a + `/temas/gradientes` + `/blocks/cta`: 1/25, y el que mueve es el radio. Ya son + TRES los canónicos sin demo (picker-shell, mockup, surface) → §13. + + Sus 24 claves de tono son la supersesión de paleta de hoy: patrón compartido. + - 2026-08-23 — **`banner` 30 % → 100 %** (11 claves) **y el guard pasa de 4/42 a 53/53**: sus 38 «muertos» estaban vivos, sólo que nadie los había mirado con el atributo puesto. Global 64 %. diff --git a/scripts/theming-sentinel-exceptions.ts b/scripts/theming-sentinel-exceptions.ts index 1e994b0db..c21e02cae 100644 --- a/scripts/theming-sentinel-exceptions.ts +++ b/scripts/theming-sentinel-exceptions.ts @@ -734,4 +734,9 @@ export const SENTINEL_PATTERN_EXCEPTIONS: Array<{ pattern: /^(primary|secondary|neutral|affirm)-(solid|solid-hover)$/, reason: PALETTE_SUPERSEDED }, + { + component: 'surface', + pattern: /^(primary|secondary|neutral|affirm|fulfill|risk|threat|loss)-(track|solid|contrast)$/, + reason: PALETTE_SUPERSEDED + }, ]; diff --git a/scripts/theming-sentinel.ts b/scripts/theming-sentinel.ts index b3c5889db..fbbcbc18d 100644 --- a/scripts/theming-sentinel.ts +++ b/scripts/theming-sentinel.ts @@ -182,6 +182,10 @@ const COMPONENT_OVERRIDES: Record< // no attribute of its own: without this the guard measures ONE node (the root) // and 27 of its 37 tokens read dead. Measured 2026-08-22. prose: { extraNodes: '[data-prose] *' }, + // No route of its own — `/uix/components/surface` is a 404, like picker-shell + // and mockup — so the guard measured an EMPTY page and reported 0/25. It is + // the paint side of Box: measured where it actually renders. + surface: { urls: ['/temas/gradientes', '/blocks/cta'] }, // Its palette resolves per INTENT and then per VARIANT: the solid/contrast // slots only paint under `solid`, the border slot only under `outline`, and // the demo mounts one of each. 38 of its 42 tokens read dead without the