@ -509,6 +509,60 @@ excepción abre la mano para MEDIR, no para contabilizar.
## 8. Registro
- 2026-08-24 — ** `tags-input` 88 % → 90 % CERRADO** (`92180c390`), contrato 90 →
**91** claves, centinela **63/91** con 28 adjudicadas. Sus **cinco** knobs
fuera de alcance se clasificaron uno a uno ANTES de tocar nada: **uno** era la
COSTURA (`[data-invalid]` leía `var(--color-risk-border)` a pelo → entra como
`invalid-control-border` , con el nombre Y el default de
`field.invalid-control-border` , que tinta la misma parte del mismo chasis; NO
el `risk-border` de la paleta, que la cascada `[data-color]` re-enruta por
instancia y se llevaría con él el estado inválido). Los otros **cuatro son el
mismo puente THM-2** (`--_tags-input-palette-{border,track,text}` en el borde
del control enfocado y en los tres slots de la etiqueta activa): no se
acuñan, así que **90 % es su techo y es doctrina, no deuda** . Sus bloques
`[data-size]` del CSS **se quedan** : aquí NO los emite el TSC (claves de talla
planas, sin `scope: 'size:{k}'` ), y retirarlos rompería el eje. **Lo que
enseñó**: (1) **su tinta de etiqueta no ha pintado NUNCA** — el morfo sella
`aria-selected='true'` como LITERAL en cada etiqueta, así que la regla de
`archetypes.css` (0,4,0) gana siempre a `[data-tags-input-item]` (0,1,0) y le
fija `color` y el velo de estado EN REPOSO; medido con `aria-selected=false`
sobre el nodo real, donde `item-fg` alcanza al instante. Tercera ocurrencia de
§12.5 y con cara de a11y (un lector anuncia todas las etiquetas como
seleccionadas) — registrado en next-features §12, no se toca desde este eje;
(2) **el guard se poisona a sí mismo abriendo** : clicar el control estampa
`data-focus` y la regla de foco re-tinta el borde a la misma (0,2,0) pero más
tarde, así que `control-border` —vivísimo— leía muerto (la clase de
`command.input-border` , otra vez). Barrer la AUSENCIA (`null`) de
`data-focus` / `data-invalid` / `data-disabled` lo devuelve: **60/91 → 63/91
sin adjudicar una clave de más**. Diff de computed vacío (2.496 valores × 8
estados en el escenario válido + 459 × 5 tallas × 3 variantes + hover en el
INVÁLIDO, con sonda de un solo uso), captura 2× byte a byte idéntica.
- 2026-08-24 — ** `fab` 88 % → 100 %** (`5fd2fcdd8`), contrato 10 → **12** claves,
centinela **11/12** con 1 adjudicada. Dos knobs, y los dos del **pill
extendido**: el FAB circular no declara `padding-inline` ni `gap` , pero la
regla `[data-extended]` sí, y leía `var(--space-5)` / `var(--space-2)` a pelo
— la COSTURA de §2-A, con `global` a CERO. **El nombre lleva el cualificador
DETRÁS** (`padding-inline-extended`, `gap-extended` ): `extended` es un MODO,
no un estado interactivo, así que cae en la otra mitad de la frase de D-TH.6,
como `sidebar.width-icon` ; un `padding-inline` a secas habría prometido a TODO
FAB un padding que sólo tiene el pill. **Lo que enseñó** : (1) **la composición
no le quita nada, y valía la pena medirlo** — el mismo `<button>` lleva
`data-button` y `data-fab` , que es la forma del hallazgo de `gradient-picker` ,
pero las reglas del FAB casan (0,3,0) contra los (0,2,0) del Button y ganan
sea cual sea el orden de carga (padding computado 20px = `--space-5` ); (2)
** `lift` es la laguna del guard sobre `translate` ** —hermana de la de
`transform` en background / rating-group / card— y trae una trampa nueva: **el
centinela se auto-cancela**, porque un lift de 1234px se lleva el nodo de
debajo del cursor (`:hover` cierto en t+50 ms, falso en t+300, `none` en
t+900), así que ni añadiéndole una pasada de hover se mediría; medido a mano
escribiendo el token ANTES de entrar, `translate: 0px -1234px` ; (3) el
instrumento: un FAB es **UN nodo** , su segunda superficie es el hueco de icono
del Button compuesto (`EXTRA_NODES`), y su eje de talla es `data-fab-size` ,
**no** `data-size` — con el barrido cartesiano `data-fab-size` ×
`data-extended` el guard pasa de **3/12 a 11/12** sin adjudicar nada de más.
Diff de computed vacío (416 valores × 7 estados en el circular + 188 × 4
tallas + hover en el pill), capturas 2× byte a byte idénticas en las dos
formas.
- 2026-08-24 — ** `chat-typing` 89 % → 100 %** (`d39147c11`), contrato 7 → **8**
claves, centinela **8/8** con **cero adjudicadas** . Entra **una** clave y es
la COSTURA: `dot-radius` (`var(--radius-full)`), el único knob que leía el