Segundo barrido de la firma de instrumento grande (ceguera 3 del expediente
VA). sentinelFor(key) pasa a sentinelFor(key, kind): el guard ya leia base.ts
para extraer las claves y ahora captura en el mismo pase el VALOR por defecto
de cada una y tipa la sonda por el (literales por sintaxis; var() por el
vocabulario del sistema, con resolucion transitiva dentro del catalogo via
recipeTokenIndex). La escalera de nombre queda como respaldo para lo no
clasificable. La regla: la sonda tiene que ser imposible EN LA DIRECCION en
que la propiedad puede moverse.
Censo del cambio: 357 claves cambian de sonda (320 clase A color<-1234px en
40 componentes - la clase entera del "vivo por accidente" IACVT - + 17 B +
8 E + 1 F + 11 menores). Easing (52 claves) intacto y explicito. Dos
desviaciones del boceto, ambas medidas: el % NO se clasifica (opacity 62% vs
width 42% - ambiguo) y el entero/0 tampoco (la "clase E de 24" del expediente
era una mala lectura: 22 son calc(px * var(--scaling)), longitudes; y tipar
el 0 habria matado en falso 7 claves vivas con default 0 - no monotono).
Barrido S2 del ledger entero contra la base S1: 91/91 verdes, MONOTONO (0
componentes bajan), 0 rojos, 0 avisos de prepareWith, 39,7 min. Catalogo
2776/3577 -> 2778/3577: avatar 80->81 y stepper 62->63, exactamente las dos
victimas medidas del expediente. Ninguna de las 102 claves clase A cubiertas
por patron revivio - esperan la ceguera 2 (S3), como estaba escrito. Un
fantasma no reproducido (spin-field 0/20 en 6,2s, la pagina no rindio; rerun
13/20 identico a S1) queda archivado como flake del instrumento.
Ledger: DOS retiradas exactas con acta y medida - avatar.badge-fg-custom-
contrast (default white, la entrada describia la sonda, no el token) y
stepper.neutral-text (el unico caso donde la sonda mala daba VEREDICTO malo:
la IACVT caia en la tinta heredada que el tono neutral practicamente es).
background.scrim-fg-over-* siguen muertas por su puerta real y su entrada
sobrevive tal cual. Re-corridos tras editar: verdes, sin STALE.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
'only the step in force paints (the demo boots ringWidth=md); forced data-ring-width=sm -> reaches (halo 1.5px -> 17px)',
'group-overlap-xxl':
'same xxl step, on AvatarGroup; forced data-size=xxl on the real group -> reaches (margin-inline-start -33.6px -> 37px)',
// 2026-08-25, added with the D-TH.6 rename. This one is NOT about the
// stage: it is the guard picking the wrong probe VALUE.
'badge-fg-custom-contrast':
'INSTRUMENT, not the token. `sentinelFor` chooses the probe value by regex on the key NAME, and its ink test is `fg$` — `fg` as the FINAL segment — while D-TH.6 leaves the slot MEDIAL here; the chain carries `-bg-` but has no `-fg-`. So the key gets the `1234px` default, which is invalid for `color:` and moves nothing. Measured under the conditions the guard itself uses (same node set of 55, same data-variant sweep, same size forcing) on the real custom badge of /uix/components/avatar: with `1234px` the snapshot does not move on any combo; with `rgb(1, 2, 3)` it moves on `solid` (rgb(255,255,255) -> rgb(1,2,3)). From `:root` alone it also reaches (white -> rgb(4,5,6)). It read alive until 2026-08-25 under its old name `badge-color-custom-contrast`, which matched `color`. Same class as `bubble-fg-in` / `bubble-fg-out` and `scrim-fg-over-dark` / `scrim-fg-over-light` — the five keys of the catalogue whose `fg` is medial (next-features §13)'
// RETIRED 2026-08-25 (sweep S2 of the instrument firma): the entry
// `badge-fg-custom-contrast`, added the same day with the D-TH.6 rename.
// It never described the token — it described the PROBE: `sentinelFor`
// chose its value by regex on the key NAME (ink test `fg$`, and D-TH.6
// leaves the `fg` MEDIAL here), so a slot whose default is `white` was
// written `1234px`, invalid for `color:`. The chooser now reads the
// DEFAULT VALUE out of base.ts and types the key as a colour. Measured on
// the same route with the same overrides: 80/86 -> 81/86, and this is the
// one key that moved.
},
editable:{
// 2026-08-23, revised 2026-08-24. The transition pair IS the transition the
'the guard freezes transitions and this token IS the transition; measured unfrozen 2026-08-24 -> reaches (0.12s -> 4.321s on all four transitioned properties: background, border-color, color, box-shadow)',
'transition-ease':
'same freeze; measured unfrozen -> reaches (cubic-bezier(0.4, 0, 0.2, 1) -> steps(3) on the same four)',
// NOT a tone problem: stepper emits a `neutral` block and the ladder gives
// it to the node. The instrument is what cannot see it.
'neutral-text':
"the SENTINEL VALUE, not the token: `sentinelFor` picks a colour only for keys matching /color|bg$|fg$|border$|ring$|…|track$/, and `neutral-text` matches none of them, so the guard writes `1234px` — invalid for `color`, which then falls back to the inherited ink. Neutral's text tone IS practically that ink, so the fallback lands on the same computed value and nothing moves. Measured 2026-08-24 with a real colour on the current indicator, tone stamped: --stepper-neutral-text repaints it (rgb(1, 2, 3)). The same instrument gap would hide any `{tone}-text` whose tone sits near the inherited ink"
// RETIRED 2026-08-25 (sweep S2 of the instrument firma): the entry
// `neutral-text`. It was never a tone problem — stepper emits a `neutral`
// block and the ladder gives it to the node — and it was never the token:
// it was the PROBE. The old chooser picked a colour only for names
// matching /color|bg$|fg$|…|track$/, so a slot whose default is
// `var(--color-neutral-text)` got `1234px`, invalid for `color`, and the
// IACVT fallback landed on the inherited ink the neutral tone practically
// IS — the one case where a wrong probe produced a wrong VERDICT, not just
// a wrong reason. The chooser now types the key by its default value.
// Measured on the same route with the same overrides: 62/69 -> 63/69, and