From e4fa616e5d7f90ea73c1a074d1ebc914d20c284d Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 24 Aug 2026 19:37:18 +0200 Subject: [PATCH] docs(theming): registro post-B' - cinco hechos verificados entran al expediente Pase de registro de lo que la firma B' descubrio y no arreglo (pre-existente, simetrico antes/despues). Seis claims de agentes -> verificacion adversarial independiente -> DOS murieron (label-inline era diseno firmado de la seccion 43; drag-drop refutado: su forward vive y alcanza) y UNO se fusiono (el color de `code` lo gana `[data-uix-docs] code` (0,1,1) - ES la firma pendiente 5.2 del harness, que se ENSANCHA de radio/padding a la tinta; medido por CDP, solo dos reglas declaran color). Entran en next-features 13 / CONTINUE: - El detector STALE del centinela es CIEGO a los patrones (filtra `k in ledger`, solo exactas): 207 claves revividas por B' y ni un aviso. Arreglo minimo anotado; clase re-verificar-ledger. - El guard no mide tono+estado a la vez (raiz de TONE_UNREACHED): tono solo en el paso estatico, hover sin tono, solo `toggle` declara eje de estado, switch/button sin entrada en COMPONENT_OVERRIDES (48). - Tres huecos de la sonda: el `open` de editable muere por CLIC sobre inputs ocultos (no por el localizador), button sin analogo de barrido de variantes, y NUEVE de las 33 escalas atadas a rol (purple slate indigo gray teal green orange red plum) - `plum` ES `loss`; 24 libres como reserva de sondeo. - Divergencia de familia: `label` es el unico primitivo de tinta sin el paso `on-solid` (tipo y runtime, auto-consistente); decision pendiente. Citas contrastadas contra el arbol (cuatro corregidas del verificador, incluida la deriva de +10 lineas del diff ajeno del sentinel). docs-check 0/0 sobre 815. Co-Authored-By: Claude Fable 5 --- docs/next-features.md | 65 ++++++++++++++++++++++++++++++++ docs/process/CONTINUE-theming.md | 13 +++++++ 2 files changed, 78 insertions(+) diff --git a/docs/next-features.md b/docs/next-features.md index 2bcfaaef1..ad7df475f 100644 --- a/docs/next-features.md +++ b/docs/next-features.md @@ -1536,6 +1536,15 @@ Lo que `chart` destapó (2026-08-22): dimensionan por `-height-{k}`, uno por `-min-block-size-{k}`) y la tabla del propio censo, que ya mapea `min-block-size → height`. Extender R-5.3 con esa tabla —propiedad → ranura— cierra la clase entera. +- **`label` es el ÚNICO primitivo de tinta sin el paso `'on-solid'`** (verificado + 2026-08-24). Lo omiten a la vez SU TIPO (`label/types.ts:9`: + `ComponentColorProp | 'muted' | 'disabled'`) y su runtime (`label.svelte:38`), + así que es **auto-consistente** —no es un bug—, mientras `text.svelte:54` y + `heading.svelte:54` sí lo llevan y §43 describe el eje de la familia CON él. + Tampoco lo salva el «pues compila»: eso era el brazo de CSS crudo del tipo + abierto, idéntico en los tres. Es una **decisión pendiente**, y sólo caben dos: + o `label` gana el paso y la familia queda pareja, o se documenta la omisión + con su razón. - **⚠⚠ EL GUARD TIENE FALSOS POSITIVOS: escribe el centinela en el `style` INLINE de cada nodo** (medido 2026-08-23). `staticPass` escribe el token en `documentElement` **y en todos los nodos del componente**, y ahí es donde vive @@ -1585,6 +1594,62 @@ Lo que `chart` destapó (2026-08-22): mask cambia (`at 50% 35%` → `at 11% 50%`). Añadir `maskImage` a la lista de propiedades del guard es una línea, pero toca el instrumento de TODOS: entra con su re-verificación de los componentes con ledger. +- **El detector STALE del centinela es CIEGO a las adjudicaciones por PATRÓN** + (verificado 2026-08-24 sobre el código, tras B′). `theming-sentinel.ts:1140-1141` + filtran `k in ledger`, es decir **sólo las excepciones EXACTAS**. Las cubiertas + por `SENTINEL_PATTERN_EXCEPTIONS` sí entran en `reasonFor` (`:1129`) para + adjudicar un muerto, pero **nunca en `stale`**: una clave de patrón que pasa a + viva no dispara ni un aviso. **El coste ya está pagado**: en B′ revivieron 207 + claves y el guard no dijo nada — el estrechamiento del ledger hubo que hacerlo + comparando a mano contra las 13 entradas. Arreglo mínimo: filtrar por + `reasonFor(k) !== null` en vez de `k in ledger`, e imprimir QUÉ patrón la + cubría (si no, el aviso no dice dónde ir). Es de la clase re-verificar-ledger + —tocar el guard obliga a re-pasar el ledger entero—, así que firma pequeña, + como las otras del instrumento. +- **El guard no sabe medir TONO y ESTADO a la vez** (verificado 2026-08-24; es la + raíz de `TONE_UNREACHED`, la razón nueva del ledger). El estampado del tono + vive **sólo** en el paso estático (`theming-sentinel.ts:913`, `TONES.find(...)` + → `setAttribute('data-color', tone)`); el paso de hover (`:999`) barre los ejes + de `sweepAttr` pero **no estampa tono**. Y `sweepAttr` puede forzar un estado, + pero de los **48** componentes de `COMPONENT_OVERRIDES` sólo `toggle` declara + un eje de estado (`:635`, `data-state: off|on`) — `switch` y `button` **no + tienen entrada**. Medido: la ficha de `switch` monta **1 nodo `unchecked`** y + todas sus ranuras de paleta cuelgan de `[data-state='checked']`; la de `button` + monta **1 nodo sólido**. Consecuencia: **toda clave de tono cuya ranura esté + detrás de un estado o de un hover se mide A MANO**, y por eso son 146 las que + siguen adjudicadas tras B′ y no cero. Arreglo: estampar el tono también en el + paso de hover, y dar eje de estado a los componentes cuyas ranuras lo exigen. +- **Tres huecos de la SONDA** (`scripts/__theming-probe.ts`, verificados + 2026-08-24), independientes entre sí: + 1. **El pase `open` de `editable` no muere por el localizador: muere por el + CLIC.** El localizador (`:324-326`) SÍ casa `[data-editable-input]` (3 + nodos), pero esos inputs están `hidden` / 0×0, así que + `trigger.click({ timeout: 2000 })` (`:330`) expira **dentro del `catch` + vacío** (`:359`) y el pase se pierde **EN SILENCIO**. La puerta real es + `[data-editable-preview]` + foco, que el CENTINELA ya declara + (`theming-sentinel.ts:214-221`: `openBy: 'focus'`, `openWith`) y la sonda + no. Dos arreglos, y conviene hacer los dos: copiar la puerta, y que el + `catch` **avise** en vez de tragar (un pase perdido en silencio es un 0/N + que nadie investiga). + 2. **La sonda no tiene análogo del barrido de variantes.** `DEMO_VARIANTS` + (`:139-202`, **10 claves**: avatar, audio-player, text-gradient, badge, + image-picker, search-field, chat-composer, chat-message, chat-typing, toast) + **TRUECA de demo, no barre**: mide un estado en lugar de otro. Por eso + `button`, que monta un solo botón sólido, no tiene sondeadas sus otras + variantes. Es el hermano exacto del hueco del guard de arriba. + 3. **Dos alias de escala hacen sondas DÉBILES.** `affirm: 'teal'` + (`lib/config-types.ts:95` y `lib/themes/base.ts:40`): estampar `teal` como + escala «cruda» computa **idéntico** a estampar el rol `affirm` en los 10 + slots, así que una sonda que crea estar probando la vía de escala puede + estar midiendo la de rol. Y su hermana, medida: `risk: 'orange'` + (`themes/base.ts:42`), de donde **`risk ≡ orange`** y **`risk ≠ amber`** — + ojo, que la convención canónica del libro nombra `amber` mientras el tema + base mapea `orange`. **No son dos casos: son NUEVE de las 33 escalas**, las + que el tema base ata a un rol — `purple` (primary), `slate` (secondary), + `indigo` (tertiary), `gray` (neutral), `teal` (affirm), `green` (fulfill), + `orange` (risk), `red` (threat) y `plum` (loss). Para barridos futuros: usar + una escala sonda de las **24 libres** (`fuchsia`, `steel`, `sand`… ) y NO + `plum`, que a primera vista parece neutra y es el rol `loss`. - **Montar MÁS capas puede medir MENOS** (medido 2026-08-23 en `background`). Al enseñar al guard a encender las capas opt-in del componente, añadir el foco puntual, la velocidad de paralaje y la profundidad hizo BAJAR la corrida de 17 diff --git a/docs/process/CONTINUE-theming.md b/docs/process/CONTINUE-theming.md index d5cc26395..49a9a97f3 100644 --- a/docs/process/CONTINUE-theming.md +++ b/docs/process/CONTINUE-theming.md @@ -106,6 +106,19 @@ guarda `active-eidos-config.test.ts` · ledger `scripts/theming-sentinel-excepti `gradient-picker` (36), `emoji-picker` (3). **Salida barata ya probada**: `toolbar` cede el cromo al `Button` y no pierde ni una clave, porque su receta no escribe la regla. + **Se ENSANCHA a la TINTA (verificado 2026-08-24)**: la misma firma §5.2 del + harness cubre ya el `color` de `code`. Medido por CDP + (`getMatchedStylesForNode`): sobre `[data-code]` **sólo DOS reglas declaran + `color`** — `[data-code]` (0,1,0) y `[data-uix-docs] code` (0,1,1, + `web/routes/uix/uix.css:792`, `var(--uix-text)` = `rgb(24,24,27)`) — y gana + el harness. Con `data-color='risk'` estampado, `--_code-palette-text` y + `--_code-color` SÍ se mueven, pero `color` no: la cadena del componente + funciona y la pisa la del harness al final. **No es entrada nueva**: es el + mismo expediente que el ledger ya cita para `code.radius` + (`theming-sentinel-exceptions.ts:665`) y `code-block.pre-padding` (`:676`), + y que reaparece por tercera vez en `prose.code-bg` / `code-radius` / + `code-font-family` (`:862-865`). Lo que cambia es el ALCANCE de la firma: + de radio / padding / tipografía **a incluir también la tinta**. 3. **`file-upload` barre DESCENDIENTES** (`[data-file-upload] [data-disabled]`) y se come el token de sus huéspedes. Única ocurrencia en 162 recetas. 4. **Las cuatro claves de `avatar` fuera de gramática** (`*-color-custom*`,