M0 (`830cd7671`) curo cinco agujas del censo de theming y su cuerpo dejo tres
cabos anotados. Al tirar de ellos aparece que el defecto era mucho mas ancho:
un barrido de `scripts/` entero, con TRES ortografias de la aguja (literal
`var\(--`, cadena `'var\\(--'` y grupo `var\((--`), encuentra SEIS mas. Se
corrigen cinco y se declara la sexta.
POR QUE IMPORTA MAS QUE EN EL CENSO. La aguja del censo produce una MALA
CLASIFICACION, y una mala clasificacion al menos se cuenta en algun sitio.
Estas producen sobre todo FALSOS NEGATIVOS: el guard deja de mirar y PASA en
silencio. Cinco de las seis son de ese sentido.
LAS AGUJAS (todas con CERO victimas hoy, medido antes de tocar; se corrigen por
la misma razon que M0 escribio para las suyas sin victima: dejarlas ciegas deja
el bug armado para la proxima linea que Prettier rompa):
- `theming-census.ts:1267` `scopeFor` — LA DE CLASE VIVA, y esta EN EL FICHERO
QUE M0 DECLARO CURADO, comiendo de la MISMA tuberia (`knob.value`,
normalizado a espacios simples en :579). Escribiria alcance `root` donde la
verdad es `host`. Medido el catalogo: 5187 knobs + 1497 privados, 12 valores
llevan hoy `var( --` y ninguno contiene `palette-`.
- `theming-census.ts:2244` `valenced` y `:2246` el rol neutro — el segundo mata
el clasificador `state-layer` entero: sin match, el knob nunca se encola.
Su entrada es `base.ts`, que NADIE normaliza, y el lector de PRODUCCION de
esos mismos valores ya es tolerante (`render-css.ts` VAR_REF_REGEX).
- `theming-sentinel.ts:867` `kindOfTerm` y `:884` los operandos de
`calc/min/max/clamp` — el segundo es el caso que el propio comentario de
arriba documenta (22 longitudes leidas como numeros). Probado por
EQUIVALENCIA sobre las 4566 entradas de base.ts: 0 diferencias de kind ni de
sentinel entre HEAD y la version tolerante.
- `component-audit.ts:957 / :1137 / :1329` (R-2.6, R-4.3, R-4.6) — la 4.3 era
la peor del lote: opera sobre un valor SIN normalizar, tomado directo del
fuente, y su error se INVIERTE (falso positivo: acusa de «capa de estado
artesanal» a una declaracion que lee la del sistema).
- `__statelayer-analysis.ts:28` — NO TOCADA y declarada: su lector es POR
LINEA, asi que un corte trunca el valor ANTES de que la aguja corra. Anadir
tolerancia daria falsa sensacion de cobertura mientras la limitacion real
sigue en pie. (De paso, defecto preexistente NO tocado en :32: un
`new RegExp` con comillas DOBLES hace que su `\s` sea solo `s` y esa regex no
case nunca.)
`\s*` va a AMBOS lados donde la aguja cierra parentesis, porque el corte produce
`var( --x )`; solo a la izquierda donde no lo cierra. La tolerancia esta COPIADA
del hermano de la casa (`recipe-css-contract.test.ts:150`), no inventada.
DOS CORRECCIONES DOCUMENTALES que el pase adversarial caza:
- `component-audit.ts` ≈:1154 justificaba no usar `/g` con un mecanismo FALSO
(«lastIndex viaja entre llamadas»). Medido: un literal inline se re-crea en
cada evaluacion (`true,true,true`) y sobrevive a la bandera POR ACCIDENTE de
donde esta escrito; el arrastre es del OBJETO regex izado a const de modulo
(`true,FALSE,true`). La decision de no usar `/g` sigue siendo buena y ahora
se sostiene en su razon verdadera. El acta del censo queda como esta: sus
agujas SI estan izadas y alli el arrastre es real.
- `theming-census-debt.ts:58-59` se contradecia con su propia linea :96 tras
la reescritura de la caveat: `87 literal` -> `86` y `583 of the 1154 keys` ->
`582 of the 1150`. Verificado contando el ledger (palabras 272+86+1=359 ·
chronos 198+11+14=223 · 582 de 1150) y con `--debt` («1150 registered, 0 new,
0 stale»). La aritmetica cierra con las actas del propio fichero:
1154 −2 (`8ac23047f`) = 1152 −2 (`830cd7671`) = 1150.
CAVEAT DEL LEDGER reescrita: las claves `--palabras-*` ya NO estan «EN
CUESTION» — la clasificacion esta ADJUDICADA (canal de valor del scheme del
documento) y lo que queda pendiente de firma es la EJECUCION, no el veredicto.
Se anade el dato que faltaba y que cambia como se lee el numero: de los 117
nombres consumidos, el esquema por defecto emite 74 y **43 no los emite nunca**,
de modo que para esos el fallback del CSS ES el valor de diseno. (La particion
que yo habia dado, 75/42, era la resta equivocada: suponia que lo emitido es
subconjunto de lo consumido, y `--palabras-scheme-mark-highlight-bg` se emite y
ninguna receta lo lee.)
FICHAS NO REGENERADAS a proposito: `--only` se parsea pero `writeReport()` lo
ignora, asi que regenerar reescribiria las 171 fichas + README — 172 ficheros
mezclando todos los carriles. Las de split-button y palabras quedan desfasadas
hasta que alguien corra `--report` sobre un arbol quieto.
VERIFICADO: censo antes/despues byte a byte IDENTICO · `component:audit`
PASS 161 / NEEDS-WORK 5 / BROKEN 0, con `tmp/component-audit.md` byte a byte
salvo la linea `Date:` autogenerada · `theming-reach-floor` 5/5 verde · ningun
fichero bajo `web/` tocado (regla del autor: ese arbol se reconstruye).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>