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/docs/audit/theming/feed.md

102 lines
5.8 KiB

docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
# feed — alcance de tema: análisis y propuesta
> Generado por `node --import tsx/esm scripts/theming-census.ts --report`.
> Lo **medido** y la **propuesta** se regeneran; el **Veredicto** (§5) se conserva.
> Vista de conjunto: [README](./README.md) · método y protocolo:
> [`PLAN-theming.md`](../../process/PLAN-theming.md) §1, §2, §7.
feat(feed): temable — 0 % → 94 %, y cierra el bloque F2-A Octavo y último del bloque. censo 0 % → 94 % · global 43 % computed reposo y las CINCO tallas, idénticas al byte **El título no escala por talla: escala por NIVEL DE ENCABEZADO.** El informe leyó sus cuatro valores como una colisión de `size`, y son `aria-level` 3..6 — un encabezado más profundo es más pequeño porque es más profundo. Sus tokens son `article-title-font-size-{3,4,5,6}`, no coordenadas de talla. Tercera corrección de este tipo a un veredicto en el bloque. **El ⚠ del `sentinel` eran DOS medidas**, como sospechaba el veredicto: la fila-sonda mantiene un alto mínimo para que el observador tenga algo que intersecar, y el spinner que va dentro tiene su propio diámetro. El feed tipa por debajo del 1:1 de md en adelante, como `table` y `tree-grid`; la coordenada lo nombra en vez de esconderlo. **Sobre la medición, que aquí hubo que trabajarla.** La sonda dio 7 diffs y ninguno era un cambio: - el `box-shadow` del nodo `[data-busy]` está ANIMADO, y la sonda congela `transition` pero nunca `animation` —a propósito, porque congelarla impide que Presence monte nada—, así que lo muestrea en una fase distinta cada vez: dos corridas del MISMO código dan cinco diffs; - y el estado `hover` se mide después de haber forzado las tallas, así que su altura arrastra la última. Lo que decide es que las SEIS medidas estables —reposo y las cinco tallas— salieron idénticas al byte: 544,5 · 564,5 · 628,5 · 792,5 · 966,5 px. Queda escrito en el README para que el siguiente no persiga el mismo fantasma. audit PASS · eidos-lint 0 invalid · rtl 0 · docs 0 · check 0 en tocados · suite: sólo el rojo conocido Demo con tab Tokens: 50 filas, 0 sin computar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
- **Medido**: 2026-08-20 · **Alcance**: **94%** — 30 de 32 knobs por token público
- **Knobs de apariencia**: 33 — público 30 · privado 0 · global 1 · literal 1 · sistema 1 _(fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 50 pública(s) — `font-size-xs`, `font-size-sm`, `font-size-md`, `font-size-lg`, `font-size-xl`, `article-padding-block-xs`, `article-padding-block-sm`, `article-padding-block-md`, `article-padding-block-lg`, `article-padding-block-xl`, `article-padding-inline-xs`, `article-padding-inline-sm`, `article-padding-inline-md`, `article-padding-inline-lg`, `article-padding-inline-xl`, `thread-indent-xs`, `thread-indent-sm`, `thread-indent-md`, `thread-indent-lg`, `thread-indent-xl`, `font-size`, `article-padding-block`, `article-padding-inline`, `thread-indent`, `radius`, `font-family`, `line-height`, `fg`, `border-width`, `divider`, `gap`, `surface-bg`, `article-gap`, `article-title-fg`, `article-title-font-weight`, `article-title-font-size-3`, `article-title-font-size-4`, `article-title-font-size-5`, `article-title-font-size-6`, `article-description-fg`, `thread-margin-block-start`, `thread-rail-width`, `sentinel-min-block-size`, `sentinel-fg`, `sentinel-font-size`, `sentinel-spinner-size`, `sentinel-spinner-width`, `sentinel-spinner-gap`, `sentinel-spinner-duration`, `sentinel-spinner-reduced-duration` · 2 privada(s) forward — `_palette-solid`, `_palette-element`
- **Eje `size`**: no · **ficheros**: `feed.css`
docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
## 1. Knobs fuera de alcance
feat(feed): temable — 0 % → 94 %, y cierra el bloque F2-A Octavo y último del bloque. censo 0 % → 94 % · global 43 % computed reposo y las CINCO tallas, idénticas al byte **El título no escala por talla: escala por NIVEL DE ENCABEZADO.** El informe leyó sus cuatro valores como una colisión de `size`, y son `aria-level` 3..6 — un encabezado más profundo es más pequeño porque es más profundo. Sus tokens son `article-title-font-size-{3,4,5,6}`, no coordenadas de talla. Tercera corrección de este tipo a un veredicto en el bloque. **El ⚠ del `sentinel` eran DOS medidas**, como sospechaba el veredicto: la fila-sonda mantiene un alto mínimo para que el observador tenga algo que intersecar, y el spinner que va dentro tiene su propio diámetro. El feed tipa por debajo del 1:1 de md en adelante, como `table` y `tree-grid`; la coordenada lo nombra en vez de esconderlo. **Sobre la medición, que aquí hubo que trabajarla.** La sonda dio 7 diffs y ninguno era un cambio: - el `box-shadow` del nodo `[data-busy]` está ANIMADO, y la sonda congela `transition` pero nunca `animation` —a propósito, porque congelarla impide que Presence monte nada—, así que lo muestrea en una fase distinta cada vez: dos corridas del MISMO código dan cinco diffs; - y el estado `hover` se mide después de haber forzado las tallas, así que su altura arrastra la última. Lo que decide es que las SEIS medidas estables —reposo y las cinco tallas— salieron idénticas al byte: 544,5 · 564,5 · 628,5 · 792,5 · 966,5 px. Queda escrito en el README para que el siguiente no persiga el mismo fantasma. audit PASS · eidos-lint 0 invalid · rtl 0 · docs 0 · check 0 en tocados · suite: sólo el rojo conocido Demo con tab Tokens: 50 filas, 0 sin computar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
### 1.1 Directo a primitivo global (1)
docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
feat(feed): temable — 0 % → 94 %, y cierra el bloque F2-A Octavo y último del bloque. censo 0 % → 94 % · global 43 % computed reposo y las CINCO tallas, idénticas al byte **El título no escala por talla: escala por NIVEL DE ENCABEZADO.** El informe leyó sus cuatro valores como una colisión de `size`, y son `aria-level` 3..6 — un encabezado más profundo es más pequeño porque es más profundo. Sus tokens son `article-title-font-size-{3,4,5,6}`, no coordenadas de talla. Tercera corrección de este tipo a un veredicto en el bloque. **El ⚠ del `sentinel` eran DOS medidas**, como sospechaba el veredicto: la fila-sonda mantiene un alto mínimo para que el observador tenga algo que intersecar, y el spinner que va dentro tiene su propio diámetro. El feed tipa por debajo del 1:1 de md en adelante, como `table` y `tree-grid`; la coordenada lo nombra en vez de esconderlo. **Sobre la medición, que aquí hubo que trabajarla.** La sonda dio 7 diffs y ninguno era un cambio: - el `box-shadow` del nodo `[data-busy]` está ANIMADO, y la sonda congela `transition` pero nunca `animation` —a propósito, porque congelarla impide que Presence monte nada—, así que lo muestrea en una fase distinta cada vez: dos corridas del MISMO código dan cinco diffs; - y el estado `hover` se mide después de haber forzado las tallas, así que su altura arrastra la última. Lo que decide es que las SEIS medidas estables —reposo y las cinco tallas— salieron idénticas al byte: 544,5 · 564,5 · 628,5 · 792,5 · 966,5 px. Queda escrito en el README para que el siguiente no persiga el mismo fantasma. audit PASS · eidos-lint 0 invalid · rtl 0 · docs 0 · check 0 en tocados · suite: sólo el rojo conocido Demo con tab Tokens: 50 filas, 0 sin computar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
| 1 | `feed.css:155` | `[data-feed][data-busy] [data-feed-sentinel]::before` | `border-radius` | `var(--radius-full)` |
docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
feat(feed): temable — 0 % → 94 %, y cierra el bloque F2-A Octavo y último del bloque. censo 0 % → 94 % · global 43 % computed reposo y las CINCO tallas, idénticas al byte **El título no escala por talla: escala por NIVEL DE ENCABEZADO.** El informe leyó sus cuatro valores como una colisión de `size`, y son `aria-level` 3..6 — un encabezado más profundo es más pequeño porque es más profundo. Sus tokens son `article-title-font-size-{3,4,5,6}`, no coordenadas de talla. Tercera corrección de este tipo a un veredicto en el bloque. **El ⚠ del `sentinel` eran DOS medidas**, como sospechaba el veredicto: la fila-sonda mantiene un alto mínimo para que el observador tenga algo que intersecar, y el spinner que va dentro tiene su propio diámetro. El feed tipa por debajo del 1:1 de md en adelante, como `table` y `tree-grid`; la coordenada lo nombra en vez de esconderlo. **Sobre la medición, que aquí hubo que trabajarla.** La sonda dio 7 diffs y ninguno era un cambio: - el `box-shadow` del nodo `[data-busy]` está ANIMADO, y la sonda congela `transition` pero nunca `animation` —a propósito, porque congelarla impide que Presence monte nada—, así que lo muestrea en una fase distinta cada vez: dos corridas del MISMO código dan cinco diffs; - y el estado `hover` se mide después de haber forzado las tallas, así que su altura arrastra la última. Lo que decide es que las SEIS medidas estables —reposo y las cinco tallas— salieron idénticas al byte: 544,5 · 564,5 · 628,5 · 792,5 · 966,5 px. Queda escrito en el README para que el siguiente no persiga el mismo fantasma. audit PASS · eidos-lint 0 invalid · rtl 0 · docs 0 · check 0 en tocados · suite: sólo el rojo conocido Demo con tab Tokens: 50 filas, 0 sin computar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
### 1.2 A través de un privado (0)
_Ninguno._
### 1.3 Literales (1)
docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
feat(feed): temable — 0 % → 94 %, y cierra el bloque F2-A Octavo y último del bloque. censo 0 % → 94 % · global 43 % computed reposo y las CINCO tallas, idénticas al byte **El título no escala por talla: escala por NIVEL DE ENCABEZADO.** El informe leyó sus cuatro valores como una colisión de `size`, y son `aria-level` 3..6 — un encabezado más profundo es más pequeño porque es más profundo. Sus tokens son `article-title-font-size-{3,4,5,6}`, no coordenadas de talla. Tercera corrección de este tipo a un veredicto en el bloque. **El ⚠ del `sentinel` eran DOS medidas**, como sospechaba el veredicto: la fila-sonda mantiene un alto mínimo para que el observador tenga algo que intersecar, y el spinner que va dentro tiene su propio diámetro. El feed tipa por debajo del 1:1 de md en adelante, como `table` y `tree-grid`; la coordenada lo nombra en vez de esconderlo. **Sobre la medición, que aquí hubo que trabajarla.** La sonda dio 7 diffs y ninguno era un cambio: - el `box-shadow` del nodo `[data-busy]` está ANIMADO, y la sonda congela `transition` pero nunca `animation` —a propósito, porque congelarla impide que Presence monte nada—, así que lo muestrea en una fase distinta cada vez: dos corridas del MISMO código dan cinco diffs; - y el estado `hover` se mide después de haber forzado las tallas, así que su altura arrastra la última. Lo que decide es que las SEIS medidas estables —reposo y las cinco tallas— salieron idénticas al byte: 544,5 · 564,5 · 628,5 · 792,5 · 966,5 px. Queda escrito en el README para que el siguiente no persiga el mismo fantasma. audit PASS · eidos-lint 0 invalid · rtl 0 · docs 0 · check 0 en tocados · suite: sólo el rojo conocido Demo con tab Tokens: 50 filas, 0 sin computar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
| 1 | `feed.css:30` | `[data-feed-root][data-block]` | `inline-size` | `100%` |
docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
## 2. Sistema transversal (1) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).
| # | fichero:línea | selector | propiedad | valor |
| ---: | --- | --- | --- | --- |
feat(feed): temable — 0 % → 94 %, y cierra el bloque F2-A Octavo y último del bloque. censo 0 % → 94 % · global 43 % computed reposo y las CINCO tallas, idénticas al byte **El título no escala por talla: escala por NIVEL DE ENCABEZADO.** El informe leyó sus cuatro valores como una colisión de `size`, y son `aria-level` 3..6 — un encabezado más profundo es más pequeño porque es más profundo. Sus tokens son `article-title-font-size-{3,4,5,6}`, no coordenadas de talla. Tercera corrección de este tipo a un veredicto en el bloque. **El ⚠ del `sentinel` eran DOS medidas**, como sospechaba el veredicto: la fila-sonda mantiene un alto mínimo para que el observador tenga algo que intersecar, y el spinner que va dentro tiene su propio diámetro. El feed tipa por debajo del 1:1 de md en adelante, como `table` y `tree-grid`; la coordenada lo nombra en vez de esconderlo. **Sobre la medición, que aquí hubo que trabajarla.** La sonda dio 7 diffs y ninguno era un cambio: - el `box-shadow` del nodo `[data-busy]` está ANIMADO, y la sonda congela `transition` pero nunca `animation` —a propósito, porque congelarla impide que Presence monte nada—, así que lo muestrea en una fase distinta cada vez: dos corridas del MISMO código dan cinco diffs; - y el estado `hover` se mide después de haber forzado las tallas, así que su altura arrastra la última. Lo que decide es que las SEIS medidas estables —reposo y las cinco tallas— salieron idénticas al byte: 544,5 · 564,5 · 628,5 · 792,5 · 966,5 px. Queda escrito en el README para que el siguiente no persiga el mismo fantasma. audit PASS · eidos-lint 0 invalid · rtl 0 · docs 0 · check 0 en tocados · suite: sólo el rojo conocido Demo con tab Tokens: 50 filas, 0 sin computar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
| 1 | `feed.css:86` | `[data-feed-article]:focus-visible` | `outline` | `var(--focus-ring-width) solid var(--focus-ring-color)` |
docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
## 3. Privados de la receta — ¿de dónde sale su valor?
feat(feed): temable — 0 % → 94 %, y cierra el bloque F2-A Octavo y último del bloque. censo 0 % → 94 % · global 43 % computed reposo y las CINCO tallas, idénticas al byte **El título no escala por talla: escala por NIVEL DE ENCABEZADO.** El informe leyó sus cuatro valores como una colisión de `size`, y son `aria-level` 3..6 — un encabezado más profundo es más pequeño porque es más profundo. Sus tokens son `article-title-font-size-{3,4,5,6}`, no coordenadas de talla. Tercera corrección de este tipo a un veredicto en el bloque. **El ⚠ del `sentinel` eran DOS medidas**, como sospechaba el veredicto: la fila-sonda mantiene un alto mínimo para que el observador tenga algo que intersecar, y el spinner que va dentro tiene su propio diámetro. El feed tipa por debajo del 1:1 de md en adelante, como `table` y `tree-grid`; la coordenada lo nombra en vez de esconderlo. **Sobre la medición, que aquí hubo que trabajarla.** La sonda dio 7 diffs y ninguno era un cambio: - el `box-shadow` del nodo `[data-busy]` está ANIMADO, y la sonda congela `transition` pero nunca `animation` —a propósito, porque congelarla impide que Presence monte nada—, así que lo muestrea en una fase distinta cada vez: dos corridas del MISMO código dan cinco diffs; - y el estado `hover` se mide después de haber forzado las tallas, así que su altura arrastra la última. Lo que decide es que las SEIS medidas estables —reposo y las cinco tallas— salieron idénticas al byte: 544,5 · 564,5 · 628,5 · 792,5 · 966,5 px. Queda escrito en el README para que el siguiente no persiga el mismo fantasma. audit PASS · eidos-lint 0 invalid · rtl 0 · docs 0 · check 0 en tocados · suite: sólo el rojo conocido Demo con tab Tokens: 50 filas, 0 sin computar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
_La receta no declara privados propios en su CSS._
docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
Consumidos y **no declarados en el CSS** (vienen de `base.ts` o de un estilo inline del wrapper): `--_feed-palette-element`, `--_feed-palette-solid`.
## 4. Propuesta de corrección
feat(feed): temable — 0 % → 94 %, y cierra el bloque F2-A Octavo y último del bloque. censo 0 % → 94 % · global 43 % computed reposo y las CINCO tallas, idénticas al byte **El título no escala por talla: escala por NIVEL DE ENCABEZADO.** El informe leyó sus cuatro valores como una colisión de `size`, y son `aria-level` 3..6 — un encabezado más profundo es más pequeño porque es más profundo. Sus tokens son `article-title-font-size-{3,4,5,6}`, no coordenadas de talla. Tercera corrección de este tipo a un veredicto en el bloque. **El ⚠ del `sentinel` eran DOS medidas**, como sospechaba el veredicto: la fila-sonda mantiene un alto mínimo para que el observador tenga algo que intersecar, y el spinner que va dentro tiene su propio diámetro. El feed tipa por debajo del 1:1 de md en adelante, como `table` y `tree-grid`; la coordenada lo nombra en vez de esconderlo. **Sobre la medición, que aquí hubo que trabajarla.** La sonda dio 7 diffs y ninguno era un cambio: - el `box-shadow` del nodo `[data-busy]` está ANIMADO, y la sonda congela `transition` pero nunca `animation` —a propósito, porque congelarla impide que Presence monte nada—, así que lo muestrea en una fase distinta cada vez: dos corridas del MISMO código dan cinco diffs; - y el estado `hover` se mide después de haber forzado las tallas, así que su altura arrastra la última. Lo que decide es que las SEIS medidas estables —reposo y las cinco tallas— salieron idénticas al byte: 544,5 · 564,5 · 628,5 · 792,5 · 966,5 px. Queda escrito en el README para que el siguiente no persiga el mismo fantasma. audit PASS · eidos-lint 0 invalid · rtl 0 · docs 0 · check 0 en tocados · suite: sólo el rojo conocido Demo con tab Tokens: 50 filas, 0 sin computar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
### 4.1 Tokens a declarar en `lib/recipes/base.ts` (1)
docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
Valor **verbatim** del CSS de hoy: el default no se mueve, sólo cambia quién
puede moverlo. Nombres derivados de recipe-contract §1 (ejes lógicos, talla
al final) y theming §6.7 (slots de color, modificador delante). Un token con
DOS valores distintos es una colisión de nombre: son dos knobs, o el nombre
no distingue lo que debería — se marca `⚠`.
| token (`--feed-…`) | scope TSC | valor propuesto | usos |
| --- | --- | --- | ---: |
| `sentinel-radius` | `root` | `var(--radius-full)` | 1 |
feat(feed): temable — 0 % → 94 %, y cierra el bloque F2-A Octavo y último del bloque. censo 0 % → 94 % · global 43 % computed reposo y las CINCO tallas, idénticas al byte **El título no escala por talla: escala por NIVEL DE ENCABEZADO.** El informe leyó sus cuatro valores como una colisión de `size`, y son `aria-level` 3..6 — un encabezado más profundo es más pequeño porque es más profundo. Sus tokens son `article-title-font-size-{3,4,5,6}`, no coordenadas de talla. Tercera corrección de este tipo a un veredicto en el bloque. **El ⚠ del `sentinel` eran DOS medidas**, como sospechaba el veredicto: la fila-sonda mantiene un alto mínimo para que el observador tenga algo que intersecar, y el spinner que va dentro tiene su propio diámetro. El feed tipa por debajo del 1:1 de md en adelante, como `table` y `tree-grid`; la coordenada lo nombra en vez de esconderlo. **Sobre la medición, que aquí hubo que trabajarla.** La sonda dio 7 diffs y ninguno era un cambio: - el `box-shadow` del nodo `[data-busy]` está ANIMADO, y la sonda congela `transition` pero nunca `animation` —a propósito, porque congelarla impide que Presence monte nada—, así que lo muestrea en una fase distinta cada vez: dos corridas del MISMO código dan cinco diffs; - y el estado `hover` se mide después de haber forzado las tallas, así que su altura arrastra la última. Lo que decide es que las SEIS medidas estables —reposo y las cinco tallas— salieron idénticas al byte: 544,5 · 564,5 · 628,5 · 792,5 · 966,5 px. Queda escrito en el README para que el siguiente no persiga el mismo fantasma. audit PASS · eidos-lint 0 invalid · rtl 0 · docs 0 · check 0 en tocados · suite: sólo el rojo conocido Demo con tab Tokens: 50 filas, 0 sin computar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
### 4.2 Sin nombre mecánico (1)
docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
- **⚠ decisión: `100%` es un valor identidad o geometría de layout, no un knob de tema — el perímetro de «knob» es D-TH.2, sin firmar** — 1: `inline-size`.
### 4.4 Lo que hay que comprobar a mano (PLAN-theming §1.3 · §7.4)
- [ ] **Privado que no deriva de un público** — §3 lo marca; el privado debe leer el público o desaparecer.
- [ ] **Velo o acento en el nodo equivocado** (`archetype: 'item'` en un envoltorio, un `background` en shorthand que mata la capa de estado) — se mide desde el píxel hacia arriba.
- [ ] **Doble animación** al mover un sello a una superficie con animación propia — registro de `animationstart`/`animationend`.
- [ ] **Diff de computed = 0** en reposo · hover · abierto · disabled · foco, por talla, antes y después.
- [ ] **Centinela por token nuevo**: valor imposible en el root → el nodo lo sigue. Si no, el token miente.
## 5. Veredicto
<!-- veredicto:start -->
docs(theming): revisadas las fichas 11-20 — veredicto verificado y corregido en cada una Segunda tanda de revisión del eje theme-reach: command, table, media-player, tree-grid, field-langs, gradient-picker, listbox, carousel, heading y feed. Cifras reproducidas en las diez; la corrección va escrita en el bloque de veredicto de cada ficha, que sobrevive a la regeneración. Lo que la verificación cambió del plan mecánico: - Tres «colisiones» no eran colisiones: el radio de command es ADAPTACIÓN al Dialog que lo hospeda (lee un público de dialog, legítimo); el ancho del panel de gradient-picker es POR TALLA (20/18/22rem); y el título de feed son las redeclaraciones por talla de su propio privado. - Dos nombres mecánicos estaban mal: el `root-height` de table es la FILA (row-height, al bundle), y el `root-bg-image` de tree-grid son las GUÍAS de indentación — el knob es un color (`guide-color`), los cinco gradientes son de la receta. - Dos prefijos más de la misma plaga: media-player declara `--_mp-*` (el censo lo cuenta global) y field-langs `--_fls-*` — que además lee un privado DE FIELD con la fórmula del label un paso por debajo, sólo resoluble anidado: eso va al mandato field-composition, no se copia congelado. Y gradient-picker estampa `--gp-current-gradient` inline: mismo renombrado que gb. - Una regla de capa a punto de romperse: la propuesta de listbox acuñaba `font-size = var(--list-font-size)`, que es un público DE LA CAPA list-surface — duplicarlo es el vocabulario paralelo que la propia nota prohíbe. Retirada. - Y una lectura equivocada del 0 %: heading NO tiene deuda — es el primitivo tipográfico consumiendo la capa de named styles, que ES su superficie de tema (applyTypeScale la retunea en vivo). Acuñar --heading-* sería el alias por eje×nivel que la purga del §39 mató. Disposición propuesta: medir --style-* como sistema transversal para los primitivos tipográficos — decisión D-TH.2, y aplica a toda la familia B5. media-player trae además contexto que la propuesta ignoraba: su acento ya está firmado en el propio bloque de recetas como theme-stable (una escala cruda a propósito, para leerse sobre cualquier vídeo) — no se «corrige» a un rol. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
**Revisión 2026-08-20 — verificación previa a implementación (Opus).**
**Análisis: CORRECTO** (33 · 0 · 13 · 16 · 3 · 1). Privado propio bien
prefijado (`--_feed-font-size` redeclarado por talla, `feed.css:22-65`);
`data-size` vive en `[data-feed-root]`; ya existe el forward de paleta en
`base.ts` (`_palette-solid`/`_palette-element` con `parts: ['root']`).
**Propuesta: APTA CON DOS CORRECCIONES.**
1. **El ⚠ de `article-title-font-size` es POR TALLA, no colisión**: los
valores md/sm/xs son las redeclaraciones del privado por `data-size`.
Forma correcta: coordenadas `font-size-{xs..lg}` (verbatim — OJO: el feed
tipa por debajo del 1:1, `md → font-size-sm`; desviación visible, no
«corregir» al bundle) + resuelto `font-size` con `parts: ['root']` y
default `host`; el privado lo lee o muere. El título del artículo toma su
token propio sólo si su valor difiere del resuelto.
2. **El ⚠ de `sentinel-height`** (space-6 / 0.75rem): el centinela de scroll
infinito — dos usos distintos o un default+compacto; resolver por selector
y, si son dos, dos tokens (`sentinel-height` + el que el selector nombre).
Resto (radius, familia, gaps de artículo): verbatim válido. Los knobs que
lean `--_feed-palette-*` se quedan en THM-2. Sonda §7.2: el feed carga
artículos async — esperar el contenido antes de medir.
**Bloqueos de firma**: ninguno duro.
docs(theming): la auditoría de alcance de tema, componente a componente, con su propuesta El censo medía el eje y no lo explicaba: 5.205 knobs en dos tablas del plan no dicen QUÉ knob de QUÉ línea no alcanza un tema, ni qué token habría que crear. Ahora `theming-census.ts --report` escribe la auditoría entera bajo `docs/audit/theming/`: un README con la vista de conjunto y 170 fichas — 162 recetas con CSS + 8 componentes sin receta, el árbol completo de `eidos/components/`. Cada ficha de receta: knobs fuera de alcance con fichero:línea Y selector (agrupados por clase), sistema transversal aparte, los privados con la columna que decide («¿deriva de un público?»), y una PROPUESTA de corrección — el token a declarar en `base.ts` con su valor VERBATIM y su scope TSC. La propuesta deriva los nombres de recipe-contract §1 y theming §6.7; donde la doctrina no decide, marca `⚠ decisión` en vez de inventar. Y no propone acuñar lo que la doctrina prohíbe: lo que posee una capa compartida, el foco, la capa de estado, un token prestado de otra receta, un shorthand o un eje físico. Las 8 fichas sin receta dicen —medido, no supuesto— dónde vive su visual: el componente que componen (icon-button → button), la capa que consumen (affix → viewport-placement) o la receta ajena que pinta sus attrs (svg → badge/button). Defectos del instrumento corregidos en el mismo pase, todos encontrados mirando la salida: un `@import` pegado al primer selector se comía 2 knobs de color-picker (el suelo del censo no puede moverse); `:not(:disabled)` se leía como estado y producía `hover-disabled-*`; un knob que lee un privado se proponía a sí mismo en vez de resolverse por talla; `--icon-size-sm` se reportaba como préstamo del componente `icon` (ahora el préstamo se verifica contra las claves del dueño en `base.ts`); y el default de talla salía sin nombrar en vez de `-md`. Verificación: censo global idéntico al suelo publicado (5205 · 1621/33% · 856 · 1880 · 614 · 234) y COMPONENTE A COMPONENTE contra la tabla §9 del plan — 0 diferencias en 162 · regenerar dos veces da el árbol idéntico · el bloque de veredicto escrito a mano sobrevive · docs:check 0 errores sobre 813 docs · prettier limpio (el árbol generado entra en .prettierignore junto a eidos/generated). Las 10 primeras fichas llevan ya su veredicto de revisión: análisis correcto en las 10, propuesta apta en 2 (gradient-builder como piloto, combobox con cinco correcciones — dos de ellas evitaban romper el default), y 5 que no se tokenizan en solitario porque son alias de --calendar-*/--field-* y esperan la decisión de familia. Cuatro destaparon privados con prefijo ajeno o abreviado declarados en su propio CSS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
<!-- veredicto:end -->

Powered by TurnKey Linux.