You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/scripts/__names-mutatest.ts

81 lines
4.5 KiB

fix(eidos): la capa de estado es un VELO — 38 hovers que no lo eran, al idioma El codemod de ayer apartó 47 knobs «en cola de migración a la capa de estado». Al empezar esa migración se ve que sólo SEIS lo estaban: el velo de §38 es `background-image: linear-gradient(var(--state-hover), var(--state-hover))` y no alcanza nada más. De los otros 41, veintidós mueven un BORDE y diecinueve mueven la TINTA — ninguno es la capa de estado por muy neutro que sea su valor. Eran deuda de nombre, y yo los había excluido del renombrado. El clasificador tenía media prueba: miraba el VALOR (¿neutro o con valencia?) y no la PROPIEDAD. Ahora exige las dos, siguiendo un salto por privado (`--_switch-track-bg-hover`) y entre componentes (la familia calendar presta `--calendar-control-*` a month-grid, range-calendar y year-grid, y por eso esos cuatro no aparecían consumidos en su propia receta). renombres 38 en 22 componentes · 113 referencias en 30 ficheros cola real 6 (checkbox · date-range-picker ×2 · scroll-area · splitter · switch) — los únicos que pintan fondo censo 162 · 5.203 · 1.841 (37 %) · 56 — IDÉNTICO --names 38 → 0 desviadas diff generated 38 renombres 1:1 · 0 cambios de valor computed field · tabs contra la línea base ORIGINAL (anterior a las dos pasadas): 4.031 valores, 16 estados, 0 diffs huérfanos 0 · formato sin regresión · audit 163 PASS · rtl 0 · docs 0 · suite 434 pasan (1 rojo conocido) · check 0 errores en ficheros tocados La muta-prueba se reescribió contra el catálogo vivo — asertaba nombres que el codemod ya había renombrado — y gana los casos que faltaban: un knob de borde neutro es `modifier`, uno de tinta neutro es `both`, y sólo los de fondo son `state-layer`. Queda una pregunta que §38 no contesta y que NO he decidido: si un hover de borde o de tinta POR COMPONENTE debe existir siquiera. R-4.3 guarda `background*` en `:hover`, nada más. Ahora al menos se llaman como deben mientras se decide. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
/**
* Muta-prueba del clasificador `--names` (gramática D-TH.6, firmada 2026-08-20).
*
* Un guard que no se ve rojo sobre casos conocidos es un guard que pasa sobre
* el vacío. Éste asserta contra el catálogo VIVO, así que se actualiza cuando
* el catálogo se mueve — y esa es su gracia: si alguien reintroduce el idioma
* viejo, el caso correspondiente cae.
*/
refactor(eidos): el catálogo habla un idioma — 269 claves al vocabulario firmado D-TH.6, ejecutada. El slot de tinta pasa a `fg` y el modificador interactivo se pone delante, que es lo que theming §6.7 r7 documentaba sin guard desde que se escribió. Value-preserving: renombra la clave en `recipes/base.ts` y sus 793 referencias en 101 ficheros; no toca un solo valor. claves renombradas 269 en 66 componentes referencias 793 en 101 ficheros censo antes/después 162 recetas · 5.203 knobs · 1.841 públicos (37 %) · 56 sin contrato — IDÉNTICO, como debe ser un rename --names antes/después 269 desviadas → 0 Qué NO entra, y por qué: 47 `{rol}-{slot-de-rol}` canónicas: COLOR_ROLE_SLOTS pone el modificador detrás POR CONSTRUCCIÓN (`primary-solid-hover`) 13 exentas firmadas `--focus-ring-*` es familia del sistema; el color de `aura` es un sustantivo; `stop-color` ES una parte de gradient-builder 47 hovers neutros por VALOR: migran a la capa de estado (§38 + R-4.3), no se renombran — firma 3 6 ocurrencias en historia changelog, errores-toxico, PLAN-affix/background: reescribir un registro fechado lo vuelve mentira El clasificador vive en el censo (`--names`), no en un script suelto, para que el guard R-5.3 consuma la MISMA gramática que el codemod. Su muta-prueba (`__names-mutatest.ts`, 27 casos) es lo que hizo el trabajo: cazó que yo promovía al frente CUALQUIER valor declarado por el morfo, y así `--sidebar-width-icon` (la anchura del raíl colapsado) se convertía en `--sidebar-icon-width` (la anchura de un icono), que es otra cosa. La firma dice «delante lo interactivo, detrás lo dimensional y contextual»: ahora sólo promociona el vocabulario interactivo cerrado, y lo contextual —`below`, `loaded`, `vertical`, `icon`— se queda donde estaba. Los cinco casos de regresión están en la muta-prueba. También cazó que `dropdown-menu.item-bg-hover` lee `var(--color-primary-element)`: es un hover CON VALENCIA (el palette swap de recipe-contract §2), no el hover bespoke que §38 deprecó. Clasificar por el nombre lo habría metido en una migración que no le toca; se clasifica por el VALOR. Verificación (§7.4, artefacto por paso): diff de generated/ 269 renombres 1:1 · 0 cambios de valor · 22 privados reapuntados a los nombres nuevos (`__names-verify-diff`) computed tag-group · field · tabs: 6.467 valores en 23 estados, 0 diffs — y comprobado en el navegador que sirve el CSS nuevo, para que ese 0 no sea el de una copia cacheada huérfanos 0 en código suite eidos 434 pasan · 1 rojo, el conocido (`skin-media-player`). `recipe-css-contract` verde: es el guard que caza el `var()` sin fallback a un nombre que ya no se emite, o sea el fallo exacto de un rename a medias component:audit 163 PASS · 3 NEEDS-WORK, los tres SIN TOCAR por esto check 0 errores en ficheros tocados (los 73 globales son de otras sesiones de la rama; se atribuye por fichero) rtl:check 0 · docs:check 0 formato el renombrado no alarga ninguna línea: ningún fichero tiene más líneas de 100 chars que antes, así que no se pasa prettier — hacerlo reformateaba 300 ficheros de deriva ajena Entra aquí la corrección del repaso de los 7 ya hechos: `gradient-builder.checker-color` → `checker-fg` (el damero de transparencia; ahí `color` era slot). Sus `stop-color-*` no se tocan. Queda para el paso siguiente: R-5.3 no puede graduar a `error` directo mientras los 47 hovers neutros sigan hablando el idioma viejo — o migran antes (firma 3, ya firmada), o el guard necesita una exención greppable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
import { execSync } from 'node:child_process';
fix(eidos): la capa de estado es un VELO — 38 hovers que no lo eran, al idioma El codemod de ayer apartó 47 knobs «en cola de migración a la capa de estado». Al empezar esa migración se ve que sólo SEIS lo estaban: el velo de §38 es `background-image: linear-gradient(var(--state-hover), var(--state-hover))` y no alcanza nada más. De los otros 41, veintidós mueven un BORDE y diecinueve mueven la TINTA — ninguno es la capa de estado por muy neutro que sea su valor. Eran deuda de nombre, y yo los había excluido del renombrado. El clasificador tenía media prueba: miraba el VALOR (¿neutro o con valencia?) y no la PROPIEDAD. Ahora exige las dos, siguiendo un salto por privado (`--_switch-track-bg-hover`) y entre componentes (la familia calendar presta `--calendar-control-*` a month-grid, range-calendar y year-grid, y por eso esos cuatro no aparecían consumidos en su propia receta). renombres 38 en 22 componentes · 113 referencias en 30 ficheros cola real 6 (checkbox · date-range-picker ×2 · scroll-area · splitter · switch) — los únicos que pintan fondo censo 162 · 5.203 · 1.841 (37 %) · 56 — IDÉNTICO --names 38 → 0 desviadas diff generated 38 renombres 1:1 · 0 cambios de valor computed field · tabs contra la línea base ORIGINAL (anterior a las dos pasadas): 4.031 valores, 16 estados, 0 diffs huérfanos 0 · formato sin regresión · audit 163 PASS · rtl 0 · docs 0 · suite 434 pasan (1 rojo conocido) · check 0 errores en ficheros tocados La muta-prueba se reescribió contra el catálogo vivo — asertaba nombres que el codemod ya había renombrado — y gana los casos que faltaban: un knob de borde neutro es `modifier`, uno de tinta neutro es `both`, y sólo los de fondo son `state-layer`. Queda una pregunta que §38 no contesta y que NO he decidido: si un hover de borde o de tinta POR COMPONENTE debe existir siquiera. R-4.3 guarda `background*` en `:hover`, nada más. Ahora al menos se llaman como deben mientras se decide. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
refactor(eidos): el catálogo habla un idioma — 269 claves al vocabulario firmado D-TH.6, ejecutada. El slot de tinta pasa a `fg` y el modificador interactivo se pone delante, que es lo que theming §6.7 r7 documentaba sin guard desde que se escribió. Value-preserving: renombra la clave en `recipes/base.ts` y sus 793 referencias en 101 ficheros; no toca un solo valor. claves renombradas 269 en 66 componentes referencias 793 en 101 ficheros censo antes/después 162 recetas · 5.203 knobs · 1.841 públicos (37 %) · 56 sin contrato — IDÉNTICO, como debe ser un rename --names antes/después 269 desviadas → 0 Qué NO entra, y por qué: 47 `{rol}-{slot-de-rol}` canónicas: COLOR_ROLE_SLOTS pone el modificador detrás POR CONSTRUCCIÓN (`primary-solid-hover`) 13 exentas firmadas `--focus-ring-*` es familia del sistema; el color de `aura` es un sustantivo; `stop-color` ES una parte de gradient-builder 47 hovers neutros por VALOR: migran a la capa de estado (§38 + R-4.3), no se renombran — firma 3 6 ocurrencias en historia changelog, errores-toxico, PLAN-affix/background: reescribir un registro fechado lo vuelve mentira El clasificador vive en el censo (`--names`), no en un script suelto, para que el guard R-5.3 consuma la MISMA gramática que el codemod. Su muta-prueba (`__names-mutatest.ts`, 27 casos) es lo que hizo el trabajo: cazó que yo promovía al frente CUALQUIER valor declarado por el morfo, y así `--sidebar-width-icon` (la anchura del raíl colapsado) se convertía en `--sidebar-icon-width` (la anchura de un icono), que es otra cosa. La firma dice «delante lo interactivo, detrás lo dimensional y contextual»: ahora sólo promociona el vocabulario interactivo cerrado, y lo contextual —`below`, `loaded`, `vertical`, `icon`— se queda donde estaba. Los cinco casos de regresión están en la muta-prueba. También cazó que `dropdown-menu.item-bg-hover` lee `var(--color-primary-element)`: es un hover CON VALENCIA (el palette swap de recipe-contract §2), no el hover bespoke que §38 deprecó. Clasificar por el nombre lo habría metido en una migración que no le toca; se clasifica por el VALOR. Verificación (§7.4, artefacto por paso): diff de generated/ 269 renombres 1:1 · 0 cambios de valor · 22 privados reapuntados a los nombres nuevos (`__names-verify-diff`) computed tag-group · field · tabs: 6.467 valores en 23 estados, 0 diffs — y comprobado en el navegador que sirve el CSS nuevo, para que ese 0 no sea el de una copia cacheada huérfanos 0 en código suite eidos 434 pasan · 1 rojo, el conocido (`skin-media-player`). `recipe-css-contract` verde: es el guard que caza el `var()` sin fallback a un nombre que ya no se emite, o sea el fallo exacto de un rename a medias component:audit 163 PASS · 3 NEEDS-WORK, los tres SIN TOCAR por esto check 0 errores en ficheros tocados (los 73 globales son de otras sesiones de la rama; se atribuye por fichero) rtl:check 0 · docs:check 0 formato el renombrado no alarga ninguna línea: ningún fichero tiene más líneas de 100 chars que antes, así que no se pasa prettier — hacerlo reformateaba 300 ficheros de deriva ajena Entra aquí la corrección del repaso de los 7 ya hechos: `gradient-builder.checker-color` → `checker-fg` (el damero de transparencia; ahí `color` era slot). Sus `stop-color-*` no se tocan. Queda para el paso siguiente: R-5.3 no puede graduar a `error` directo mientras los 47 hovers neutros sigan hablando el idioma viejo — o migran antes (firma 3, ya firmada), o el guard necesita una exención greppable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
const out = execSync('node --import tsx/esm scripts/theming-census.ts --names --json', {
encoding: 'utf8',
maxBuffer: 1 << 28
});
type F = { component: string; key: string; klass: string; to?: string };
const all: F[] = JSON.parse(out);
const find = (c: string, k: string) => all.find((f) => f.component === c && f.key === k);
const CASES: Array<[string, string, string, string | undefined, string]> = [
fix(eidos): la capa de estado es un VELO — 38 hovers que no lo eran, al idioma El codemod de ayer apartó 47 knobs «en cola de migración a la capa de estado». Al empezar esa migración se ve que sólo SEIS lo estaban: el velo de §38 es `background-image: linear-gradient(var(--state-hover), var(--state-hover))` y no alcanza nada más. De los otros 41, veintidós mueven un BORDE y diecinueve mueven la TINTA — ninguno es la capa de estado por muy neutro que sea su valor. Eran deuda de nombre, y yo los había excluido del renombrado. El clasificador tenía media prueba: miraba el VALOR (¿neutro o con valencia?) y no la PROPIEDAD. Ahora exige las dos, siguiendo un salto por privado (`--_switch-track-bg-hover`) y entre componentes (la familia calendar presta `--calendar-control-*` a month-grid, range-calendar y year-grid, y por eso esos cuatro no aparecían consumidos en su propia receta). renombres 38 en 22 componentes · 113 referencias en 30 ficheros cola real 6 (checkbox · date-range-picker ×2 · scroll-area · splitter · switch) — los únicos que pintan fondo censo 162 · 5.203 · 1.841 (37 %) · 56 — IDÉNTICO --names 38 → 0 desviadas diff generated 38 renombres 1:1 · 0 cambios de valor computed field · tabs contra la línea base ORIGINAL (anterior a las dos pasadas): 4.031 valores, 16 estados, 0 diffs huérfanos 0 · formato sin regresión · audit 163 PASS · rtl 0 · docs 0 · suite 434 pasan (1 rojo conocido) · check 0 errores en ficheros tocados La muta-prueba se reescribió contra el catálogo vivo — asertaba nombres que el codemod ya había renombrado — y gana los casos que faltaban: un knob de borde neutro es `modifier`, uno de tinta neutro es `both`, y sólo los de fondo son `state-layer`. Queda una pregunta que §38 no contesta y que NO he decidido: si un hover de borde o de tinta POR COMPONENTE debe existir siquiera. R-4.3 guarda `background*` en `:hover`, nada más. Ahora al menos se llaman como deben mientras se decide. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
// [componente, clave, clase esperada, destino, por qué existe el caso]
// ── La gramática, ya aplicada ────────────────────────────────────────────
['accordion', 'trigger-fg', 'ok', undefined, 'tinta = fg: el caso central de la firma'],
['tabs', 'active-trigger-fg', 'ok', undefined, 'tinta + modificador delante'],
['tag-group', 'hover-primary-solid-bg', 'ok', undefined, 'modificador delante a nivel receta'],
['toggle', 'solid-hover-bg', 'ok', undefined, 'ya lo hablaba antes del codemod'],
['gradient-builder', 'checker-fg', 'ok', undefined, 'la corrección de los 7 ya revisados'],
// ── Lo que NO se toca: rol/paleta lleva el modificador DETRÁS por canon ──
['button', 'primary-solid-hover', 'role-slot', undefined, 'COLOR_ROLE_SLOTS, no deriva'],
['button', 'palette-solid-hover', 'role-slot', undefined, '24 consumos: romperla habría roto button'],
['toggle', 'palette-hover', 'role-slot', undefined, 'palette-{slot}'],
// ── Exentas firmadas ────────────────────────────────────────────────────
['accordion', 'trigger-focus-ring-color', 'exempt', undefined, 'espeja la familia del SISTEMA'],
refactor(eidos): el catálogo habla un idioma — 269 claves al vocabulario firmado D-TH.6, ejecutada. El slot de tinta pasa a `fg` y el modificador interactivo se pone delante, que es lo que theming §6.7 r7 documentaba sin guard desde que se escribió. Value-preserving: renombra la clave en `recipes/base.ts` y sus 793 referencias en 101 ficheros; no toca un solo valor. claves renombradas 269 en 66 componentes referencias 793 en 101 ficheros censo antes/después 162 recetas · 5.203 knobs · 1.841 públicos (37 %) · 56 sin contrato — IDÉNTICO, como debe ser un rename --names antes/después 269 desviadas → 0 Qué NO entra, y por qué: 47 `{rol}-{slot-de-rol}` canónicas: COLOR_ROLE_SLOTS pone el modificador detrás POR CONSTRUCCIÓN (`primary-solid-hover`) 13 exentas firmadas `--focus-ring-*` es familia del sistema; el color de `aura` es un sustantivo; `stop-color` ES una parte de gradient-builder 47 hovers neutros por VALOR: migran a la capa de estado (§38 + R-4.3), no se renombran — firma 3 6 ocurrencias en historia changelog, errores-toxico, PLAN-affix/background: reescribir un registro fechado lo vuelve mentira El clasificador vive en el censo (`--names`), no en un script suelto, para que el guard R-5.3 consuma la MISMA gramática que el codemod. Su muta-prueba (`__names-mutatest.ts`, 27 casos) es lo que hizo el trabajo: cazó que yo promovía al frente CUALQUIER valor declarado por el morfo, y así `--sidebar-width-icon` (la anchura del raíl colapsado) se convertía en `--sidebar-icon-width` (la anchura de un icono), que es otra cosa. La firma dice «delante lo interactivo, detrás lo dimensional y contextual»: ahora sólo promociona el vocabulario interactivo cerrado, y lo contextual —`below`, `loaded`, `vertical`, `icon`— se queda donde estaba. Los cinco casos de regresión están en la muta-prueba. También cazó que `dropdown-menu.item-bg-hover` lee `var(--color-primary-element)`: es un hover CON VALENCIA (el palette swap de recipe-contract §2), no el hover bespoke que §38 deprecó. Clasificar por el nombre lo habría metido en una migración que no le toca; se clasifica por el VALOR. Verificación (§7.4, artefacto por paso): diff de generated/ 269 renombres 1:1 · 0 cambios de valor · 22 privados reapuntados a los nombres nuevos (`__names-verify-diff`) computed tag-group · field · tabs: 6.467 valores en 23 estados, 0 diffs — y comprobado en el navegador que sirve el CSS nuevo, para que ese 0 no sea el de una copia cacheada huérfanos 0 en código suite eidos 434 pasan · 1 rojo, el conocido (`skin-media-player`). `recipe-css-contract` verde: es el guard que caza el `var()` sin fallback a un nombre que ya no se emite, o sea el fallo exacto de un rename a medias component:audit 163 PASS · 3 NEEDS-WORK, los tres SIN TOCAR por esto check 0 errores en ficheros tocados (los 73 globales son de otras sesiones de la rama; se atribuye por fichero) rtl:check 0 · docs:check 0 formato el renombrado no alarga ninguna línea: ningún fichero tiene más líneas de 100 chars que antes, así que no se pasa prettier — hacerlo reformateaba 300 ficheros de deriva ajena Entra aquí la corrección del repaso de los 7 ya hechos: `gradient-builder.checker-color` → `checker-fg` (el damero de transparencia; ahí `color` era slot). Sus `stop-color-*` no se tocan. Queda para el paso siguiente: R-5.3 no puede graduar a `error` directo mientras los 47 hovers neutros sigan hablando el idioma viejo — o migran antes (firma 3, ya firmada), o el guard necesita una exención greppable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
['aura', 'orb-color-idle', 'exempt', undefined, 'color como sustantivo'],
['gradient-builder', 'stop-color-title-fg', 'exempt', undefined, 'stop-color ES la parte'],
fix(eidos): la capa de estado es un VELO — 38 hovers que no lo eran, al idioma El codemod de ayer apartó 47 knobs «en cola de migración a la capa de estado». Al empezar esa migración se ve que sólo SEIS lo estaban: el velo de §38 es `background-image: linear-gradient(var(--state-hover), var(--state-hover))` y no alcanza nada más. De los otros 41, veintidós mueven un BORDE y diecinueve mueven la TINTA — ninguno es la capa de estado por muy neutro que sea su valor. Eran deuda de nombre, y yo los había excluido del renombrado. El clasificador tenía media prueba: miraba el VALOR (¿neutro o con valencia?) y no la PROPIEDAD. Ahora exige las dos, siguiendo un salto por privado (`--_switch-track-bg-hover`) y entre componentes (la familia calendar presta `--calendar-control-*` a month-grid, range-calendar y year-grid, y por eso esos cuatro no aparecían consumidos en su propia receta). renombres 38 en 22 componentes · 113 referencias en 30 ficheros cola real 6 (checkbox · date-range-picker ×2 · scroll-area · splitter · switch) — los únicos que pintan fondo censo 162 · 5.203 · 1.841 (37 %) · 56 — IDÉNTICO --names 38 → 0 desviadas diff generated 38 renombres 1:1 · 0 cambios de valor computed field · tabs contra la línea base ORIGINAL (anterior a las dos pasadas): 4.031 valores, 16 estados, 0 diffs huérfanos 0 · formato sin regresión · audit 163 PASS · rtl 0 · docs 0 · suite 434 pasan (1 rojo conocido) · check 0 errores en ficheros tocados La muta-prueba se reescribió contra el catálogo vivo — asertaba nombres que el codemod ya había renombrado — y gana los casos que faltaban: un knob de borde neutro es `modifier`, uno de tinta neutro es `both`, y sólo los de fondo son `state-layer`. Queda una pregunta que §38 no contesta y que NO he decidido: si un hover de borde o de tinta POR COMPONENTE debe existir siquiera. R-4.3 guarda `background*` en `:hover`, nada más. Ahora al menos se llaman como deben mientras se decide. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
// ── Contextual DETRÁS — la otra mitad de la firma ────────────────────────
// Sin estos casos el clasificador promovía cualquier valor del morfo y
// reescribía --sidebar-width-icon (el raíl colapsado) como
// --sidebar-icon-width (la anchura de un icono).
['sidebar', 'width-icon', 'ok', undefined, 'modo colapsado: contextual'],
refactor(eidos): el catálogo habla un idioma — 269 claves al vocabulario firmado D-TH.6, ejecutada. El slot de tinta pasa a `fg` y el modificador interactivo se pone delante, que es lo que theming §6.7 r7 documentaba sin guard desde que se escribió. Value-preserving: renombra la clave en `recipes/base.ts` y sus 793 referencias en 101 ficheros; no toca un solo valor. claves renombradas 269 en 66 componentes referencias 793 en 101 ficheros censo antes/después 162 recetas · 5.203 knobs · 1.841 públicos (37 %) · 56 sin contrato — IDÉNTICO, como debe ser un rename --names antes/después 269 desviadas → 0 Qué NO entra, y por qué: 47 `{rol}-{slot-de-rol}` canónicas: COLOR_ROLE_SLOTS pone el modificador detrás POR CONSTRUCCIÓN (`primary-solid-hover`) 13 exentas firmadas `--focus-ring-*` es familia del sistema; el color de `aura` es un sustantivo; `stop-color` ES una parte de gradient-builder 47 hovers neutros por VALOR: migran a la capa de estado (§38 + R-4.3), no se renombran — firma 3 6 ocurrencias en historia changelog, errores-toxico, PLAN-affix/background: reescribir un registro fechado lo vuelve mentira El clasificador vive en el censo (`--names`), no en un script suelto, para que el guard R-5.3 consuma la MISMA gramática que el codemod. Su muta-prueba (`__names-mutatest.ts`, 27 casos) es lo que hizo el trabajo: cazó que yo promovía al frente CUALQUIER valor declarado por el morfo, y así `--sidebar-width-icon` (la anchura del raíl colapsado) se convertía en `--sidebar-icon-width` (la anchura de un icono), que es otra cosa. La firma dice «delante lo interactivo, detrás lo dimensional y contextual»: ahora sólo promociona el vocabulario interactivo cerrado, y lo contextual —`below`, `loaded`, `vertical`, `icon`— se queda donde estaba. Los cinco casos de regresión están en la muta-prueba. También cazó que `dropdown-menu.item-bg-hover` lee `var(--color-primary-element)`: es un hover CON VALENCIA (el palette swap de recipe-contract §2), no el hover bespoke que §38 deprecó. Clasificar por el nombre lo habría metido en una migración que no le toca; se clasifica por el VALOR. Verificación (§7.4, artefacto por paso): diff de generated/ 269 renombres 1:1 · 0 cambios de valor · 22 privados reapuntados a los nombres nuevos (`__names-verify-diff`) computed tag-group · field · tabs: 6.467 valores en 23 estados, 0 diffs — y comprobado en el navegador que sirve el CSS nuevo, para que ese 0 no sea el de una copia cacheada huérfanos 0 en código suite eidos 434 pasan · 1 rojo, el conocido (`skin-media-player`). `recipe-css-contract` verde: es el guard que caza el `var()` sin fallback a un nombre que ya no se emite, o sea el fallo exacto de un rename a medias component:audit 163 PASS · 3 NEEDS-WORK, los tres SIN TOCAR por esto check 0 errores en ficheros tocados (los 73 globales son de otras sesiones de la rama; se atribuye por fichero) rtl:check 0 · docs:check 0 formato el renombrado no alarga ninguna línea: ningún fichero tiene más líneas de 100 chars que antes, así que no se pasa prettier — hacerlo reformateaba 300 ficheros de deriva ajena Entra aquí la corrección del repaso de los 7 ya hechos: `gradient-builder.checker-color` → `checker-fg` (el damero de transparencia; ahí `color` era slot). Sus `stop-color-*` no se tocan. Queda para el paso siguiente: R-5.3 no puede graduar a `error` directo mientras los 47 hovers neutros sigan hablando el idioma viejo — o migran antes (firma 3, ya firmada), o el guard necesita una exención greppable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
['radio-group', 'gap-vertical', 'ok', undefined, 'orientación: contextual'],
['meter', 'indicator-bg-below', 'ok', undefined, 'zona semántica: contextual'],
['progress', 'indicator-bg-loaded', 'ok', undefined, 'contextual, no interactivo'],
fix(eidos): la capa de estado es un VELO — 38 hovers que no lo eran, al idioma El codemod de ayer apartó 47 knobs «en cola de migración a la capa de estado». Al empezar esa migración se ve que sólo SEIS lo estaban: el velo de §38 es `background-image: linear-gradient(var(--state-hover), var(--state-hover))` y no alcanza nada más. De los otros 41, veintidós mueven un BORDE y diecinueve mueven la TINTA — ninguno es la capa de estado por muy neutro que sea su valor. Eran deuda de nombre, y yo los había excluido del renombrado. El clasificador tenía media prueba: miraba el VALOR (¿neutro o con valencia?) y no la PROPIEDAD. Ahora exige las dos, siguiendo un salto por privado (`--_switch-track-bg-hover`) y entre componentes (la familia calendar presta `--calendar-control-*` a month-grid, range-calendar y year-grid, y por eso esos cuatro no aparecían consumidos en su propia receta). renombres 38 en 22 componentes · 113 referencias en 30 ficheros cola real 6 (checkbox · date-range-picker ×2 · scroll-area · splitter · switch) — los únicos que pintan fondo censo 162 · 5.203 · 1.841 (37 %) · 56 — IDÉNTICO --names 38 → 0 desviadas diff generated 38 renombres 1:1 · 0 cambios de valor computed field · tabs contra la línea base ORIGINAL (anterior a las dos pasadas): 4.031 valores, 16 estados, 0 diffs huérfanos 0 · formato sin regresión · audit 163 PASS · rtl 0 · docs 0 · suite 434 pasan (1 rojo conocido) · check 0 errores en ficheros tocados La muta-prueba se reescribió contra el catálogo vivo — asertaba nombres que el codemod ya había renombrado — y gana los casos que faltaban: un knob de borde neutro es `modifier`, uno de tinta neutro es `both`, y sólo los de fondo son `state-layer`. Queda una pregunta que §38 no contesta y que NO he decidido: si un hover de borde o de tinta POR COMPONENTE debe existir siquiera. R-4.3 guarda `background*` en `:hover`, nada más. Ahora al menos se llaman como deben mientras se decide. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
['drawer', 'footer-margin-top', 'ok', undefined, 'eje dimensional'],
// ── Capa de estado: lo decide el VALOR **y** la PROPIEDAD ────────────────
// El velo de §38 es background-image. Un hover de borde o de tinta no es la
// capa de estado por muy neutro que sea su valor: es deuda de nombre.
['splitter', 'handle-bg-hover', 'state-layer', undefined, 'neutro Y pinta fondo'],
['scroll-area', 'thumb-bg-hover', 'state-layer', undefined, 'neutro Y pinta fondo'],
['switch', 'track-bg-off-hover', 'state-layer', undefined, 'fondo vía privado, un salto'],
['field', 'control-border-hover', 'modifier', 'hover-control-border', 'BORDE: no es la capa de estado'],
['tabs', 'trigger-color-hover', 'both', 'hover-trigger-fg', 'TINTA: no es la capa de estado'],
['dropdown-menu', 'hover-item-bg', 'ok', undefined, 'acento (--color-primary-element): palette swap legítimo'],
['pagination', 'hover-selected-bg', 'ok', undefined, 'acento: se renombró, no migra']
refactor(eidos): el catálogo habla un idioma — 269 claves al vocabulario firmado D-TH.6, ejecutada. El slot de tinta pasa a `fg` y el modificador interactivo se pone delante, que es lo que theming §6.7 r7 documentaba sin guard desde que se escribió. Value-preserving: renombra la clave en `recipes/base.ts` y sus 793 referencias en 101 ficheros; no toca un solo valor. claves renombradas 269 en 66 componentes referencias 793 en 101 ficheros censo antes/después 162 recetas · 5.203 knobs · 1.841 públicos (37 %) · 56 sin contrato — IDÉNTICO, como debe ser un rename --names antes/después 269 desviadas → 0 Qué NO entra, y por qué: 47 `{rol}-{slot-de-rol}` canónicas: COLOR_ROLE_SLOTS pone el modificador detrás POR CONSTRUCCIÓN (`primary-solid-hover`) 13 exentas firmadas `--focus-ring-*` es familia del sistema; el color de `aura` es un sustantivo; `stop-color` ES una parte de gradient-builder 47 hovers neutros por VALOR: migran a la capa de estado (§38 + R-4.3), no se renombran — firma 3 6 ocurrencias en historia changelog, errores-toxico, PLAN-affix/background: reescribir un registro fechado lo vuelve mentira El clasificador vive en el censo (`--names`), no en un script suelto, para que el guard R-5.3 consuma la MISMA gramática que el codemod. Su muta-prueba (`__names-mutatest.ts`, 27 casos) es lo que hizo el trabajo: cazó que yo promovía al frente CUALQUIER valor declarado por el morfo, y así `--sidebar-width-icon` (la anchura del raíl colapsado) se convertía en `--sidebar-icon-width` (la anchura de un icono), que es otra cosa. La firma dice «delante lo interactivo, detrás lo dimensional y contextual»: ahora sólo promociona el vocabulario interactivo cerrado, y lo contextual —`below`, `loaded`, `vertical`, `icon`— se queda donde estaba. Los cinco casos de regresión están en la muta-prueba. También cazó que `dropdown-menu.item-bg-hover` lee `var(--color-primary-element)`: es un hover CON VALENCIA (el palette swap de recipe-contract §2), no el hover bespoke que §38 deprecó. Clasificar por el nombre lo habría metido en una migración que no le toca; se clasifica por el VALOR. Verificación (§7.4, artefacto por paso): diff de generated/ 269 renombres 1:1 · 0 cambios de valor · 22 privados reapuntados a los nombres nuevos (`__names-verify-diff`) computed tag-group · field · tabs: 6.467 valores en 23 estados, 0 diffs — y comprobado en el navegador que sirve el CSS nuevo, para que ese 0 no sea el de una copia cacheada huérfanos 0 en código suite eidos 434 pasan · 1 rojo, el conocido (`skin-media-player`). `recipe-css-contract` verde: es el guard que caza el `var()` sin fallback a un nombre que ya no se emite, o sea el fallo exacto de un rename a medias component:audit 163 PASS · 3 NEEDS-WORK, los tres SIN TOCAR por esto check 0 errores en ficheros tocados (los 73 globales son de otras sesiones de la rama; se atribuye por fichero) rtl:check 0 · docs:check 0 formato el renombrado no alarga ninguna línea: ningún fichero tiene más líneas de 100 chars que antes, así que no se pasa prettier — hacerlo reformateaba 300 ficheros de deriva ajena Entra aquí la corrección del repaso de los 7 ya hechos: `gradient-builder.checker-color` → `checker-fg` (el damero de transparencia; ahí `color` era slot). Sus `stop-color-*` no se tocan. Queda para el paso siguiente: R-5.3 no puede graduar a `error` directo mientras los 47 hovers neutros sigan hablando el idioma viejo — o migran antes (firma 3, ya firmada), o el guard necesita una exención greppable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
];
let bad = 0;
for (const [c, k, klass, to, why] of CASES) {
const f = find(c, k);
if (!f) {
console.log(` ? ${c}.${k} — NO EXISTE en el catálogo (${why})`);
bad++;
continue;
}
const okKlass = f.klass === klass;
const okTo = to === undefined ? !f.to : f.to === to;
if (okKlass && okTo) console.log(` ok ${c}.${k} → ${f.klass}${f.to ? ' / ' + f.to : ''}`);
else {
fix(eidos): la capa de estado es un VELO — 38 hovers que no lo eran, al idioma El codemod de ayer apartó 47 knobs «en cola de migración a la capa de estado». Al empezar esa migración se ve que sólo SEIS lo estaban: el velo de §38 es `background-image: linear-gradient(var(--state-hover), var(--state-hover))` y no alcanza nada más. De los otros 41, veintidós mueven un BORDE y diecinueve mueven la TINTA — ninguno es la capa de estado por muy neutro que sea su valor. Eran deuda de nombre, y yo los había excluido del renombrado. El clasificador tenía media prueba: miraba el VALOR (¿neutro o con valencia?) y no la PROPIEDAD. Ahora exige las dos, siguiendo un salto por privado (`--_switch-track-bg-hover`) y entre componentes (la familia calendar presta `--calendar-control-*` a month-grid, range-calendar y year-grid, y por eso esos cuatro no aparecían consumidos en su propia receta). renombres 38 en 22 componentes · 113 referencias en 30 ficheros cola real 6 (checkbox · date-range-picker ×2 · scroll-area · splitter · switch) — los únicos que pintan fondo censo 162 · 5.203 · 1.841 (37 %) · 56 — IDÉNTICO --names 38 → 0 desviadas diff generated 38 renombres 1:1 · 0 cambios de valor computed field · tabs contra la línea base ORIGINAL (anterior a las dos pasadas): 4.031 valores, 16 estados, 0 diffs huérfanos 0 · formato sin regresión · audit 163 PASS · rtl 0 · docs 0 · suite 434 pasan (1 rojo conocido) · check 0 errores en ficheros tocados La muta-prueba se reescribió contra el catálogo vivo — asertaba nombres que el codemod ya había renombrado — y gana los casos que faltaban: un knob de borde neutro es `modifier`, uno de tinta neutro es `both`, y sólo los de fondo son `state-layer`. Queda una pregunta que §38 no contesta y que NO he decidido: si un hover de borde o de tinta POR COMPONENTE debe existir siquiera. R-4.3 guarda `background*` en `:hover`, nada más. Ahora al menos se llaman como deben mientras se decide. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
console.log(
` XX ${c}.${k} → ${f.klass}${f.to ? ' / ' + f.to : ''} ESPERADO ${klass}${to ? ' / ' + to : ''} (${why})`
);
refactor(eidos): el catálogo habla un idioma — 269 claves al vocabulario firmado D-TH.6, ejecutada. El slot de tinta pasa a `fg` y el modificador interactivo se pone delante, que es lo que theming §6.7 r7 documentaba sin guard desde que se escribió. Value-preserving: renombra la clave en `recipes/base.ts` y sus 793 referencias en 101 ficheros; no toca un solo valor. claves renombradas 269 en 66 componentes referencias 793 en 101 ficheros censo antes/después 162 recetas · 5.203 knobs · 1.841 públicos (37 %) · 56 sin contrato — IDÉNTICO, como debe ser un rename --names antes/después 269 desviadas → 0 Qué NO entra, y por qué: 47 `{rol}-{slot-de-rol}` canónicas: COLOR_ROLE_SLOTS pone el modificador detrás POR CONSTRUCCIÓN (`primary-solid-hover`) 13 exentas firmadas `--focus-ring-*` es familia del sistema; el color de `aura` es un sustantivo; `stop-color` ES una parte de gradient-builder 47 hovers neutros por VALOR: migran a la capa de estado (§38 + R-4.3), no se renombran — firma 3 6 ocurrencias en historia changelog, errores-toxico, PLAN-affix/background: reescribir un registro fechado lo vuelve mentira El clasificador vive en el censo (`--names`), no en un script suelto, para que el guard R-5.3 consuma la MISMA gramática que el codemod. Su muta-prueba (`__names-mutatest.ts`, 27 casos) es lo que hizo el trabajo: cazó que yo promovía al frente CUALQUIER valor declarado por el morfo, y así `--sidebar-width-icon` (la anchura del raíl colapsado) se convertía en `--sidebar-icon-width` (la anchura de un icono), que es otra cosa. La firma dice «delante lo interactivo, detrás lo dimensional y contextual»: ahora sólo promociona el vocabulario interactivo cerrado, y lo contextual —`below`, `loaded`, `vertical`, `icon`— se queda donde estaba. Los cinco casos de regresión están en la muta-prueba. También cazó que `dropdown-menu.item-bg-hover` lee `var(--color-primary-element)`: es un hover CON VALENCIA (el palette swap de recipe-contract §2), no el hover bespoke que §38 deprecó. Clasificar por el nombre lo habría metido en una migración que no le toca; se clasifica por el VALOR. Verificación (§7.4, artefacto por paso): diff de generated/ 269 renombres 1:1 · 0 cambios de valor · 22 privados reapuntados a los nombres nuevos (`__names-verify-diff`) computed tag-group · field · tabs: 6.467 valores en 23 estados, 0 diffs — y comprobado en el navegador que sirve el CSS nuevo, para que ese 0 no sea el de una copia cacheada huérfanos 0 en código suite eidos 434 pasan · 1 rojo, el conocido (`skin-media-player`). `recipe-css-contract` verde: es el guard que caza el `var()` sin fallback a un nombre que ya no se emite, o sea el fallo exacto de un rename a medias component:audit 163 PASS · 3 NEEDS-WORK, los tres SIN TOCAR por esto check 0 errores en ficheros tocados (los 73 globales son de otras sesiones de la rama; se atribuye por fichero) rtl:check 0 · docs:check 0 formato el renombrado no alarga ninguna línea: ningún fichero tiene más líneas de 100 chars que antes, así que no se pasa prettier — hacerlo reformateaba 300 ficheros de deriva ajena Entra aquí la corrección del repaso de los 7 ya hechos: `gradient-builder.checker-color` → `checker-fg` (el damero de transparencia; ahí `color` era slot). Sus `stop-color-*` no se tocan. Queda para el paso siguiente: R-5.3 no puede graduar a `error` directo mientras los 47 hovers neutros sigan hablando el idioma viejo — o migran antes (firma 3, ya firmada), o el guard necesita una exención greppable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
bad++;
}
}
console.log(bad === 0 ? '\nMUTA-PRUEBA VERDE' : `\nMUTA-PRUEBA ROJA: ${bad} caso(s)`);
process.exit(bad === 0 ? 0 : 1);

Powered by TurnKey Linux.