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/chat-typing.md

94 lines
4.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# chat-typing — 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.
- **Medido**: 2026-08-24 · **Alcance**: **100%** — 9 de 9 knobs por token público
- **Knobs de apariencia**: 9 — público 9 · privado 0 · global 0 · literal 0 · sistema 0 · excepción 0 _(los dos últimos, fuera del ratio)_
- **Contrato hoy** (`lib/recipes/base.ts`): 8 pública(s) — `gap`, `font-size`, `fg`, `min-block-size`, `dot-size`, `dot-gap`, `dot-radius`, `dot-fg`
- **Eje `size`**: no · **ficheros**: `chat-typing.css`
## 1. Knobs fuera de alcance
### 1.1 Directo a primitivo global (0)
_Ninguno._
### 1.2 A través de un privado (0)
_Ninguno._
### 1.3 Literales (0)
_Ninguno._
### 1.4 Excepciones firmadas (0) — fuera del ratio
Literales que llevan su anotación `/* literal: <razón> */` en la propia
declaración: la válvula de recipe-contract §3, la misma que honra
`component-audit`. **Una desviación firmada no es deuda** — se listan para que la
razón se lea, no para acuñarlas.
_Ninguno._
## 2. Sistema transversal (0) — informativo, fuera del ratio
Un tema los alcanza **a nivel de sistema**, por diseño (recipe-contract §2).
_Ninguno._
## 3. Privados de la receta — ¿de dónde sale su valor?
_La receta no declara privados propios en su CSS._
## 4. Propuesta de corrección
_Nada que proponer: no hay knobs fuera de alcance._
### 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 -->
**EJECUTADO 2026-08-24 — 89 % → 100 %.** Contrato 7 → **8** claves; censo
`público 9 · global 0 · literal 0 · sistema 0 · excepción 0`. Centinela **8/8**,
**cero adjudicadas**. `component-audit` PASS · `eidos-lint` 0 invalid (8
morfo-backed, 0 eidos-only) · `rtl:check` 0 · `docs:check` 0 · `check` sin
errores del componente.
**Una sola clave, y es la COSTURA**: `dot-radius` (`var(--radius-full)`), el
único knob que leía el sistema a pelo. El nombre sale del CATÁLOGO, no del
generador: la §4 proponía `indicator-radius` —nombra por el primer selector de
la regla, `[data-chat-typing-indicator] > span`— cuando el nodo que PINTA es el
punto y el contrato ya habla `dot-size` / `dot-gap` / `dot-fg`. Es el defecto de
`tree-view` («root-bg» para una guía de indentación) en pequeño.
**Lo que el instrumento no veía (3 nodos de 8)**: los tres puntos son `> span`
DESNUDOS del indicador —sin `data-chat-typing-*`, la clase de la pastilla del
separador de `chat-log`— y la demo arranca con NADIE escribiendo, así que
`data-state='idle'` esconde a todos los hijos (presencia = visibilidad, N-7).
Con el selector extra y un typer encendido por `prepareWith`: **8 nodos**, y el
centinela ya daba **7/7 antes de tocar el código**.
⚠️ **El diff de computed NO cerró en cero, y es ruido del instrumento
reproducido sobre código idéntico**: 18 diffs, los 18 de `opacity` y los 18 en
los tres `span[data-animation-style=pulse]`. Sus puntos montan el loop `pulse`
del SISTEMA, que anima `opacity` sin parar, así que cada lectura cae en una fase
distinta — corriendo la sonda dos veces sobre el MISMO código salen los mismos
18 (control `after` vs `after2`). Ninguna otra propiedad se mueve, la clave
tocada es `border-radius`, y las capturas 2× antes/después son **idénticas byte
a byte**.
**Lo que queda fuera**: nada. Cero literales, cero globales, cero privados, cero
sistema. El componente está CERRADO en el 100 %.
<!-- veredicto:end -->

Powered by TurnKey Linux.