@ -486,7 +486,7 @@ commits de corrección.
## 8. Registro
- 2026-08-23 — ** `card` 78 % → 78 %** (COMMIT ), contrato 97 → **98** claves,
- 2026-08-23 — ** `card` 78 % → 78 %** (`f3189a05a` ), contrato 97 → **98** claves,
centinela **49/98** con 49 adjudicadas. **Cerrado en su número, y ése es el
resultado**: sus ocho privados son TODOS, transitivamente, el puente THM-2 —
cuatro leen `--_card-palette-*` directo y cuatro leen el conmutador por
@ -504,7 +504,7 @@ commits de corrección.
(0,2,0) contra (0,1,0)) — medido, deliberado (anidación concéntrica §30) y
registrado. Diff de computed vacío (1.216 valores × 7 estados + 2.484 × 18
celdas), capturas 2× antes/después.
- 2026-08-23 — ** `toggle` 81 % → 100 %** (COMMIT ), contrato 119 → **126**
- 2026-08-23 — ** `toggle` 81 % → 100 %** (`edc019515` + `007c2af52` ), contrato 119 → **126**
claves, centinela **70/126** con 56 adjudicadas. Tres knobs y una firma: el
**radio** (`radius` + los cinco pasos de `rounded` ) leía `--radius-default` y
la escala global A PELO —el agujero de `navigation-menu` , y el único de los
@ -528,7 +528,7 @@ commits de corrección.
dirigido), capturas 2× antes/después. **Anotado y FUERA por D-TH.5** : el
`:hover` tapa el borde inválido (mismo peso, declarado antes) — mueve píxel
en los cuatro controles de formulario.
- 2026-08-23 — ** `rating-group` 80 % → 100 %** (COMMIT ), contrato 25 → **29**
- 2026-08-23 — ** `rating-group` 80 % → 100 %** (`f6a618328` ), contrato 25 → **29**
claves, centinela **23/29** con 6 adjudicadas. Tres RESUELTAS por talla
(`gap`, `item-size` , `font-size` ) jubilan sus tres privados y los cuatro
bloques `[data-size]` que los conmutaban: eran «privado con fuentes por
@ -538,7 +538,7 @@ commits de corrección.
Lo que enseñó: **el centinela no fotografía `transform`** , así que
`item-hover-offset` —el único knob de la receta que mueve uno— leía muerto
estando vivo (§13).
- 2026-08-23 — ** `radio-group` 77 % → 81 %, y su TECHO es ése** (COMMIT ),
- 2026-08-23 — ** `radio-group` 77 % → 81 %, y su TECHO es ése** (`f5d252443` ),
contrato 61 → **69** claves, centinela **46/69** con 23 adjudicadas. Ocho
claves: tres RESUELTAS por talla (`item-size`, `dot-size` , `font-size` ) que
retiran **diecisiete bloques `[data-size]`** y jubilan `--_radio-item-size`
@ -557,7 +557,7 @@ commits de corrección.
tallas), `[data-radio-group-label][data-disabled]` no casa jamás (soma no
estampa el atributo en la parte `Label` ), y el fondo de un radio marcado Y
deshabilitado pierde (0,3,0) contra la regla de variante (0,4,0).
- 2026-08-23 — ** `chat-composer` 79 % → 100 %** (COMMIT ), contrato 31 → **33**
- 2026-08-23 — ** `chat-composer` 79 % → 100 %** (`71a097ddc` ), contrato 31 → **33**
claves, centinela **29/33** con 4 adjudicadas. **La mitad de su contrato no
la montaba la demo**: 14 muertas de 31, y once eran la barra de contexto
(opt-in tras un chip) más la bandeja de adjuntos (opt-in tras un botón); con
@ -587,7 +587,7 @@ commits de corrección.
de talla y variante de `button` llegan tarde en el dev server. Los 2.204
valores restantes, idénticos.
- 2026-08-24 — ** `calendar` 84 % → 89 %** (COMMIT ), contrato **74 claves sin
- 2026-08-24 — ** `calendar` 84 % → 89 %** (`509d1144f` ), contrato **74 claves sin
tocar**, centinela **45/74 → 68/74** con 6 adjudicadas. **CERO claves
acuñadas: el censo no tenía nada que coser** (`global` ya era 0 desde la capa
`calendar-surface` ), así que lo único fuera de alcance eran cuatro literales
@ -608,7 +608,7 @@ commits de corrección.
7 estados: **0 diffs fuera de esos dos nodos** ; capturas 2× idénticas byte a
byte. Guards: censo `--only` 89 % (global 68 %, no baja) · audit PASS ·
eidos-lint 0 invalid · rtl 0 · docs 0.
- 2026-08-24 — ** `select` 83 % → 92 %** (COMMIT ), contrato 101 → **103** claves,
- 2026-08-24 — ** `select` 83 % → 92 %** (`cc010f79a` ), contrato 101 → **103** claves,
centinela **69/103** con 34 adjudicadas. Dos claves de COSTURA:
** `invalid-border` ** (las TRES declaraciones del estado inválido leían
`--color-risk-border` a pelo — y son UNA clave, no las dos que proponía la §4:
@ -628,7 +628,7 @@ commits de corrección.
Sonda 2.176 valores × 8 estados = **0 diffs** ; capturas 2× (cerrado y abierto)
idénticas byte a byte. Guards: censo 92 % · audit PASS · eidos-lint 0 invalid ·
rtl 0 · docs 0.
- 2026-08-23 — ** `chat-log` 77 % → 100 %** (COMMIT ), contrato 31 → **35**
- 2026-08-23 — ** `chat-log` 77 % → 100 %** (`fd8f01bac` ), contrato 31 → **35**
claves, centinela **34/35** con 1 adjudicada. **El instrumento daba 15/31
antes de tocar el código, y las dieciséis «muertas» estaban VIVAS las
dieciséis.** Tres cegueras, ninguna del componente: (1) el viewport que
@ -653,7 +653,7 @@ commits de corrección.
`:focus-visible` (medido con teclado sobre la fila real: 0 → 4 → 1234 px).
Diff de computed VACÍO (1.920 valores · 7 estados · 9 nodos).
- 2026-08-23 — ** `editable` 75 % → 82 %** (COMMIT ), contrato 56 claves,
- 2026-08-23 — ** `editable` 75 % → 82 %** (`2117d7422` ), contrato 56 claves,
centinela **42/56** con 14 adjudicadas. **Su apertura es frágil AL REVÉS** :
salir del modo edición es lo que hace un `blur` —da igual lo que diga
`submitMode` , esa opción sólo decide si el valor se compromete— y el guard
@ -675,7 +675,7 @@ commits de corrección.
knobs con una sola llave; el arreglo es `invalid-{parte}-border` (la forma que
`switch` acuñó el mismo día) y es contrato.
- 2026-08-23 — ** `avatar` 75 % → 90 %** (COMMIT ), contrato 84 → 88 claves,
- 2026-08-23 — ** `avatar` 75 % → 90 %** (`f68bac4a6` ), contrato 84 → 88 claves,
centinela **83/88** con 5 adjudicadas. **Su contrato existía y NINGÚN
instrumento lo veía**: es la única entrada de `base.ts` construida por una
IIFE (un helper local genera sus 24 ámbitos compuestos), así que su mapa vive
@ -726,7 +726,7 @@ commits de corrección.
animaciones (ningún commit toca `animation` ); contrato sin duplicados ni
huérfanos.
- 2026-08-23 — ** `file-upload` 76 % → 83 %** (COMMIT ), 1 clave acuñada y **1
- 2026-08-23 — ** `file-upload` 76 % → 83 %** (`0c06d42aa` ), 1 clave acuñada y **1
RETIRADA**. `invalid-dropzone-border` (con la PARTE en el nombre: tres partes
con borde) era el único knob a un primitivo a pelo. ** `button-bg` no pintaba**:
la regla compartida de los tres botones la declaraba y los tres la pisan
@ -746,7 +746,7 @@ commits de corrección.
tres sesiones están usando; con su muta-prueba (19 diffs al alterar el control,
1 al alterar sólo el borde inválido).
- 2026-08-23 — ** `switch` 76 % → 81 %** (COMMIT ), 1 clave. `invalid-track-border`
- 2026-08-23 — ** `switch` 76 % → 81 %** (`bbdc77c07` ), 1 clave. `invalid-track-border`
era el ÚNICO knob que iba a un primitivo a pelo (`--color-threat-element`).
**El nombre NO es el `invalid-border` del catálogo** (6 recetas lo usan):
esta tiene DOS partes con borde y las nombra —`disabled-track-border` es su
@ -772,7 +772,7 @@ commits de corrección.
en checkbox / radio-group / toggle, así que es escala del sistema y mueve
píxel en cuatro sitios.
- 2026-08-23 — ** `progress` 69 % → 87 %** (COMMIT ), 2 claves. `row-gap` +
- 2026-08-23 — ** `progress` 69 % → 87 %** (`2e708adae` ), 2 claves. `row-gap` +
`column-gap` : el `gap` en atajo tenía DOS valores distintos, así que es un knob
por eje (molde `chart.legend-row-gap` ). **Seis literales de identidad
firmados** (cuatro `100%` , dos `max-content` : llena la fila que le dan o se