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/scripts/theming-census-debt.ts

1414 lines
115 KiB

feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
/**
* theming-census-debt — the theme-reach DEBT of the catalogue, registered.
*
* WHAT THIS IS, AND WHAT IT IS NOT. This is NOT an exceptions file. An
* exception asserts «this is fine»; every key below asserts the opposite:
* «this declaration does NOT reach a theme, we measured it, and we are
* freezing it so it cannot grow». It is the other class of written act —
* the sibling of `theming-sentinel-exceptions.ts` in MECHANISM (one written
* line per key, a STALE detector on top) and its opposite in MEANING.
*
* The exception valve is untouched and lives elsewhere: a literal with its
* `/* literal: <reason> *​/` annotation on the declaration (recipe-contract
* §3, class `exception` in the census) and the component-level
* `R-5.1 exception: <reason>` of a README. Those say «signed deviation».
* This file says «unpaid debt, counted».
*
* WHY IT EXISTS. Until 2026-08-25 the floor of this axis was two COARSE
* ceilings (`maxLiteral` / `maxGlobal`): the catalogue could add five
* regressions and hide them under five unrelated fixes, because only the
* TOTAL was asserted. R-5.1 could not graduate to `error` against a total,
* either — a per-component rule needs a per-component truth. The ratchet is
* now PER KEY: a literal or a raw global outside this ledger is a
* regression, and a ledger entry that is no longer debt is STALE. The debt
* only shrinks, key by key. Same doctrine as R-5.4 («a declaration that
* reads no token and carries no act, lies») and the same mechanism that
* caught 18 STALE entries in `toast` the day this was written.
*
* HOW A KEY ENTERS. Only by signature. This baseline was generated ONCE,
* on 2026-08-25, from the census of that day. Regenerating it wholesale
* (`node --import tsx/esm scripts/theming-census.ts --debt --write`) erases
* the ratchet, which is why the writer prints the delta it is about to
* commit: an author reads that delta and decides. New debt is not registered
* by re-running the generator — it is tokenized, or annotated, or signed.
*
* HOW A KEY LEAVES. Four ways, all of them progress:
* 1. TOKENIZED — the declaration now reads `var(--{c}-…)`;
* 2. ANNOTATED — it gained its `/* literal: <reason> *​/` (class
* `exception`), so it is a signed deviation and no longer debt;
* 3. DEAD — the declaration, the rule or the component is gone;
* 4. SYSTEM — it moved to a transversal system the recipe consumes.
* In all four the guard reports the entry as STALE and it must be deleted
* in the same commit that earned it. A stale entry is the same debt as a
* stale allowlist row: it claims a knob is broken that is already fixed.
*
* THE KEY. `{class} · {file} · {selector} · {property}` — deliberately
* LINE-INDEPENDENT, so moving a rule, reformatting a file or inserting a
* comment above it does not fabricate a regression. Repeated identically
* (the same property under the same selector in a `@media` block and in the
* base rule) it appears twice: the comparison is a MULTISET, so the count
* is part of the freeze and a duplicated declaration cannot slip in.
* Two consequences worth knowing before they surprise anyone:
* · renaming a selector reads as one STALE + one new key. That is the
* ratchet working as designed — the debt moved and gets re-signed;
* · turning a literal into a raw global (`8px` → `var(--space-2)`) does
* the same, because the CLASS is part of the identity. It is a partial
* improvement, and re-signing it is what records the improvement.
*
docs(theming): la firma de los 318 queda EJECUTADA - el suelo sube a 73/65 Tercera pieza (F3): los ratchets suben en el commit que los gana y la prosa "318 sin ratchet" pasa a historia fechada. - Suelo: reachPct 69 -> 73 (3074/4228; el numerador NO se movio - ninguna receta cambio un valor; el denominador cayo exactamente los 252 que dejaron de contar como no-alcanzados: 132 bridge + 36 channel + 84 anotados; los 66 del ledger SE QUEDAN dentro) y minAtHundred 45 -> 65. Mordida verificada en ambas direcciones (74/66 -> rojo con el mensaje exacto; restaurado -> 5/5). El bloque de doctrina cuenta el CIERRE del agujero, no el agujero: los dos ratchets dicen lo mismo desde dos alturas - el suelo rechaza una caida NETA, el ledger una clave sin nombre. - recipe-contract SS4: la ley completa de las CINCO salidas de un privado no-derivado (bridge mecanico - channel mecanico - anotacion private: - entrada de ledger - derivar de un publico). 1088 -> 1154 donde era estado. - CONTINUE: la firma pendiente -> EJECUTADA 2026-08-26 con su seccion (e812d3ffd F1 - a74aeec7b F2 - este F3; 318 = 132+36+84+66 sin resto) y las cuatro contradicciones con ficha señaladas (metrics resuelto por medida 3/2 - timeline pre-B' a reabrir - proof-of-human sin SS5 propia, DOS notas que adjudican 17 knobs - listbox reversible). Pendientes: SOLO el idioma var(...,fallback) y la re-clasificacion de palabras. - next-features SS13: mitad (1) EJECUTADA; bloque "trabajo futuro que dejo ESCRITO la medida" (el alias de proof-of-human borrable a coste cero - los 56 del conmutador de tono que se retiran adoptando el forward THM-2 - timeline - listbox). - Ledger: dos cifras muertas de F2 saldadas (568->583 de 1154; 359->360 - palabras gano una entrada private y la frase mentia). Barrido anti-rancio: las 20 menciones restantes de "318" son historia fechada o hashes; ningun estado vigente. Suelo 5/5 - docs:check 0/0 sobre 816 - audit 162 PASS - --debt 1154/0/0 - tsc 0 propios - prettier limpio en los .ts y cero hunks de contenido en los .md tocados. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
* THE WIP TRACKS ARE IN — `palabras` (272 global + 87 literal + 1 private) and
* `chronos` (198 global + 11 literal + 14 private) are 583 of the 1154 keys, and they
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
* are registered like everyone else, for one reason: **debt is real
* wherever it lives**. `component-audit` excludes those tracks from its
* catalogue so WIP noise does not read as catalogue breakage — a rule about
* a COMPONENT'S completeness. This ledger answers a different question, the
* catalogue-wide one the floor test asks, and leaving a third of the debt
* out of it would make F3's gate («census 100 % adjudicated») a claim about
* two thirds of the catalogue. Their entries retire when their own track
* tokenizes, not by a commit of this axis.
* ⚠ ONE CAVEAT, MEASURED AND WRITTEN DOWN (2026-08-25, adversarial review
* of the debt-B axis): for `palabras` the census's classification is IN
1 month ago
* QUESTION. Its two recipes consume 117 distinct `--palabras-*` names (103
* with a `var(…, fallback)`, 14 without — all 117 under `--palabras-scheme-*`,
* recounted by the adversarial pass) and declare ZERO of them; they are not a theme
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
* contract but the live projection of the document's `scheme-style`,
* written per instance as `--palabras-scheme-*` by `schemeCssVars`
* (`palabras-scheme.ts`). That is a VALUE channel, another axis — so the
* 103 knobs the census scores `public` there are misclassified and its
* «22 % reach» is not partial theme reach. What that does NOT change is
docs(theming): la firma de los 318 queda EJECUTADA - el suelo sube a 73/65 Tercera pieza (F3): los ratchets suben en el commit que los gana y la prosa "318 sin ratchet" pasa a historia fechada. - Suelo: reachPct 69 -> 73 (3074/4228; el numerador NO se movio - ninguna receta cambio un valor; el denominador cayo exactamente los 252 que dejaron de contar como no-alcanzados: 132 bridge + 36 channel + 84 anotados; los 66 del ledger SE QUEDAN dentro) y minAtHundred 45 -> 65. Mordida verificada en ambas direcciones (74/66 -> rojo con el mensaje exacto; restaurado -> 5/5). El bloque de doctrina cuenta el CIERRE del agujero, no el agujero: los dos ratchets dicen lo mismo desde dos alturas - el suelo rechaza una caida NETA, el ledger una clave sin nombre. - recipe-contract SS4: la ley completa de las CINCO salidas de un privado no-derivado (bridge mecanico - channel mecanico - anotacion private: - entrada de ledger - derivar de un publico). 1088 -> 1154 donde era estado. - CONTINUE: la firma pendiente -> EJECUTADA 2026-08-26 con su seccion (e812d3ffd F1 - a74aeec7b F2 - este F3; 318 = 132+36+84+66 sin resto) y las cuatro contradicciones con ficha señaladas (metrics resuelto por medida 3/2 - timeline pre-B' a reabrir - proof-of-human sin SS5 propia, DOS notas que adjudican 17 knobs - listbox reversible). Pendientes: SOLO el idioma var(...,fallback) y la re-clasificacion de palabras. - next-features SS13: mitad (1) EJECUTADA; bloque "trabajo futuro que dejo ESCRITO la medida" (el alias de proof-of-human borrable a coste cero - los 56 del conmutador de tono que se retiran adoptando el forward THM-2 - timeline - listbox). - Ledger: dos cifras muertas de F2 saldadas (568->583 de 1154; 359->360 - palabras gano una entrada private y la frase mentia). Barrido anti-rancio: las 20 menciones restantes de "318" son historia fechada o hashes; ningun estado vigente. Suelo 5/5 - docs:check 0/0 sobre 816 - audit 162 PASS - --debt 1154/0/0 - tsc 0 propios - prettier limpio en los .ts y cero hunks de contenido en los .md tocados. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
* the 360 keys below: they are literals, raw globals and one non-derived
* private (a `::before` inline-size) either way. They
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
* are frozen AS THE CENSUS MEASURES THEM, which is all a ledger ever
* claims — never that the measurement has been adjudicated.
*
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
* WHAT IS NOT HERE — AND THE HOLE THAT CLOSED. The first baseline registered
* only `global` and `literal`; the census's third unreached class, a `private`
* that does NOT derive from a public (318 knobs), had no per-key ratchet and
* this header named that as a hole rather than hiding it. **It is closed.**
* The 318 were adjudicated key by key in two moves, and both are mechanical
* from here on:
*
* 1. the census learned to READ the two shapes the doctrine had already
* adjudicated — the THM-2 palette `bridge` (132) and the per-instance
* value `channel` (36), decided off the GENERATOR'S OUTPUT and not off a
* name (see `PALETTE_BRIDGE` in `theming-census.ts`);
* 2. the remaining RESIDUE of 150 was split by measurement: 84 knobs whose
* shape the doctrine blesses ONE LEVEL BELOW the knob carry a written
* `/* private: <reason> *​/` on the declaration that establishes the
* mechanism — class `exception`, the canon's existing signed-deviation
* class, not a new tier — and the other 66 are registered below like any
* other debt.
*
* So `private` is now a `DebtClass` beside `global` and `literal`: a knob
* reading a private that derives from nothing is new debt, named, and has the
* same three exits as the other two (tokenize it, sign it, register it) plus
* the same STALE detector on the way out. A `private · …` entry that gains its
* annotation, or whose private starts deriving from a public, reports STALE
* and its line goes in the commit that earned it.
*
* What remains outside the ledger is only what is outside the RATIO by
* design: `system`, `structural`, `bridge`, `channel` and `exception` — four
* measured classes and one written act, each documented where it is decided.
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
*
refactor(theming)!: MeasuredIndicator escribe en el namespace del HOST - la capa es la pluma, no la dueña Firma SS14 (2026-08-26, nombre poseido tras rechazar el nombre generico de capa: habria repetido el defecto un piso abajo). La capa compartida publicaba el rect medido como --indicator-{x,y,w,h} - forma PUBLICA sin dueño, invisible para la ley del espacio cerrado (que audita --{c}-*) y para todos los guards. Tercera aplicacion de la doctrina del canal (navigation-menu fue la segunda, tabs la habia firmado por escrito citando a navmenu como precedente). - MeasuredIndicatorOpts gana `component: string`; los DOS hosts (tabs, radio-group - barrido completo, no hay mas) pasan xxxMorfo.kebab, NUNCA un literal: el nombre del canal queda atado a la declaracion que lo posee. - tabs.css lee el poseido directo; el css COMPARTIDO (sliding-indicator) lee el alias local que cada receta declara (--_indicator-x: var(--_radio-group-indicator-x)) - el cableado del puente THM-2, contrato en el artefacto. --indicator-{duration,ease} INTACTOS a proposito: son ranuras de FORMA, no canal - el _ separa las dos especies en el mismo fichero; su falta de dueño queda flagged como especie pendiente. - El censo aprende el CANAL TRANSITIVO (molde de derivesFromPublic, memoizado, a prueba de ciclos, con la mutacion que impide que un alias sobre un privado declarado clasifique canal). Efecto colateral MEDIDO con acta: tooltip.css:27 pasa de exception a channel - su comentario firmado ya decia "per-instance VALUE CHANNEL"; faltaba el mecanismo, no el criterio. - Ledger: la clave tabs RETIRADA entera (2 entradas global) con acta que hace la lectura honesta - no se tokenizo nada ni se perdono deuda: se corrigio una mala clasificacion en su fuente. 1154 -> 1152, 0/0. - Numeros: tabs 97% -> 100% (global 2->0, channel 0->2, ni una clave acunada) - atHundred 65 -> 66 - reach global 73% y public 3072 intactos. - Dinamica verbatim en los dos hosts (radio-group manifiesta en segmented): el canal poseido LLEVA el rect del item activo (x 784=784, w 71=71 / x 793=793, w 102=102), el indicador desliza, los nombres viejos computan vacio, control negativo quieto y positivo probando la CADENA del alias. Re-verificado DESPUES de aterrizar el codemod del peer. Sonda estandar de tabs 2528 valores x 10 estados a 0 diffs - dicho en voz alta: esa sonda es CIEGA al canal; su 0 prueba lo circundante. - Guards: 154 tests verdes - centinela tabs 70/79 identico (ninguna adjudicacion citaba las medidas) - audit 162 PASS - docs:check 0/0 - src/ sigue a 0 errores. ATRIBUCION DECLARADA (acordada por canal entre sesiones): este commit CARGA ademas la retirada de 5+5 `syncAttrs: true` en tabs-provider y radio-group-provider - trabajo de "P0 fase C2c, audit 2026-08-26 - retirada de syncAttrs, sesion de la auditoria" (vicen-63), que aterrizo en disco durante esta construccion y cuya restauracion habria sido churn sin valor. Su commit de C2c anota el viaje desde el otro lado. BREAKING: --indicator-{x,y,w,h} ya no existen; el canal es --_{c}-indicator-* del host y el css compartido lee el alias por receta. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
* ── ACTA 2026-08-26 — the whole `tabs` key RETIRED, two entries ─────────────
* `global · tabs.css · [data-tabs-indicator] · {block-size, inline-size}` were
* the last two, and they left by exit 1 (TOKENIZED) read strictly, by exit 4
* (SYSTEM) read honestly: the declarations did not change shape, the NAME they
* read did. Firma §14 («MeasuredIndicator con nombre poseído»): the shared soma
* layer used to publish the measured rect as a bare `--indicator-{x,y,w,h}` —
* PUBLIC in shape and owned by nobody, which is why the census could only score
* it `global` and why the closed-namespace law never saw it (that law audits
* `--{c}-*`, and a name with no component prefix is foreign vocabulary). The
* layer now writes into the HOST's namespace, `--_tabs-indicator-*`, so the two
* knobs read as what they always were: the value CHANNEL, out of the ratio.
* Measured: `tabs` global 2 → 0, channel 0 → 2, reach 97 % → 100 %, knobs 77
* unchanged; catalogue `atHundred` 65 → 66. No key was tokenized away and no
* debt was forgiven — a misclassification was corrected at its source, which is
* exactly the reading the header's «renaming a selector reads as one STALE + one
* new key» paragraph anticipates, except here the new key belongs to a class
* this ledger does not register.
*
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
* Generated: `node --import tsx/esm scripts/theming-census.ts --debt --write`
* Checked: `node --import tsx/esm scripts/theming-census.ts --debt`
* Guarded: `src/uix/eidos/theming-reach-floor.test.ts` (catalogue) +
* `component-audit` R-5.1 / R-5.2 (per component).
*/
export const CENSUS_DEBT: Record<string, string[]> = {
accordion: [
"literal · accordion.css · [data-accordion-content][data-orientation='horizontal'] · inline-size",
"literal · accordion.css · [data-accordion-indicator] [data-svg='chevron'] · block-size",
"literal · accordion.css · [data-accordion-indicator] [data-svg='chevron'] · inline-size",
'literal · accordion.css · [data-accordion-trigger] · inline-size',
'literal · accordion.css · [data-accordion] · inline-size'
],
announce: ['global · announce.css · [data-announce-region] · font-family'],
'audio-player': [
"global · audio-player.css · [data-media-player][data-variant='bar'] [data-media-player-time-slider] · min-inline-size",
"global · audio-player.css · [data-media-player][data-variant='inline'] · padding",
'global · audio-player.css · [data-media-player][data-variant] [data-media-player-artist] · color',
'global · audio-player.css · [data-media-player][data-variant] [data-media-player-artist] · font-size',
'global · audio-player.css · [data-media-player][data-variant] [data-media-player-controls] · gap',
'global · audio-player.css · [data-media-player][data-variant] [data-media-player-live-indicator][data-live] · color',
'global · audio-player.css · [data-media-player][data-variant] [data-media-player-live-indicator][data-live] · font-size',
'global · audio-player.css · [data-media-player][data-variant] · padding'
],
aura: [
'global · aura.css · [data-aura-ring] · border-radius',
'literal · aura.css · [data-aura-indicator] canvas · block-size',
'literal · aura.css · [data-aura-indicator] canvas · inline-size',
'literal · aura.css · [data-aura-region] · block-size',
'literal · aura.css · [data-aura-region] · inline-size',
'literal · aura.css · [data-aura-ring] svg · block-size',
'literal · aura.css · [data-aura-ring] svg · inline-size'
],
'card-group': [
'literal · card-group.css · [data-card-group-item] · block-size',
'literal · card-group.css · [data-card-group] · inline-size'
],
carousel: [
'literal · carousel.css · [data-carousel][data-block] · inline-size',
"literal · carousel.css · [data-carousel][data-orientation='vertical'] [data-carousel-indicator-group] · inline-size",
"literal · carousel.css · [data-carousel][data-orientation='vertical'] [data-carousel-item-group] · block-size",
"literal · carousel.css · [data-carousel][data-orientation='vertical'] [data-carousel-item] · block-size",
"literal · carousel.css · [data-carousel][data-orientation='vertical'] [data-carousel-viewport] · block-size"
],
chart: [
'literal · chart.css · [data-chart-bar-list-bar] · block-size',
'literal · chart.css · [data-chart-bar-list] · inline-size',
'literal · chart.css · [data-chart-bar-segment-fill] · block-size',
'literal · chart.css · [data-chart-bar-segment] · inline-size',
'literal · chart.css · [data-chart-empty] · block-size',
'literal · chart.css · [data-chart-figure] · inline-size',
'literal · chart.css · [data-chart-frame] · inline-size',
'literal · chart.css · [data-chart-plot] · inline-size',
'literal · chart.css · [data-chart-tooltip] · min-inline-size',
'literal · chart.css · [data-chart] · inline-size'
],
chronos: [
'global · chronos.css · .chronos-agenda · gap',
'global · chronos.css · .chronos-agenda-date · color',
'global · chronos.css · .chronos-agenda-date · font-size',
'global · chronos.css · .chronos-agenda-date · font-weight',
'global · chronos.css · .chronos-agenda-dot · block-size',
'global · chronos.css · .chronos-agenda-dot · border-radius',
'global · chronos.css · .chronos-agenda-dot · inline-size',
'global · chronos.css · .chronos-agenda-empty · color',
'global · chronos.css · .chronos-agenda-group · gap',
'global · chronos.css · .chronos-agenda-item · background',
'global · chronos.css · .chronos-agenda-item · border',
'global · chronos.css · .chronos-agenda-item · border-radius',
'global · chronos.css · .chronos-agenda-item · color',
'global · chronos.css · .chronos-agenda-item · gap',
'global · chronos.css · .chronos-agenda-item · padding',
'global · chronos.css · .chronos-agenda-list · gap',
'global · chronos.css · .chronos-agenda-time · color',
'global · chronos.css · .chronos-agenda-time · font-size',
'global · chronos.css · .chronos-bands · gap',
'global · chronos.css · .chronos-chip-title · font-weight',
'global · chronos.css · .chronos-clock-endpoint · gap',
'global · chronos.css · .chronos-date-badge · border',
'global · chronos.css · .chronos-date-badge · border-radius',
'global · chronos.css · .chronos-date-badge · line-height',
'global · chronos.css · .chronos-date-badge · min-inline-size',
'global · chronos.css · .chronos-date-badge · padding',
'global · chronos.css · .chronos-date-badge-day · color',
'global · chronos.css · .chronos-date-badge-day · font-size',
'global · chronos.css · .chronos-date-badge-day · font-weight',
'global · chronos.css · .chronos-date-badge-month · color',
'global · chronos.css · .chronos-date-badge-month · font-size',
'global · chronos.css · .chronos-date-badge-month · font-weight',
'global · chronos.css · .chronos-day-cell-head · gap',
'global · chronos.css · .chronos-drag-preview · box-shadow',
'global · chronos.css · .chronos-editor-error · color',
'global · chronos.css · .chronos-editor-error · font-size',
'global · chronos.css · .chronos-editor-error · gap',
'global · chronos.css · .chronos-editor-fields · gap',
'global · chronos.css · .chronos-field · gap',
'global · chronos.css · .chronos-field-label · color',
'global · chronos.css · .chronos-field-label · font-family',
'global · chronos.css · .chronos-field-label · font-size',
'global · chronos.css · .chronos-field-label · font-weight',
'global · chronos.css · .chronos-legend · gap',
'global · chronos.css · .chronos-legend · padding-block-start',
'global · chronos.css · .chronos-legend-item · color',
'global · chronos.css · .chronos-legend-item · font-size',
'global · chronos.css · .chronos-legend-item · gap',
'global · chronos.css · .chronos-legend-swatch · block-size',
'global · chronos.css · .chronos-legend-swatch · border-radius',
'global · chronos.css · .chronos-legend-swatch · inline-size',
'global · chronos.css · .chronos-nav-group > :not(:first-child) · border-inline-start',
'global · chronos.css · .chronos-nav-group · border',
'global · chronos.css · .chronos-nav-group · border-radius',
'global · chronos.css · .chronos-overlay · gap',
'global · chronos.css · .chronos-pair, .chronos-band-row · gap',
'global · chronos.css · .chronos-pair-sep · color',
'global · chronos.css · .chronos-peek-allday [data-chronos-event-chip] · padding-block',
'global · chronos.css · .chronos-peek-allday · gap',
'global · chronos.css · .chronos-peek-body · border-block-start',
'global · chronos.css · .chronos-peek-body · padding-block-start',
'global · chronos.css · .chronos-peek-col · border-inline-start',
'global · chronos.css · .chronos-peek-daynum · color',
'global · chronos.css · .chronos-peek-daynum · font-size',
'global · chronos.css · .chronos-peek-daynum · font-weight',
'global · chronos.css · .chronos-peek-daynum · line-height',
'global · chronos.css · .chronos-peek-daynum[data-today] · background',
'global · chronos.css · .chronos-peek-daynum[data-today] · block-size',
'global · chronos.css · .chronos-peek-daynum[data-today] · border-radius',
'global · chronos.css · .chronos-peek-daynum[data-today] · color',
'global · chronos.css · .chronos-peek-daynum[data-today] · min-inline-size',
'global · chronos.css · .chronos-peek-empty · color',
'global · chronos.css · .chronos-peek-empty · font-size',
'global · chronos.css · .chronos-peek-empty · padding-block',
'global · chronos.css · .chronos-peek-fulldate · color',
'global · chronos.css · .chronos-peek-fulldate · font-size',
'global · chronos.css · .chronos-peek-head · border-block-end',
'global · chronos.css · .chronos-peek-head · gap',
'global · chronos.css · .chronos-peek-head · padding-block-end',
'global · chronos.css · .chronos-peek-hour · color',
'global · chronos.css · .chronos-peek-hour · font-size',
'global · chronos.css · .chronos-peek-resize · inline-size',
'global · chronos.css · .chronos-peek-resize::after · background',
'global · chronos.css · .chronos-peek-resize::after · block-size',
'global · chronos.css · .chronos-peek-resize::after · border-radius',
'global · chronos.css · .chronos-peek-resize::after · inline-size',
'global · chronos.css · .chronos-peek-resize:hover::after, .chronos-peek-resize:active::after · background',
'global · chronos.css · .chronos-peek-resize:hover::after, .chronos-peek-resize:active::after · block-size',
'global · chronos.css · .chronos-peek-slot · border-block-end',
'global · chronos.css · .chronos-peek-weekday · color',
'global · chronos.css · .chronos-peek-weekday · font-size',
'global · chronos.css · .chronos-peek-weekday · font-weight',
'global · chronos.css · .chronos-range · color',
'global · chronos.css · .chronos-range · font-size',
'global · chronos.css · .chronos-resize-handle · inline-size',
'global · chronos.css · .chronos-resize-handle-b · block-size',
'global · chronos.css · .chronos-swatch · block-size',
'global · chronos.css · .chronos-swatch · border',
'global · chronos.css · .chronos-swatch · border-radius',
'global · chronos.css · .chronos-swatch · inline-size',
'global · chronos.css · .chronos-swatch[data-selected] · box-shadow',
'global · chronos.css · .chronos-swatches · gap',
'global · chronos.css · .chronos-tg-alldaycol · border-inline-start',
'global · chronos.css · .chronos-tg-alldaycol · gap',
'global · chronos.css · .chronos-tg-alldaycol · padding',
'global · chronos.css · .chronos-tg-body · padding-block-start',
'global · chronos.css · .chronos-tg-col · border-inline-start',
'global · chronos.css · .chronos-tg-dayhead · border-inline-start',
'global · chronos.css · .chronos-tg-dayhead · color',
'global · chronos.css · .chronos-tg-dayhead · font-size',
'global · chronos.css · .chronos-tg-dayhead · gap',
'global · chronos.css · .chronos-tg-dayhead · padding-block',
'global · chronos.css · .chronos-tg-dayhead[data-today] .chronos-tg-daynum · block-size',
'global · chronos.css · .chronos-tg-dayhead[data-today] .chronos-tg-daynum · border-radius',
'global · chronos.css · .chronos-tg-dayhead[data-today] .chronos-tg-daynum · color',
'global · chronos.css · .chronos-tg-dayhead[data-today] .chronos-tg-daynum · font-weight',
'global · chronos.css · .chronos-tg-dayhead[data-today] .chronos-tg-daynum · min-inline-size',
'global · chronos.css · .chronos-tg-head, .chronos-tg-allday · border-block-end',
'global · chronos.css · .chronos-tg-hour · color',
'global · chronos.css · .chronos-tg-hour · font-size',
'global · chronos.css · .chronos-tg-now::before · block-size',
'global · chronos.css · .chronos-tg-now::before · border-radius',
'global · chronos.css · .chronos-tg-now::before · inline-size',
'global · chronos.css · .chronos-tg-railcell · color',
'global · chronos.css · .chronos-tg-railcell · font-size',
'global · chronos.css · .chronos-tg-slot · border-block-end',
'global · chronos.css · .chronos-tg-sticky · background',
'global · chronos.css · .chronos-title-block · gap',
'global · chronos.css · .chronos-title-row · gap',
'global · chronos.css · .chronos-tooltip · gap',
'global · chronos.css · .chronos-tooltip-meta · color',
'global · chronos.css · .chronos-tooltip-meta · font-size',
'global · chronos.css · .chronos-type-option · gap',
'global · chronos.css · .chronos-type-swatch · block-size',
'global · chronos.css · .chronos-type-swatch · border-radius',
'global · chronos.css · .chronos-type-swatch · inline-size',
'global · chronos.css · .chronos-week-badge · border',
'global · chronos.css · .chronos-week-badge · border-radius',
'global · chronos.css · .chronos-week-badge · color',
'global · chronos.css · .chronos-week-badge · font-size',
'global · chronos.css · .chronos-week-badge · padding',
'global · chronos.css · .chronos-when [data-time-range-picker] · gap',
'global · chronos.css · .chronos-when · background',
'global · chronos.css · .chronos-when · border',
'global · chronos.css · .chronos-when · border-radius',
'global · chronos.css · .chronos-when · gap',
'global · chronos.css · .chronos-when · padding',
'global · chronos.css · .chronos-when-field · gap',
'global · chronos.css · .chronos-when-hint · color',
'global · chronos.css · .chronos-when-hint · font-size',
'global · chronos.css · .chronos-when-label · color',
'global · chronos.css · .chronos-when-label · font-size',
'global · chronos.css · .chronos-when-label · font-weight',
'global · chronos.css · .chronos-when-warn · color',
'global · chronos.css · .chronos-when-warn · font-size',
'global · chronos.css · .chronos-when-warn · gap',
'global · chronos.css · [data-chronos-day-cell] · border-inline-end',
'global · chronos.css · [data-chronos-day-cell] · padding',
'global · chronos.css · [data-chronos-day-cell][data-outside-month] [data-chronos-day-number] · color',
'global · chronos.css · [data-chronos-day-cell][data-today] [data-chronos-day-number] · border-radius',
'global · chronos.css · [data-chronos-day-cell][data-today] [data-chronos-day-number] · color',
'global · chronos.css · [data-chronos-day-cell][data-today] [data-chronos-day-number] · font-weight',
'global · chronos.css · [data-chronos-day-cell][data-weekend], [data-chronos-day-cell][data-outside-month] · background',
'global · chronos.css · [data-chronos-day-number] · block-size',
'global · chronos.css · [data-chronos-day-number] · color',
'global · chronos.css · [data-chronos-day-number] · font-size',
'global · chronos.css · [data-chronos-day-number] · min-inline-size',
'global · chronos.css · [data-chronos-day-peek] · gap',
'global · chronos.css · [data-chronos-event-chip] · border-radius',
'global · chronos.css · [data-chronos-event-chip] · font-size',
'global · chronos.css · [data-chronos-event-chip] · gap',
'global · chronos.css · [data-chronos-event-chip] · padding-inline',
'global · chronos.css · [data-chronos-event-chip][data-timed] · padding-block',
'global · chronos.css · [data-chronos-grid-head] · border-block-end',
'global · chronos.css · [data-chronos-grid-row]:not(:last-child) · border-block-end',
'global · chronos.css · [data-chronos-grid] · background',
'global · chronos.css · [data-chronos-grid] · border',
'global · chronos.css · [data-chronos-grid] · border-radius',
'global · chronos.css · [data-chronos-head-cell] · color',
'global · chronos.css · [data-chronos-head-cell] · font-size',
'global · chronos.css · [data-chronos-head-cell] · font-weight',
'global · chronos.css · [data-chronos-head-cell] · padding-block',
'global · chronos.css · [data-chronos-heading] · color',
'global · chronos.css · [data-chronos-heading] · font-size',
'global · chronos.css · [data-chronos-heading] · font-weight',
'global · chronos.css · [data-chronos-peek-panel] · min-block-size',
'global · chronos.css · [data-chronos-peek-panel] · min-inline-size',
'global · chronos.css · [data-chronos-time-view] · background',
'global · chronos.css · [data-chronos-time-view] · border',
'global · chronos.css · [data-chronos-time-view] · border-radius',
'global · chronos.css · [data-chronos-toolbar] · gap',
'global · chronos.css · [data-chronos] · color',
'global · chronos.css · [data-chronos] · font-family',
'global · chronos.css · [data-chronos] · font-size',
'global · chronos.css · [data-chronos] · gap',
'global · chronos.css · [data-chronos] · line-height',
"global · chronos.css · [data-chronos][data-size='lg'] · font-size",
"global · chronos.css · [data-chronos][data-size='sm'] · font-size",
'literal · chronos.css · .chronos-editor-fields [data-date-field-input], .chronos-editor-fields [data-select-trigger], .chronos-editor-fields [data-field-input] · inline-size',
'literal · chronos.css · .chronos-editor-fields [data-date-range-picker] · inline-size',
'literal · chronos.css · .chronos-editor-fields [data-field], .chronos-editor-fields [data-field-control], .chronos-editor-fields [data-date-field], .chronos-editor-fields [data-select] · inline-size',
'literal · chronos.css · .chronos-editor-fields · inline-size',
'literal · chronos.css · .chronos-field · inline-size',
'literal · chronos.css · .chronos-pair > [data-date-range-field-input], .chronos-when-field > [data-time-range-picker], .chronos-band-row > [data-time-range-picker] · inline-size',
'literal · chronos.css · .chronos-peek-scroll · inline-size',
'literal · chronos.css · .chronos-when [data-time-range-field-input] · inline-size',
'literal · chronos.css · [data-chronos-day-cell]:hover [data-chronos-day-add], [data-chronos-day-add]:focus-visible · opacity',
'literal · chronos.css · [data-chronos-event-chip][data-draft] · opacity',
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
'literal · chronos.css · [data-chronos] · inline-size',
'private · chronos.css · .chronos-peek-hour · block-size',
'private · chronos.css · .chronos-peek-slot · block-size',
'private · chronos.css · .chronos-tg-dayhead[data-today] .chronos-tg-daynum · background',
'private · chronos.css · .chronos-tg-hour · block-size',
'private · chronos.css · .chronos-tg-now · border-block-start',
'private · chronos.css · .chronos-tg-now::before · background',
'private · chronos.css · .chronos-tg-slot · block-size',
'private · chronos.css · .chronos-tg-slot[data-dragover], .chronos-tg-alldaycol[data-dragover] · background',
'private · chronos.css · .chronos-tg-slot[data-dragover], .chronos-tg-alldaycol[data-dragover] · box-shadow',
'private · chronos.css · [data-chronos-day-cell][data-dragover] · background',
'private · chronos.css · [data-chronos-day-cell][data-dragover] · box-shadow',
'private · chronos.css · [data-chronos-day-cell][data-today] [data-chronos-day-number] · background',
'private · chronos.css · [data-chronos-event-chip][data-continues-after] · padding-inline-end',
'private · chronos.css · [data-chronos-event-chip][data-continues-before] · padding-inline-start'
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
],
clipboard: ['global · clipboard.css · [data-clipboard-indicator] · font-family'],
'code-block': [
'global · code-block.css · [data-code-block-code] · font-family',
'global · code-block.css · [data-code-block-code] · font-weight',
'global · code-block.css · [data-code-block-code] · letter-spacing'
],
'color-field': [
'global · color-field.css · [data-color-field-swatch][data-color-swatch] · border-radius'
],
'color-picker': [
'global · color-picker.css · [data-color-picker-channel-slider][data-slider]::after · block-size',
'global · color-picker.css · [data-color-picker-channel-slider][data-slider]::after · border-radius',
'literal · color-picker.css · [data-color-picker-area-background]::after · background',
'literal · color-picker.css · [data-color-picker-area-background]::before · background',
'literal · color-picker.css · [data-color-picker-area-background]:dir(rtl)::before · background',
'literal · color-picker.css · [data-color-picker-area] · inline-size',
"literal · color-picker.css · [data-color-picker-area][data-x-channel='hue'][data-y-channel='brightness'] [data-color-picker-area-background]::after · background",
'literal · color-picker.css · [data-color-picker-channel-slider][data-slider] [data-slider-range] · background',
'literal · color-picker.css · [data-color-picker-channel-slider][data-slider] · inline-size',
'literal · color-picker.css · [data-color-picker-swatch-group] · inline-size',
'literal · color-picker.css · [data-color-picker-swatch-indicator] · block-size',
'literal · color-picker.css · [data-color-picker-swatch-indicator] · inline-size',
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
'literal · color-picker.css · [data-color-picker] · inline-size',
'private · color-picker.css · [data-color-picker-label] · font-size',
'private · color-picker.css · [data-color-picker-trigger] · font-size',
'private · color-picker.css · [data-color-picker-value-text] · font-size'
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
],
combobox: [
'global · combobox.css · [data-combobox-selected-tag-remove]:hover · background',
'global · combobox.css · [data-combobox-trigger]:hover:not(:disabled):not([data-disabled]) · background',
'global · combobox.css · [data-combobox-trigger]:hover:not(:disabled):not([data-disabled]) · color',
'literal · combobox.css · [data-combobox-control] · inline-size',
'literal · combobox.css · [data-combobox-input] · inline-size',
"literal · combobox.css · [data-combobox-item][data-state='checked'] [data-combobox-item-indicator] · opacity",
'literal · combobox.css · [data-combobox-selected-tag-remove]:focus-visible · opacity',
'literal · combobox.css · [data-combobox-selected-tag-remove]:hover · opacity',
'literal · combobox.css · [data-combobox] · inline-size'
],
command: ['literal · command.css · [data-command] · inline-size'],
'context-menu': [
'global · context-menu.css · [data-context-menu-content], [data-context-menu-sub-content] · font-family',
'literal · context-menu.css · [data-context-menu-separator] · block-size',
'literal · context-menu.css · [data-context-menu-sub-trigger]::after · block-size',
'literal · context-menu.css · [data-context-menu-sub-trigger]::after · inline-size'
],
cropper: ['global · cropper.css · [data-cropper-zoom-btn]:hover · background'],
'date-range-picker': [
'global · date-range-picker-time.css · .range-time · border-block-start',
'global · date-range-picker-time.css · .range-time · gap',
'global · date-range-picker-time.css · .range-time · padding-block-start',
'global · date-range-picker.css · [data-date-range-field-input] [data-date-range-picker-trigger] · block-size',
'global · date-range-picker.css · [data-date-range-field-input] [data-date-range-picker-trigger] · border-radius',
'global · date-range-picker.css · [data-date-range-field-input] [data-date-range-picker-trigger] · inline-size',
'global · date-range-picker.css · [data-date-range-field-input] [data-date-range-picker-trigger]:hover, [data-date-range-field-input] [data-date-range-picker-trigger]:focus-visible · background',
'global · date-range-picker.css · [data-date-range-field-input] [data-date-range-picker-trigger]:hover, [data-date-range-field-input] [data-date-range-picker-trigger]:focus-visible · color',
'global · date-range-picker.css · [data-date-range-picker-calendar][data-range-calendar] · color',
'global · date-range-picker.css · [data-date-range-picker-calendar][data-range-calendar] · font-family',
'global · date-range-picker.css · [data-date-range-picker-calendar][data-range-calendar] · gap',
'global · date-range-picker.css · [data-date-range-picker-calendar][data-range-calendar] · line-height',
'global · date-range-picker.css · [data-date-range-picker-trigger] · background',
'global · date-range-picker.css · [data-date-range-picker-trigger] · border',
'global · date-range-picker.css · [data-date-range-picker-trigger] · border-radius',
'global · date-range-picker.css · [data-date-range-picker-trigger][data-disabled], [data-date-range-picker-trigger]:disabled · opacity',
'global · date-range-picker.css · [data-date-range-picker-year-view-cell], [data-date-range-picker-month-view-cell] · border',
'global · date-range-picker.css · [data-date-range-picker-year-view-prev], [data-date-range-picker-year-view-next], [data-date-range-picker-month-view-prev], [data-date-range-picker-month-view-next] · border',
'global · date-range-picker.css · [data-date-range-picker][data-invalid] [data-field-control] · border-color',
'literal · date-range-picker.css · [data-date-range-picker-calendar][data-range-calendar] · inline-size',
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
'literal · date-range-picker.css · [data-date-range-picker] · inline-size',
'private · date-range-picker.css · [data-date-range-picker-calendar][data-range-calendar] · font-size',
'private · date-range-picker.css · [data-date-range-picker-trigger] · block-size',
'private · date-range-picker.css · [data-date-range-picker-trigger] · inline-size',
'private · date-range-picker.css · [data-date-range-picker-trigger]:focus-visible · border-color',
'private · date-range-picker.css · [data-date-range-picker-trigger]:hover · background',
'private · date-range-picker.css · [data-date-range-picker-trigger]:hover · border-color',
'private · date-range-picker.css · [data-date-range-picker-trigger]:hover · color',
'private · date-range-picker.css · [data-date-range-picker] · font-size',
'private · date-range-picker.css · [data-date-range-picker] · gap'
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
],
drawer: [
"global · drawer.css · [data-drawer-content][data-side='bottom'] · border-top",
"global · drawer.css · [data-drawer-content][data-side='left'] · border-right",
"global · drawer.css · [data-drawer-content][data-side='right'] · border-left",
"global · drawer.css · [data-drawer-content][data-side='top'] · border-bottom",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='bottom'][data-last-action='cancelled'], [data-drawer-content][data-state='closed'][data-side='bottom'][data-last-action='dismissed'], [data-drawer-content][data-state='closed'][data-side='bottom'][data-last-action='dismissed-outside'] · border-top-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='bottom'][data-last-action='failed'] · border-top-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='bottom'][data-last-action='saved'] · border-top-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='left'][data-last-action='cancelled'], [data-drawer-content][data-state='closed'][data-side='left'][data-last-action='dismissed'], [data-drawer-content][data-state='closed'][data-side='left'][data-last-action='dismissed-outside'] · border-right-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='left'][data-last-action='failed'] · border-right-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='left'][data-last-action='saved'] · border-right-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='right'][data-last-action='cancelled'], [data-drawer-content][data-state='closed'][data-side='right'][data-last-action='dismissed'], [data-drawer-content][data-state='closed'][data-side='right'][data-last-action='dismissed-outside'] · border-left-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='right'][data-last-action='failed'] · border-left-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='right'][data-last-action='saved'] · border-left-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='top'][data-last-action='cancelled'], [data-drawer-content][data-state='closed'][data-side='top'][data-last-action='dismissed'], [data-drawer-content][data-state='closed'][data-side='top'][data-last-action='dismissed-outside'] · border-bottom-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='top'][data-last-action='failed'] · border-bottom-color",
"global · drawer.css · [data-drawer-content][data-state='closed'][data-side='top'][data-last-action='saved'] · border-bottom-color",
"literal · drawer.css · [data-drawer-content][data-variant='persistent'][data-side='left'], [data-drawer-content][data-variant='persistent'][data-side='right'] · block-size",
"literal · drawer.css · [data-drawer-content][data-variant='persistent'][data-side='top'], [data-drawer-content][data-variant='persistent'][data-side='bottom'] · inline-size",
"literal · drawer.css · [data-drawer-content][data-variant='persistent'][data-size='full'] · height",
"literal · drawer.css · [data-drawer-content][data-variant='persistent'][data-size='full'] · width",
"literal · drawer.css · [data-drawer-overlay][data-variant='overlay'] · opacity"
],
'dropdown-menu': [
'global · dropdown-menu.css · [data-dropdown-menu-content], [data-dropdown-menu-sub-content] · font-family'
],
feed: [
'global · feed.css · [data-feed][data-busy] [data-feed-sentinel]::before · border-radius',
'literal · feed.css · [data-feed-root][data-block] · inline-size'
],
'field-langs': [
'global · field-langs.css · [data-field-langs-lang-option]::after · background',
'global · field-langs.css · [data-field-langs-lang-option]::after · border-radius',
'global · field-langs.css · [data-field-langs-lang-option][data-complete]::after · background',
'global · field-langs.css · [data-field-langs-lang-option][data-required]:not([data-complete])::after · background',
'global · field-langs.css · [data-field-langs-menu] [data-field-langs-lang-option] · border-radius',
'global · field-langs.css · [data-field-langs-menu] [data-field-langs-lang-option] · color',
'global · field-langs.css · [data-field-langs-menu] [data-field-langs-lang-option] · font-size',
'global · field-langs.css · [data-field-langs-menu] [data-field-langs-lang-option] · gap',
'global · field-langs.css · [data-field-langs-menu] [data-field-langs-lang-option] · padding',
'global · field-langs.css · [data-field-langs-menu] [data-field-langs-lang-option][data-active] · background',
'global · field-langs.css · [data-field-langs-menu] [data-field-langs-lang-option][data-active] · color',
'global · field-langs.css · [data-field-langs-menu] · gap',
"global · field-langs.css · [data-field-langs-switcher][data-mode='segmented'] [data-field-langs-lang-option] + [data-field-langs-lang-option] · border-inline-start",
"global · field-langs.css · [data-field-langs-switcher][data-mode='segmented'] [data-field-langs-lang-option] · color",
"global · field-langs.css · [data-field-langs-switcher][data-mode='segmented'] [data-field-langs-lang-option] · font-size",
"global · field-langs.css · [data-field-langs-switcher][data-mode='segmented'] [data-field-langs-lang-option] · gap",
"global · field-langs.css · [data-field-langs-switcher][data-mode='segmented'] [data-field-langs-lang-option] · padding-inline",
"global · field-langs.css · [data-field-langs-switcher][data-mode='segmented'] [data-field-langs-lang-option]:disabled · color",
"global · field-langs.css · [data-field-langs-switcher][data-mode='segmented'] [data-field-langs-lang-option][data-active] · background",
"global · field-langs.css · [data-field-langs-switcher][data-mode='segmented'] [data-field-langs-lang-option][data-active] · color",
"global · field-langs.css · [data-field-langs-switcher][data-mode='select'] [data-popover-trigger] · color",
"global · field-langs.css · [data-field-langs-switcher][data-mode='select'] [data-popover-trigger] · font-size",
"global · field-langs.css · [data-field-langs-switcher][data-mode='select'] [data-popover-trigger] · gap",
"global · field-langs.css · [data-field-langs-switcher][data-mode='select'] [data-popover-trigger] · padding-inline",
'global · field-langs.css · [data-field-langs-textarea] [data-field-langs-switcher] · background',
'global · field-langs.css · [data-field-langs-textarea] [data-field-langs-switcher] · border',
'global · field-langs.css · [data-field-langs-textarea] [data-field-langs-switcher] · border-radius',
"global · field-langs.css · [data-field-langs-textarea] [data-field-langs-switcher][data-mode='segmented'] [data-field-langs-lang-option] · padding-block",
'global · field-langs.css · [data-field-langs-textarea] [data-textarea-input] · padding-block-start',
"global · field-langs.css · [data-field-langs][data-switcher-side='end'] [data-field-control] [data-field-langs-switcher][data-mode='segmented'] · border-inline-start",
"global · field-langs.css · [data-field-langs][data-switcher-side='start'] [data-field-control] [data-field-langs-switcher][data-mode='segmented'] · border-inline-end",
'literal · field-langs.css · [data-field-langs-menu] [data-field-langs-lang-option] · inline-size',
'literal · field-langs.css · [data-field-langs-menu] [data-field-langs-lang-option] · line-height',
'literal · field-langs.css · [data-field-langs-menu] · min-inline-size',
"literal · field-langs.css · [data-field-langs-switcher][data-mode='segmented'] [data-field-langs-lang-option] · line-height",
"literal · field-langs.css · [data-field-langs-switcher][data-mode='select'] [data-popover-trigger] · line-height",
'literal · field-langs.css · [data-field-langs] · inline-size'
],
'float-panel': [
'literal · float-panel.css · [data-float-panel-action], [data-float-panel-stage-trigger] · line-height',
'literal · float-panel.css · [data-float-panel-resize-grip] · background-image',
'literal · float-panel.css · [data-float-panel-resize-grip]:dir(rtl) · background-image',
'literal · float-panel.css · [data-float-panel-resize-grip]:focus-visible · opacity',
'literal · float-panel.css · [data-float-panel-resize-grip]:hover, [data-float-panel-resize-grip][data-grabbed] · opacity'
],
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
form: [
'private · form.css · [data-form-auto-fields-array-add], [data-form-auto-fields-array-remove] · background',
'private · form.css · [data-form-auto-fields-array-add], [data-form-auto-fields-array-remove] · color',
'private · form.css · [data-form-auto-fields-array-add]:not(:disabled):hover, [data-form-auto-fields-array-remove]:not(:disabled):hover · background'
],
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
'gradient-builder': [
'global · gradient-builder.css · [data-gradient-builder-stop]:focus-visible · box-shadow',
'literal · gradient-builder.css · [data-gradient-builder-preset] · inline-size',
'literal · gradient-builder.css · [data-gradient-builder-stop-color-sliders] · inline-size',
'literal · gradient-builder.css · [data-gradient-builder] · inline-size'
],
'gradient-picker': [
'global · gradient-picker.css · .gradient-picker-trigger-swatch · background',
'global · gradient-picker.css · [data-gradient-picker-value-swatch] · background',
'literal · gradient-picker.css · [data-gradient-picker-preset] · inline-size'
],
'grid-list': [
'global · grid-list.css · [data-grid-list-row]:hover:not([data-disabled]), [data-grid-list-row][data-highlighted]:not([data-disabled]) · background',
'literal · grid-list.css · [data-grid-list][data-block] · inline-size'
],
kbd: [
'global · kbd.css · [data-kbd] · font-family',
'literal · kbd.css · [data-kbd] · line-height'
],
knob: [
'global · knob.css · [data-knob-value-field] [data-spin-field-input]:focus-visible · border-radius',
'literal · knob.css · [data-knob-control]:hover · filter',
'literal · knob.css · [data-knob-value-field] [data-spin-field-input] · line-height',
'literal · knob.css · [data-knob-value-text] · line-height'
],
link: [
'global · link.css · [data-link]:active, [data-link][data-variant]:active · opacity',
'literal · link.css · [data-link-sr-only] · height',
'literal · link.css · [data-link-sr-only] · width'
],
listbox: [
'global · listbox.css · [data-listbox-item][data-highlighted]:not([data-disabled]) · background',
'literal · listbox.css · [data-listbox][data-block] · inline-size'
],
'media-player': [
'literal · media-player.css · [data-media-player-media] · height',
'literal · media-player.css · [data-media-player-media] · width',
'literal · media-player.css · [data-media-player-poster] · height',
'literal · media-player.css · [data-media-player-poster] · width',
'literal · media-player.css · [data-media-player-rate-float], [data-media-player-caption-float] · inline-size',
'literal · media-player.css · [data-media-player] · width'
],
'menu-dial': [
'global · menu-dial.css · .menu-dial-glyph::before, .menu-dial-glyph::after · border-radius',
'literal · menu-dial.css · .menu-dial-glyph · block-size',
'literal · menu-dial.css · .menu-dial-glyph · inline-size',
'literal · menu-dial.css · .menu-dial-glyph::before, .menu-dial-glyph::after · block-size',
"literal · menu-dial.css · [data-menu-dial-list][data-state='open'] .menu-dial-action · opacity"
],
menubar: [
'global · menubar.css · [data-menubar-panel] · font-family',
'global · menubar.css · [data-menubar-panel] · line-height',
'global · menubar.css · [data-menubar-trigger]:hover:not([data-disabled]), [data-menubar-trigger][data-highlighted]:not([data-disabled]) · background'
],
meter: [
"global · meter.css · [data-meter][data-shape='circular'] [data-meter-indicator]::before · border-radius",
"global · meter.css · [data-meter][data-shape='circular'] · border-radius"
],
metrics: [
'literal · metrics.css · [data-metrics-actions] · inline-size',
'literal · metrics.css · [data-metrics-chart] · inline-size',
'literal · metrics.css · [data-metrics-gauge-value] · line-height',
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
'literal · metrics.css · [data-metrics-progress] · inline-size',
"private · metrics.css · [data-metrics-icon][data-variant='solid'] · background",
"private · metrics.css · [data-metrics-icon][data-variant='solid'] · color"
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
],
mockup: [
'global · mockup.css · [data-box][data-mockup] [data-mockup-bar] · background',
'global · mockup.css · [data-box][data-mockup] [data-mockup-bar] · gap',
'global · mockup.css · [data-box][data-mockup] [data-mockup-bar] · padding-inline',
'global · mockup.css · [data-box][data-mockup] [data-mockup-dot] · background',
'global · mockup.css · [data-box][data-mockup] [data-mockup-dot] · border-radius',
'global · mockup.css · [data-box][data-mockup] [data-mockup-url] · background',
'global · mockup.css · [data-box][data-mockup] [data-mockup-url] · border-radius',
'global · mockup.css · [data-box][data-mockup] [data-mockup-url] · color',
'global · mockup.css · [data-box][data-mockup] [data-mockup-url] · font-size',
'global · mockup.css · [data-box][data-mockup] [data-mockup-url] · padding-block',
'global · mockup.css · [data-box][data-mockup] [data-mockup-url] · padding-inline',
'global · mockup.css · [data-box][data-mockup] · inline-size',
"global · mockup.css · [data-box][data-mockup][data-chrome='phone'] [data-mockup-screen] · background",
'literal · mockup.css · [data-box][data-mockup] [data-mockup-dot] · block-size',
'literal · mockup.css · [data-box][data-mockup] [data-mockup-dot] · inline-size',
'literal · mockup.css · [data-box][data-mockup] [data-mockup-screen] > :where(img, video, picture, svg) · inline-size',
"literal · mockup.css · [data-box][data-mockup][data-chrome='phone']::before · block-size",
"literal · mockup.css · [data-box][data-mockup][data-chrome='phone']::before · inline-size"
],
'month-grid': [
'literal · month-grid.css · [data-month-grid-grid] · inline-size',
'literal · month-grid.css · [data-month-grid-header] · inline-size',
'literal · month-grid.css · [data-month-grid] · inline-size',
'literal · month-grid.css · [data-popover-content] [data-month-grid-grid] · inline-size',
'literal · month-grid.css · [data-popover-content] [data-month-grid] · inline-size'
],
'natural-time-picker': [
'global · natural-time-picker.css · [data-natural-time-picker-panel] · background',
'global · natural-time-picker.css · [data-natural-time-picker-panel] · border',
'global · natural-time-picker.css · [data-natural-time-picker-panel] · border-radius',
'global · natural-time-picker.css · [data-natural-time-picker-panel] · box-shadow',
'global · natural-time-picker.css · [data-natural-time-picker-panel] · color',
'global · natural-time-picker.css · [data-natural-time-picker-panel] · min-inline-size',
'global · natural-time-picker.css · [data-natural-time-picker-panel] · padding-block',
'global · natural-time-picker.css · [data-natural-time-picker-panel] · padding-inline',
"global · natural-time-picker.css · [data-natural-time-picker-panel][data-size='lg'] · min-inline-size",
"global · natural-time-picker.css · [data-natural-time-picker-panel][data-size='lg'] · padding-block",
"global · natural-time-picker.css · [data-natural-time-picker-panel][data-size='lg'] · padding-inline",
"global · natural-time-picker.css · [data-natural-time-picker-panel][data-size='sm'] · min-inline-size",
"global · natural-time-picker.css · [data-natural-time-picker-panel][data-size='sm'] · padding-block",
"global · natural-time-picker.css · [data-natural-time-picker-panel][data-size='sm'] · padding-inline",
'literal · natural-time-picker.css · [data-natural-time-picker-band] · inline-size',
'literal · natural-time-picker.css · [data-natural-time-picker-meridiem] · line-height',
'literal · natural-time-picker.css · [data-natural-time-picker-panel] [data-natural-time-picker-periods]:not([data-icon-only]) [data-button] · inline-size',
'literal · natural-time-picker.css · [data-natural-time-picker-panel] · inline-size',
'literal · natural-time-picker.css · [data-natural-time-picker-tick] · line-height',
'literal · natural-time-picker.css · [data-natural-time-picker-time] · line-height'
],
'nav-tree': [
'literal · nav-tree.css · [data-nav-tree-link], [data-nav-tree-trigger] · inline-size'
],
'onion-menu': [
'global · onion-menu.css · .onion-menu-trigger · background',
'literal · onion-menu.css · .onion-menu-icon :global(svg) · block-size',
'literal · onion-menu.css · .onion-menu-icon :global(svg) · inline-size'
],
palabras: [
'global · palabras-chrome.css · [data-palabras-appearance][data-palabras-appearance], [data-palabras-appearance][data-palabras-appearance] * · font-family',
'global · palabras-chrome.css · [data-palabras-border-caption] · color',
'global · palabras-chrome.css · [data-palabras-border-caption] · font-size',
'global · palabras-chrome.css · [data-palabras-border-field] · column-gap',
'global · palabras-chrome.css · [data-palabras-border-field][data-stack] · row-gap',
'global · palabras-chrome.css · [data-palabras-border-pair] · column-gap',
'global · palabras-chrome.css · [data-palabras-border-row] · column-gap',
'global · palabras-chrome.css · [data-palabras-border] · gap',
'global · palabras-chrome.css · [data-palabras-bubble-divider] · background',
'global · palabras-chrome.css · [data-palabras-bubble-link] input · background',
'global · palabras-chrome.css · [data-palabras-bubble-link] input · border',
'global · palabras-chrome.css · [data-palabras-bubble-link] input · border-radius',
'global · palabras-chrome.css · [data-palabras-bubble-link] input · color',
'global · palabras-chrome.css · [data-palabras-bubble-link] input · font-size',
'global · palabras-chrome.css · [data-palabras-bubble-link] input · padding',
'global · palabras-chrome.css · [data-palabras-bubble-link] input:focus · background',
'global · palabras-chrome.css · [data-palabras-bubble-link] · gap',
'global · palabras-chrome.css · [data-palabras-bubble-typo] · gap',
'global · palabras-chrome.css · [data-palabras-bubble] [data-active] · background',
'global · palabras-chrome.css · [data-palabras-bubble] [data-active] · color',
'global · palabras-chrome.css · [data-palabras-bubble] · background',
'global · palabras-chrome.css · [data-palabras-bubble] · border',
'global · palabras-chrome.css · [data-palabras-bubble] · border-radius',
'global · palabras-chrome.css · [data-palabras-bubble] · box-shadow',
'global · palabras-chrome.css · [data-palabras-bubble] · font-family',
'global · palabras-chrome.css · [data-palabras-bubble] · gap',
'global · palabras-chrome.css · [data-palabras-bubble] · padding',
'global · palabras-chrome.css · [data-palabras-canvas] [data-palabras-block-drop-line] · background',
'global · palabras-chrome.css · [data-palabras-col-resize]::before · background',
'global · palabras-chrome.css · [data-palabras-col-resize]::before · border-radius',
'global · palabras-chrome.css · [data-palabras-col-resize]:hover::before, [data-palabras-col-resize][data-dragging]::before · background',
'global · palabras-chrome.css · [data-palabras-delete] · color',
'global · palabras-chrome.css · [data-palabras-delete]:hover:not(:disabled) · color',
'global · palabras-chrome.css · [data-palabras-doc] [data-button][data-palabras-handle]:hover:not([data-disabled]), [data-palabras-canvas] [data-palabras-column-inserter] [data-button][data-palabras-column-inserter-button]:hover:not([data-disabled]) · background',
'global · palabras-chrome.css · [data-palabras-doc] [data-button][data-palabras-handle]:hover:not([data-disabled]), [data-palabras-canvas] [data-palabras-column-inserter] [data-button][data-palabras-column-inserter-button]:hover:not([data-disabled]) · border-color',
'global · palabras-chrome.css · [data-palabras-doc] [data-button][data-palabras-handle]:hover:not([data-disabled]), [data-palabras-canvas] [data-palabras-column-inserter] [data-button][data-palabras-column-inserter-button]:hover:not([data-disabled]) · color',
'global · palabras-chrome.css · [data-palabras-doc] [data-palabras-handle], [data-palabras-canvas] [data-palabras-column-inserter] [data-palabras-column-inserter-button] · background',
'global · palabras-chrome.css · [data-palabras-doc] [data-palabras-handle], [data-palabras-canvas] [data-palabras-column-inserter] [data-palabras-column-inserter-button] · border',
'global · palabras-chrome.css · [data-palabras-doc] [data-palabras-handle], [data-palabras-canvas] [data-palabras-column-inserter] [data-palabras-column-inserter-button] · border-radius',
'global · palabras-chrome.css · [data-palabras-doc] [data-palabras-handle], [data-palabras-canvas] [data-palabras-column-inserter] [data-palabras-column-inserter-button] · box-shadow',
'global · palabras-chrome.css · [data-palabras-doc] [data-palabras-handle], [data-palabras-canvas] [data-palabras-column-inserter] [data-palabras-column-inserter-button] · color',
'global · palabras-chrome.css · [data-palabras-export-actions] · gap',
'global · palabras-chrome.css · [data-palabras-export-foot] · border-block-start',
'global · palabras-chrome.css · [data-palabras-export-foot] · gap',
'global · palabras-chrome.css · [data-palabras-export-foot] · padding',
'global · palabras-chrome.css · [data-palabras-export-label] · color',
'global · palabras-chrome.css · [data-palabras-export-label] · font-size',
'global · palabras-chrome.css · [data-palabras-export-label] · gap',
'global · palabras-chrome.css · [data-palabras-field-label] · color',
'global · palabras-chrome.css · [data-palabras-field-label] · font-size',
'global · palabras-chrome.css · [data-palabras-field-label] · line-height',
'global · palabras-chrome.css · [data-palabras-field] · column-gap',
'global · palabras-chrome.css · [data-palabras-field] · row-gap',
'global · palabras-chrome.css · [data-palabras-field][data-slider] [data-palabras-slider-head] · gap',
'global · palabras-chrome.css · [data-palabras-field][data-slider] [data-palabras-slider-value] · color',
'global · palabras-chrome.css · [data-palabras-field][data-slider] [data-palabras-slider-value] · font-size',
'global · palabras-chrome.css · [data-palabras-field][data-slider] · row-gap',
'global · palabras-chrome.css · [data-palabras-find-count] · color',
'global · palabras-chrome.css · [data-palabras-find-count] · font-size',
'global · palabras-chrome.css · [data-palabras-find-icon] · color',
'global · palabras-chrome.css · [data-palabras-find-icon] · padding-inline',
'global · palabras-chrome.css · [data-palabras-find-input] · background',
'global · palabras-chrome.css · [data-palabras-find-input] · border',
'global · palabras-chrome.css · [data-palabras-find-input] · border-radius',
'global · palabras-chrome.css · [data-palabras-find-input] · color',
'global · palabras-chrome.css · [data-palabras-find-input] · font-size',
'global · palabras-chrome.css · [data-palabras-find-input] · padding',
'global · palabras-chrome.css · [data-palabras-find-input]:focus · background',
'global · palabras-chrome.css · [data-palabras-find-row] · gap',
'global · palabras-chrome.css · [data-palabras-find-sep] · background',
'global · palabras-chrome.css · [data-palabras-find] [data-active] · background',
'global · palabras-chrome.css · [data-palabras-find] [data-active] · color',
'global · palabras-chrome.css · [data-palabras-find] · background',
'global · palabras-chrome.css · [data-palabras-find] · border',
'global · palabras-chrome.css · [data-palabras-find] · border-radius',
'global · palabras-chrome.css · [data-palabras-find] · box-shadow',
'global · palabras-chrome.css · [data-palabras-find] · font-family',
'global · palabras-chrome.css · [data-palabras-find] · gap',
'global · palabras-chrome.css · [data-palabras-find] · padding',
'global · palabras-chrome.css · [data-palabras-find][data-invalid] [data-palabras-find-row]:first-child [data-palabras-find-input] · border-color',
"global · palabras-chrome.css · [data-palabras-handle-menu] [role='menuitem'] · gap",
'global · palabras-chrome.css · [data-palabras-help] kbd · background',
'global · palabras-chrome.css · [data-palabras-help] kbd · border',
'global · palabras-chrome.css · [data-palabras-help] kbd · border-radius',
'global · palabras-chrome.css · [data-palabras-help] kbd · padding-inline',
'global · palabras-chrome.css · [data-palabras-help] · color',
'global · palabras-chrome.css · [data-palabras-help] · font-size',
'global · palabras-chrome.css · [data-palabras-inspector-fields] · gap',
'global · palabras-chrome.css · [data-palabras-inspector] * · font-family',
'global · palabras-chrome.css · [data-palabras-inspector] :is([data-field-control], [data-css-field], [data-textarea-input]), [data-palabras-inspector] [data-select-trigger] · background',
'global · palabras-chrome.css · [data-palabras-inspector] :is([data-field-control], [data-css-field], [data-textarea-input]), [data-palabras-inspector] [data-select-trigger] · border-radius',
'global · palabras-chrome.css · [data-palabras-inspector] :is([data-textarea-input], [data-field] input) · font-size',
'global · palabras-chrome.css · [data-palabras-inspector] [data-field-control]:focus-within, [data-palabras-inspector] [data-css-field]:focus-within, [data-palabras-inspector] [data-textarea][data-focused] [data-textarea-input], [data-palabras-inspector] [data-select-trigger]:focus-visible · background',
'global · palabras-chrome.css · [data-palabras-inspector] [data-palabras-adjustments] · column-gap',
'global · palabras-chrome.css · [data-palabras-inspector] [data-palabras-adjustments] · row-gap',
'global · palabras-chrome.css · [data-palabras-inspector] [data-palabras-typography] · gap',
'global · palabras-chrome.css · [data-palabras-inspector] · font-family',
'global · palabras-chrome.css · [data-palabras-inspector] · inline-size',
'global · palabras-chrome.css · [data-palabras-inspector] · padding',
'global · palabras-chrome.css · [data-palabras-lang-menu-content] · padding',
'global · palabras-chrome.css · [data-palabras-lang-menu] [data-palabras-lang-option] · min-block-size',
'global · palabras-chrome.css · [data-palabras-lang-menu] · gap',
'global · palabras-chrome.css · [data-palabras-lang-option] · border-radius',
'global · palabras-chrome.css · [data-palabras-lang-option] · color',
'global · palabras-chrome.css · [data-palabras-lang-option] · font-size',
'global · palabras-chrome.css · [data-palabras-lang-option] · gap',
'global · palabras-chrome.css · [data-palabras-lang-option] · min-block-size',
'global · palabras-chrome.css · [data-palabras-lang-option] · padding-inline',
'global · palabras-chrome.css · [data-palabras-lang-option]::before · border',
'global · palabras-chrome.css · [data-palabras-lang-option]::before · border-radius',
'global · palabras-chrome.css · [data-palabras-lang-option]:hover:not([data-active]) · color',
'global · palabras-chrome.css · [data-palabras-lang-option][data-complete]::before · background',
'global · palabras-chrome.css · [data-palabras-lang-option][data-complete]::before · border-color',
"global · palabras-chrome.css · [data-palabras-lang-switcher][data-mode='segmented'] [data-palabras-lang-option][data-active] · background",
"global · palabras-chrome.css · [data-palabras-lang-switcher][data-mode='segmented'] [data-palabras-lang-option][data-active] · color",
"global · palabras-chrome.css · [data-palabras-lang-switcher][data-mode='segmented'] · background",
"global · palabras-chrome.css · [data-palabras-lang-switcher][data-mode='segmented'] · border-radius",
"global · palabras-chrome.css · [data-palabras-lang-switcher][data-mode='segmented'] · gap",
"global · palabras-chrome.css · [data-palabras-lang-switcher][data-mode='segmented'] · padding",
'global · palabras-chrome.css · [data-palabras-lang-trigger] · background',
'global · palabras-chrome.css · [data-palabras-lang-trigger] · border',
'global · palabras-chrome.css · [data-palabras-lang-trigger] · border-radius',
'global · palabras-chrome.css · [data-palabras-lang-trigger] · color',
'global · palabras-chrome.css · [data-palabras-lang-trigger] · font-size',
'global · palabras-chrome.css · [data-palabras-lang-trigger] · gap',
'global · palabras-chrome.css · [data-palabras-lang-trigger] · min-block-size',
'global · palabras-chrome.css · [data-palabras-lang-trigger] · padding-inline',
'global · palabras-chrome.css · [data-palabras-menubar-crumbs] [data-breadcrumb-link] · font-size',
'global · palabras-chrome.css · [data-palabras-menubar-crumbs] · padding-inline',
'global · palabras-chrome.css · [data-palabras-menubar] · gap',
'global · palabras-chrome.css · [data-palabras-outline-item] · border-radius',
'global · palabras-chrome.css · [data-palabras-outline-item] · color',
'global · palabras-chrome.css · [data-palabras-outline-item] · font-size',
'global · palabras-chrome.css · [data-palabras-outline-item] · padding',
'global · palabras-chrome.css · [data-palabras-outline-item]:hover · background',
"global · palabras-chrome.css · [data-palabras-outline-item][data-level='2'] · padding-inline-start",
"global · palabras-chrome.css · [data-palabras-outline-item][data-level='3'] · padding-inline-start",
"global · palabras-chrome.css · [data-palabras-outline-item][data-level='4'], [data-palabras-outline-item][data-level='5'], [data-palabras-outline-item][data-level='6'] · padding-inline-start",
'global · palabras-chrome.css · [data-palabras-outline-trigger] · border-radius',
'global · palabras-chrome.css · [data-palabras-outline-trigger] · color',
'global · palabras-chrome.css · [data-palabras-outline-trigger] · font-size',
'global · palabras-chrome.css · [data-palabras-outline-trigger] · gap',
'global · palabras-chrome.css · [data-palabras-outline-trigger] · padding',
'global · palabras-chrome.css · [data-palabras-outline-trigger]:hover:not(:disabled) · background',
'global · palabras-chrome.css · [data-palabras-panel-crumb-sep] · color',
'global · palabras-chrome.css · [data-palabras-panel-crumb][data-current] · color',
'global · palabras-chrome.css · [data-palabras-panel-crumb][data-current] · font-weight',
'global · palabras-chrome.css · [data-palabras-panel-crumbs] · color',
'global · palabras-chrome.css · [data-palabras-panel-crumbs] · column-gap',
'global · palabras-chrome.css · [data-palabras-panel-crumbs] · font-size',
'global · palabras-chrome.css · [data-palabras-panel-crumbs] · padding',
'global · palabras-chrome.css · [data-palabras-panel-empty] · color',
'global · palabras-chrome.css · [data-palabras-panel-empty] · font-size',
'global · palabras-chrome.css · [data-palabras-panel-empty] · padding',
'global · palabras-chrome.css · [data-palabras-panel-foot] · background',
'global · palabras-chrome.css · [data-palabras-panel-foot] · border-block-start',
'global · palabras-chrome.css · [data-palabras-panel-foot] · color',
'global · palabras-chrome.css · [data-palabras-panel-foot] · font-size',
'global · palabras-chrome.css · [data-palabras-panel-foot] · gap',
'global · palabras-chrome.css · [data-palabras-panel-foot] · padding',
'global · palabras-chrome.css · [data-palabras-panel-head-main] · gap',
'global · palabras-chrome.css · [data-palabras-panel-icon] · background',
'global · palabras-chrome.css · [data-palabras-panel-icon] · block-size',
'global · palabras-chrome.css · [data-palabras-panel-icon] · border-radius',
'global · palabras-chrome.css · [data-palabras-panel-icon] · color',
'global · palabras-chrome.css · [data-palabras-panel-icon] · inline-size',
'global · palabras-chrome.css · [data-palabras-panel] :is([data-field-control], [data-css-field], [data-textarea-input]), [data-palabras-panel] [data-select-trigger], [data-palabras-text], [data-palabras-spacing-cell] · background',
'global · palabras-chrome.css · [data-palabras-panel] :is([data-field-control], [data-css-field], [data-textarea-input]), [data-palabras-panel] [data-select-trigger], [data-palabras-text], [data-palabras-spacing-cell] · border-radius',
'global · palabras-chrome.css · [data-palabras-panel] :is([data-textarea-input], [data-field] input) · font-size',
'global · palabras-chrome.css · [data-palabras-panel] [data-field-control]:focus-within, [data-palabras-panel] [data-css-field]:focus-within, [data-palabras-panel] [data-textarea][data-focused] [data-textarea-input], [data-palabras-panel] [data-select-trigger]:focus-visible, [data-palabras-text]:focus-visible, [data-palabras-spacing-cell]:focus-visible · background',
'global · palabras-chrome.css · [data-palabras-panel] [data-float-panel-header], [data-palabras-panel] [data-palabras-dock-header] · padding',
'global · palabras-chrome.css · [data-palabras-panel] [data-float-panel-title], [data-palabras-panel] [data-drawer-title], [data-palabras-panel] [data-palabras-menu-title] · color',
'global · palabras-chrome.css · [data-palabras-panel] [data-float-panel-title], [data-palabras-panel] [data-drawer-title], [data-palabras-panel] [data-palabras-menu-title] · font-size',
'global · palabras-chrome.css · [data-palabras-panel] [data-float-panel-title], [data-palabras-panel] [data-drawer-title], [data-palabras-panel] [data-palabras-menu-title] · font-weight',
'global · palabras-chrome.css · [data-palabras-panel] [data-palabras-design] [data-accordion-content] · padding',
'global · palabras-chrome.css · [data-palabras-panel] [data-palabras-design] [data-accordion-item] + [data-accordion-item] · border-block-start',
'global · palabras-chrome.css · [data-palabras-panel] [data-palabras-design] [data-accordion-trigger] · color',
'global · palabras-chrome.css · [data-palabras-panel] [data-palabras-design] [data-accordion-trigger] · font-size',
'global · palabras-chrome.css · [data-palabras-panel] [data-palabras-design] [data-accordion-trigger] · font-weight',
'global · palabras-chrome.css · [data-palabras-panel] [data-palabras-design] [data-accordion-trigger] · padding-block',
"global · palabras-chrome.css · [data-palabras-panel] [data-palabras-design] [data-accordion-trigger]:hover, [data-palabras-panel] [data-palabras-design] [data-accordion-trigger][data-state='open'], [data-palabras-panel] [data-palabras-design] [data-accordion-trigger][aria-expanded='true'] · color",
'global · palabras-chrome.css · [data-palabras-panel] [data-palabras-doc-body] · border-block-start',
'global · palabras-chrome.css · [data-palabras-panel] [data-palabras-doc-body] · padding-block',
'global · palabras-chrome.css · [data-palabras-panel] [data-palabras-doc-body] · padding-inline',
'global · palabras-chrome.css · [data-palabras-panel] [data-palabras-dock-controls] · gap',
'global · palabras-chrome.css · [data-palabras-panel] [data-scroll-area]:has([data-scroll-area-scrollbar]) [data-scroll-area-viewport] · padding-inline-end',
'global · palabras-chrome.css · [data-palabras-panel][data-palabras-docked][data-drawer-content] · background',
"global · palabras-chrome.css · [data-palabras-panel][data-palabras-docked][data-side='left'] · border-inline-end",
"global · palabras-chrome.css · [data-palabras-panel][data-palabras-docked][data-side='right'] · border-inline-start",
'global · palabras-chrome.css · [data-palabras-panel][data-palabras-panel], [data-palabras-panel][data-palabras-panel] * · font-family',
'global · palabras-chrome.css · [data-palabras-panel][data-palabras-panel]:not([data-palabras-docked]):not([data-menubar-panel]) · background',
'global · palabras-chrome.css · [data-palabras-panel][data-palabras-panel]:not([data-palabras-docked]):not([data-menubar-panel]) · border',
'global · palabras-chrome.css · [data-palabras-panel][data-palabras-panel]:not([data-palabras-docked]):not([data-menubar-panel]) · border-radius',
'global · palabras-chrome.css · [data-palabras-panel][data-palabras-panel]:not([data-palabras-docked]):not([data-menubar-panel]) · box-shadow',
'global · palabras-chrome.css · [data-palabras-section-reset] · color',
'global · palabras-chrome.css · [data-palabras-select-text][data-empty] · color',
'global · palabras-chrome.css · [data-palabras-slash-desc] · color',
'global · palabras-chrome.css · [data-palabras-slash-desc] · font-size',
'global · palabras-chrome.css · [data-palabras-slash-desc] · padding-inline-start',
'global · palabras-chrome.css · [data-palabras-slash-icon] · color',
'global · palabras-chrome.css · [data-palabras-slash-item] · border-radius',
'global · palabras-chrome.css · [data-palabras-slash-item] · color',
'global · palabras-chrome.css · [data-palabras-slash-item] · font-size',
'global · palabras-chrome.css · [data-palabras-slash-item] · gap',
'global · palabras-chrome.css · [data-palabras-slash-item] · padding',
'global · palabras-chrome.css · [data-palabras-slash-item][data-active] · background',
'global · palabras-chrome.css · [data-palabras-slash-label] · font-weight',
'global · palabras-chrome.css · [data-palabras-slash] · background',
'global · palabras-chrome.css · [data-palabras-slash] · border',
'global · palabras-chrome.css · [data-palabras-slash] · border-radius',
'global · palabras-chrome.css · [data-palabras-slash] · box-shadow',
'global · palabras-chrome.css · [data-palabras-slash] · font-family',
'global · palabras-chrome.css · [data-palabras-slash] · padding',
'global · palabras-chrome.css · [data-palabras-spacing-cell] :is(input, [data-field-input]) · font-size',
'global · palabras-chrome.css · [data-palabras-spacing-cell] :is(input, [data-field-input]) · padding',
'global · palabras-chrome.css · [data-palabras-spacing-head] · gap',
'global · palabras-chrome.css · [data-palabras-spacing-head] · min-block-size',
'global · palabras-chrome.css · [data-palabras-spacing-link] · color',
'global · palabras-chrome.css · [data-palabras-spacing-side] · color',
'global · palabras-chrome.css · [data-palabras-spacing-side] · font-size',
'global · palabras-chrome.css · [data-palabras-spacing] · column-gap',
'global · palabras-chrome.css · [data-palabras-spacing] · row-gap',
'global · palabras-chrome.css · [data-palabras-src-group] · gap',
'global · palabras-chrome.css · [data-palabras-status] · color',
'global · palabras-chrome.css · [data-palabras-status] · font-size',
'global · palabras-chrome.css · [data-palabras-status] · gap',
'global · palabras-chrome.css · [data-palabras-status] · padding-block',
'global · palabras-chrome.css · [data-palabras-tab-empty] · color',
'global · palabras-chrome.css · [data-palabras-tab-empty] · font-size',
'global · palabras-chrome.css · [data-palabras-tab-empty] · padding',
'global · palabras-chrome.css · [data-palabras-tabs] [data-tabs-content] > [data-scroll-area] > [data-scroll-area-viewport] · padding-block',
'global · palabras-chrome.css · [data-palabras-tabs] [data-tabs-content] · border-block-start',
'global · palabras-chrome.css · [data-palabras-tabs] · padding-inline',
'global · palabras-chrome.css · [data-palabras-text] · color',
'global · palabras-chrome.css · [data-palabras-text] · font-family',
'global · palabras-chrome.css · [data-palabras-text] · font-size',
'global · palabras-chrome.css · [data-palabras-text] · padding',
'global · palabras-chrome.css · [data-palabras-text][data-invalid] · border-color',
'global · palabras-chrome.css · [data-palabras-type-pair] · column-gap',
'global · palabras-chrome.css · [data-palabras-type-style] · gap',
'global · palabras-chrome.css · [data-palabras-typography] · gap',
'global · palabras-chrome.css · [data-toggle-group][data-palabras-segmented] [data-toggle-group-item] · border-radius',
'global · palabras-chrome.css · [data-toggle-group][data-palabras-segmented] [data-toggle-group-item] · color',
'global · palabras-chrome.css · [data-toggle-group][data-palabras-segmented] [data-toggle-group-item]:hover · color',
"global · palabras-chrome.css · [data-toggle-group][data-palabras-segmented] [data-toggle-group-item][data-state='on'] · background",
"global · palabras-chrome.css · [data-toggle-group][data-palabras-segmented] [data-toggle-group-item][data-state='on'] · box-shadow",
"global · palabras-chrome.css · [data-toggle-group][data-palabras-segmented] [data-toggle-group-item][data-state='on'] · color",
'global · palabras-chrome.css · [data-toggle-group][data-palabras-segmented] · background',
'global · palabras-chrome.css · [data-toggle-group][data-palabras-segmented] · border-radius',
'global · palabras-chrome.css · [data-toggle-group][data-palabras-segmented] · gap',
'global · palabras-chrome.css · [data-toggle-group][data-palabras-segmented] · padding',
'global · palabras-chrome.css · button[data-palabras-panel-crumb]:hover · color',
'global · palabras.css · [data-palabras-doc] [data-palabras-active] · border-radius',
'global · palabras.css · [data-palabras-doc] [data-palabras-active] · outline',
"global · palabras.css · [data-palabras-doc] [data-palabras-block='columns'] [data-palabras-column] · border",
"global · palabras.css · [data-palabras-doc] [data-palabras-block='columns'] [data-palabras-column] · border-radius",
"global · palabras.css · [data-palabras-doc] [data-palabras-block='columns'] [data-palabras-column] · padding",
"global · palabras.css · [data-palabras-doc] [data-palabras-block='columns'] [data-palabras-column]:hover, [data-palabras-doc] [data-palabras-block='columns'] [data-palabras-column]:focus-within · border-color",
'global · palabras.css · [data-palabras-doc] [data-palabras-content] pre[data-palabras-code-language]::before · font-family',
'global · palabras.css · [data-palabras-doc] [data-palabras-content] pre[data-palabras-code-language]::before · font-size',
'global · palabras.css · [data-palabras-doc] [data-palabras-image-placeholder] · background',
'global · palabras.css · [data-palabras-doc] [data-palabras-image-placeholder] · border',
'global · palabras.css · [data-palabras-doc] [data-palabras-image-placeholder] · border-radius',
'global · palabras.css · [data-palabras-doc] [data-palabras-image-placeholder] · color',
'global · palabras.css · [data-palabras-doc] [data-palabras-image-placeholder] · padding',
'global · palabras.css · [data-palabras-doc] [data-palabras-untranslated] · border-radius',
'global · palabras.css · [data-palabras-doc] [data-palabras-untranslated] · outline',
"global · palabras.css · [data-palabras-doc] figure[data-palabras-block='image'] figcaption · color",
"global · palabras.css · [data-palabras-doc] figure[data-palabras-block='image'] figcaption · font-size",
"global · palabras.css · [data-palabras-doc] figure[data-palabras-block='image'] img · border-radius",
"global · palabras.css · [data-palabras-doc] figure[data-palabras-block='image'][data-palabras-image-fit] :where(img, [data-palabras-image-tile]) · background",
"global · palabras.css · [data-palabras-doc] figure[data-palabras-block='image'][data-palabras-image-fit] :where(img, [data-palabras-image-tile]) · border-radius",
'literal · palabras-chrome.css · [data-menubar-panel][data-palabras-inspector-surface] · inline-size',
'literal · palabras-chrome.css · [data-palabras-appearance] [data-number-field] · inline-size',
'literal · palabras-chrome.css · [data-palabras-border] · inline-size',
'literal · palabras-chrome.css · [data-palabras-bubble-divider] · block-size',
'literal · palabras-chrome.css · [data-palabras-bubble-divider] · inline-size',
'literal · palabras-chrome.css · [data-palabras-bubble-family] · inline-size',
'literal · palabras-chrome.css · [data-palabras-bubble-link] input · inline-size',
'literal · palabras-chrome.css · [data-palabras-bubble-size] [data-number-field], [data-palabras-bubble-family] [data-select-trigger] · inline-size',
'literal · palabras-chrome.css · [data-palabras-bubble-size] · inline-size',
'literal · palabras-chrome.css · [data-palabras-canvas] [data-palabras-block-drop-line] · block-size',
'literal · palabras-chrome.css · [data-palabras-canvas] [data-palabras-block-drop-line] · border-radius',
'literal · palabras-chrome.css · [data-palabras-canvas] [data-palabras-column-inserter][data-visible] · opacity',
'literal · palabras-chrome.css · [data-palabras-col-resize] · inline-size',
'literal · palabras-chrome.css · [data-palabras-doc-card] · min-block-size',
'literal · palabras-chrome.css · [data-palabras-field] [data-css-field] · inline-size',
'literal · palabras-chrome.css · [data-palabras-field][data-disabled] · opacity',
'literal · palabras-chrome.css · [data-palabras-field][data-stack] > [data-toggle-group][data-palabras-segmented] [data-toggle-group-item] · min-inline-size',
'literal · palabras-chrome.css · [data-palabras-find-count] · min-inline-size',
'literal · palabras-chrome.css · [data-palabras-find-input] · inline-size',
'literal · palabras-chrome.css · [data-palabras-find-sep] · block-size',
'literal · palabras-chrome.css · [data-palabras-find-sep] · inline-size',
"literal · palabras-chrome.css · [data-palabras-handle-menu] [role='menuitem'] svg · block-size",
"literal · palabras-chrome.css · [data-palabras-handle-menu] [role='menuitem'] svg · inline-size",
"literal · palabras-chrome.css · [data-palabras-handle-menu] [role='menuitem'] svg · opacity",
'literal · palabras-chrome.css · [data-palabras-insert-grid] · gap',
'literal · palabras-chrome.css · [data-palabras-inspector] [data-css-field], [data-palabras-inspector] [data-select-trigger] · inline-size',
'literal · palabras-chrome.css · [data-palabras-lang-menu] [data-palabras-lang-option] · inline-size',
'literal · palabras-chrome.css · [data-palabras-lang-menu] · min-inline-size',
'literal · palabras-chrome.css · [data-palabras-lang-option] · font-weight',
'literal · palabras-chrome.css · [data-palabras-lang-option]::before · block-size',
'literal · palabras-chrome.css · [data-palabras-lang-option]::before · inline-size',
"literal · palabras-chrome.css · [data-palabras-lang-switcher][data-mode='segmented'] [data-palabras-lang-option][data-active] · font-weight",
'literal · palabras-chrome.css · [data-palabras-live] · block-size',
'literal · palabras-chrome.css · [data-palabras-live] · inline-size',
'literal · palabras-chrome.css · [data-palabras-menubar] · inline-size',
'literal · palabras-chrome.css · [data-palabras-outline-item] · inline-size',
'literal · palabras-chrome.css · [data-palabras-outline-trigger] svg · block-size',
'literal · palabras-chrome.css · [data-palabras-outline-trigger] svg · inline-size',
'literal · palabras-chrome.css · [data-palabras-outline-trigger]:disabled · opacity',
'literal · palabras-chrome.css · [data-palabras-outline] · min-inline-size',
'literal · palabras-chrome.css · [data-palabras-panel-icon] svg · block-size',
'literal · palabras-chrome.css · [data-palabras-panel-icon] svg · inline-size',
'literal · palabras-chrome.css · [data-palabras-panel] [data-float-panel-title], [data-palabras-panel] [data-drawer-title], [data-palabras-panel] [data-palabras-menu-title] · letter-spacing',
'literal · palabras-chrome.css · [data-palabras-panel] [data-palabras-border-radius-scale] · inline-size',
'literal · palabras-chrome.css · [data-palabras-panel] [data-palabras-border-style] · inline-size',
'literal · palabras-chrome.css · [data-palabras-panel] [data-palabras-design] [data-accordion-content] [data-scroll-area] · inline-size',
'literal · palabras-chrome.css · [data-palabras-panel] [data-palabras-design] · inline-size',
'literal · palabras-chrome.css · [data-palabras-panel] [data-palabras-spacing-scale] · inline-size',
'literal · palabras-chrome.css · [data-palabras-panel] [data-palabras-spacing-scale] · min-inline-size',
'literal · palabras-chrome.css · [data-palabras-panel] [data-select-trigger] · inline-size',
'literal · palabras-chrome.css · [data-palabras-panel][data-menubar-panel] · inline-size',
'literal · palabras-chrome.css · [data-palabras-panel][data-palabras-mobile][data-drawer-content] · inline-size',
'literal · palabras-chrome.css · [data-palabras-panel][data-palabras-panel]:not([data-palabras-docked]):not([data-menubar-panel]) · height',
'literal · palabras-chrome.css · [data-palabras-shell] · inline-size',
'literal · palabras-chrome.css · [data-palabras-slash-item] · inline-size',
'literal · palabras-chrome.css · [data-palabras-slash] · gap',
'literal · palabras-chrome.css · [data-palabras-slash] · min-inline-size',
'literal · palabras-chrome.css · [data-palabras-spacing-cell] · inline-size',
'literal · palabras-chrome.css · [data-palabras-spacing] · inline-size',
'literal · palabras-chrome.css · [data-palabras-src-group] · inline-size',
'literal · palabras-chrome.css · [data-palabras-tabs] [data-tabs-content] > [data-scroll-area] · inline-size',
'literal · palabras-chrome.css · [data-palabras-tabs] · inline-size',
'literal · palabras-chrome.css · [data-palabras-text] · border',
'literal · palabras-chrome.css · [data-palabras-text] · inline-size',
'literal · palabras-chrome.css · [data-palabras-typography] · inline-size',
"literal · palabras.css · [data-palabras-doc] [data-palabras-block='columns'] [data-palabras-column] · min-block-size",
"literal · palabras.css · [data-palabras-doc] [data-palabras-content] [data-palabras-block='callout'][data-palabras-callout-icon]::before · font-size",
"literal · palabras.css · [data-palabras-doc] [data-palabras-content] [data-palabras-block='callout'][data-palabras-callout-icon]::before · line-height",
"literal · palabras.css · [data-palabras-doc] [data-palabras-content] [data-palabras-block='callout'][data-palabras-callout-icon]::before · opacity",
'literal · palabras.css · [data-palabras-doc] [data-palabras-content] blockquote[data-palabras-quote-marks]::before · font-size',
'literal · palabras.css · [data-palabras-doc] [data-palabras-content] blockquote[data-palabras-quote-marks]::before · line-height',
'literal · palabras.css · [data-palabras-doc] [data-palabras-content] blockquote[data-palabras-quote-marks]::before · opacity',
'literal · palabras.css · [data-palabras-doc] [data-palabras-content] pre[data-palabras-code-language]::before · font-weight',
'literal · palabras.css · [data-palabras-doc] [data-palabras-content] pre[data-palabras-code-language]::before · letter-spacing',
'literal · palabras.css · [data-palabras-doc] [data-palabras-content] pre[data-palabras-code-language]::before · line-height',
'literal · palabras.css · [data-palabras-doc] [data-palabras-content] table · inline-size',
'literal · palabras.css · [data-palabras-doc] [data-palabras-content] table[data-palabras-table-zebra] tbody tr:nth-child(even) td · background',
'literal · palabras.css · [data-palabras-doc] [data-palabras-i18n-fallback]::before · opacity',
'literal · palabras.css · [data-palabras-doc] [data-palabras-image-placeholder] · inline-size',
'literal · palabras.css · [data-palabras-doc] [data-palabras-image-placeholder] · min-block-size',
'literal · palabras.css · [data-palabras-doc] [data-palabras-image-placeholder]::before · background',
'literal · palabras.css · [data-palabras-doc] [data-palabras-image-placeholder]::before · block-size',
'literal · palabras.css · [data-palabras-doc] [data-palabras-image-placeholder]::before · inline-size',
"literal · palabras.css · [data-palabras-doc] figure[data-palabras-block='image'][data-palabras-image-fit] :where(img, [data-palabras-image-tile]) · inline-size",
"literal · palabras.css · [data-palabras-doc] figure[data-palabras-block='image'][data-palabras-image-fit] · inline-size",
"literal · palabras.css · [data-palabras-doc] figure[data-palabras-block='image'][data-palabras-image-full-width] img · inline-size",
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
"literal · palabras.css · [data-palabras-doc] figure[data-palabras-block='image'][data-palabras-image-full-width] · inline-size",
'private · palabras-chrome.css · [data-palabras-col-resize]::before · inline-size'
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
],
'password-field': [
'global · password-field.css · [data-password-field-strength-meter-label] · font-size',
'global · password-field.css · [data-password-field-strength-meter] · padding-inline',
'literal · password-field.css · [data-password-field-caps-lock-glyph] svg · block-size',
'literal · password-field.css · [data-password-field-caps-lock-glyph] svg · inline-size',
'literal · password-field.css · [data-password-field-caps-lock-glyph] · line-height',
'literal · password-field.css · [data-password-field-caps-lock-indicator] · gap',
'literal · password-field.css · [data-password-field-caps-lock-indicator] · padding-block',
'literal · password-field.css · [data-password-field-caps-lock-indicator] · padding-inline',
'literal · password-field.css · [data-password-field-strength-meter] · gap',
'literal · password-field.css · [data-password-field-visibility-trigger] svg · block-size',
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
'literal · password-field.css · [data-password-field-visibility-trigger] svg · inline-size',
'private · password-field.css · [data-password-field-visibility-trigger]:hover:not([data-disabled]) · background',
'private · password-field.css · [data-password-field-visibility-trigger]:hover:not([data-disabled]) · color'
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
],
'picker-shell': ['global · picker-time-row.css · .picker-time-label · font-size'],
popover: [
"global · popover.css · [data-popover-content][data-state='closed'][data-side='bottom'][data-last-action='cancelled'], [data-popover-content][data-state='closed'][data-side='bottom'][data-last-action='dismissed'], [data-popover-content][data-state='closed'][data-side='bottom'][data-last-action='dismissed-outside'] · border-top",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='bottom'][data-last-action='failed'] · border-top",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='bottom'][data-last-action='saved'] · border-top",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='left'][data-last-action='cancelled'], [data-popover-content][data-state='closed'][data-side='left'][data-last-action='dismissed'], [data-popover-content][data-state='closed'][data-side='left'][data-last-action='dismissed-outside'] · border-right",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='left'][data-last-action='failed'] · border-right",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='left'][data-last-action='saved'] · border-right",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='right'][data-last-action='cancelled'], [data-popover-content][data-state='closed'][data-side='right'][data-last-action='dismissed'], [data-popover-content][data-state='closed'][data-side='right'][data-last-action='dismissed-outside'] · border-left",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='right'][data-last-action='failed'] · border-left",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='right'][data-last-action='saved'] · border-left",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='top'][data-last-action='cancelled'], [data-popover-content][data-state='closed'][data-side='top'][data-last-action='dismissed'], [data-popover-content][data-state='closed'][data-side='top'][data-last-action='dismissed-outside'] · border-bottom",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='top'][data-last-action='failed'] · border-bottom",
"global · popover.css · [data-popover-content][data-state='closed'][data-side='top'][data-last-action='saved'] · border-bottom"
],
progress: [
"global · progress.css · [data-progress][data-shape='circular'] [data-progress-indicator] · border-radius",
"global · progress.css · [data-progress][data-shape='circular'] [data-progress-indicator]::before · border-radius"
],
'proof-of-human': [
'global · clock.css · .ck-badge-num · fill',
'global · clock.css · .ck-hand-main, .ck-hand-tail · fill',
'global · clock.css · .ck-house-frame · stroke',
'global · clock.css · .ck-hub · fill',
'global · clock.css · .ck-num · fill',
'global · clock.css · .ck-ring · fill',
'global · clock.css · .ck-ring · stroke',
'global · clock.css · .ck-sill · fill',
'global · clock.css · .ck-tick · stroke',
"global · clock.css · [data-proof-of-human][data-state='verified'] .ck-badge-dot · fill",
"global · clock.css · [data-proof-of-human][data-state='verified'] .ck-roof · fill",
'global · proof-of-human.css · .poh-trace-dot[data-off-path] · background',
'global · proof-of-human.css · .poh-trace-dot[data-off-path] · box-shadow',
'global · proof-of-human.css · [data-path-trace-token]::before · min-block-size',
'global · proof-of-human.css · [data-path-trace-token]::before · min-inline-size',
'global · rotate-align.css · .ra-card · fill',
'global · rotate-align.css · .ra-flag · fill',
'global · rotate-align.css · .ra-hub · fill',
'global · rotate-align.css · .ra-n · fill',
'global · rotate-align.css · .ra-post · fill',
'global · rotate-align.css · .ra-ring · fill',
'global · rotate-align.css · .ra-ring · stroke',
'global · rotate-align.css · .ra-s · fill',
'global · rotate-align.css · .ra-tick · stroke',
"global · rotate-align.css · [data-proof-of-human][data-state='verified'] .ra-box · fill",
"global · rotate-align.css · [data-proof-of-human][data-state='verified'] .ra-flag · fill",
'global · rotate-align.css · [data-rotate-align-needle]::before · min-block-size',
'global · rotate-align.css · [data-rotate-align-needle]::before · min-inline-size',
'global · rotate-align.css · [data-rotate-align-needle]:focus-visible · border-radius',
'literal · clock.css · .ck-face, .ck-hand · block-size',
'literal · clock.css · .ck-face, .ck-hand · inline-size',
'literal · clock.css · 0%, 13% · opacity',
'literal · clock.css · 26%, 62% · opacity',
'literal · clock.css · to · opacity',
'literal · proof-of-human.css · .poh-trace-svg · block-size',
'literal · proof-of-human.css · .poh-trace-svg · inline-size',
'literal · proof-of-human.css · [data-path-trace-token]::before · block-size',
'literal · proof-of-human.css · [data-path-trace-token]::before · inline-size',
'literal · rotate-align.css · .ra-card · font-weight',
'literal · rotate-align.css · .ra-dial, .ra-needle · block-size',
'literal · rotate-align.css · .ra-dial, .ra-needle · inline-size',
'literal · rotate-align.css · [data-rotate-align-dial], [data-rotate-align-needle] · block-size',
'literal · rotate-align.css · [data-rotate-align-dial], [data-rotate-align-needle] · inline-size',
'literal · rotate-align.css · [data-rotate-align-skin] · inline-size'
],
prose: [
'literal · prose.css · :where([data-prose] :is(ul, ol)):not(:where([data-prose-ignore], [data-prose-ignore] *)) · padding-inline-start',
'literal · prose.css · :where([data-prose] blockquote):not(:where([data-prose-ignore], [data-prose-ignore] *)) · padding-inline-start',
'literal · prose.css · :where([data-prose] code):not(:where([data-prose-ignore], [data-prose-ignore] *)) · padding',
'literal · prose.css · :where([data-prose] kbd):not(:where([data-prose-ignore], [data-prose-ignore] *)) · padding',
'literal · prose.css · :where([data-prose] mark):not(:where([data-prose-ignore], [data-prose-ignore] *)) · padding',
'literal · prose.css · :where([data-prose] pre):not(:where([data-prose-ignore], [data-prose-ignore] *)) · padding',
'literal · prose.css · :where([data-prose] table):not(:where([data-prose-ignore], [data-prose-ignore] *)) · inline-size',
'literal · prose.css · :where([data-prose] td):not(:where([data-prose-ignore], [data-prose-ignore] *)) · padding',
'literal · prose.css · :where([data-prose] th):not(:where([data-prose-ignore], [data-prose-ignore] *)) · padding'
],
'radio-cards': [
'global · radio-cards.css · [data-radio-cards-indicator] · background',
'global · radio-cards.css · [data-radio-cards-indicator] · block-size',
'global · radio-cards.css · [data-radio-cards-indicator] · border',
'global · radio-cards.css · [data-radio-cards-indicator] · border-radius',
'global · radio-cards.css · [data-radio-cards-indicator] · inline-size',
'global · radio-cards.css · [data-radio-cards-indicator]::after · background',
'global · radio-cards.css · [data-radio-cards-indicator]::after · border-radius',
'global · radio-cards.css · [data-radio-cards] [data-radio-cards-item][data-disabled] [data-radio-cards-indicator] · background',
'global · radio-cards.css · [data-radio-cards] [data-radio-cards-item][data-disabled] [data-radio-cards-indicator] · border-color',
"global · radio-cards.css · [data-radio-cards] [data-radio-cards-item][data-state='checked'] [data-radio-cards-icon] · color",
"global · radio-cards.css · [data-radio-cards] [data-radio-cards-item][data-state='checked'] [data-radio-cards-indicator] · border-color",
"global · radio-cards.css · [data-radio-cards] [data-radio-cards-item][data-state='checked'] · background",
"global · radio-cards.css · [data-radio-cards] [data-radio-cards-item][data-state='checked'] · border-color",
"global · radio-cards.css · [data-radio-cards] [data-radio-cards-item][data-state='checked']:hover:not([data-disabled]):not([data-readonly]) · background",
"global · radio-cards.css · [data-radio-cards] [data-radio-cards-item][data-state='checked']:hover:not([data-disabled]):not([data-readonly]) · border-color",
"global · radio-cards.css · [data-radio-cards][data-size='lg'] [data-radio-cards-indicator] · block-size",
"global · radio-cards.css · [data-radio-cards][data-size='lg'] [data-radio-cards-indicator] · inline-size",
"global · radio-cards.css · [data-radio-cards][data-size='sm'] [data-radio-cards-indicator] · block-size",
"global · radio-cards.css · [data-radio-cards][data-size='sm'] [data-radio-cards-indicator] · inline-size",
"global · radio-cards.css · [data-radio-cards][data-size='xl'] [data-radio-cards-indicator] · block-size",
"global · radio-cards.css · [data-radio-cards][data-size='xl'] [data-radio-cards-indicator] · inline-size",
"global · radio-cards.css · [data-radio-cards][data-size='xs'] [data-radio-cards-indicator] · block-size",
"global · radio-cards.css · [data-radio-cards][data-size='xs'] [data-radio-cards-indicator] · inline-size",
'literal · radio-cards.css · [data-radio-cards-icon] svg · block-size',
'literal · radio-cards.css · [data-radio-cards-icon] svg · inline-size',
'literal · radio-cards.css · [data-radio-cards-indicator]::after · block-size',
'literal · radio-cards.css · [data-radio-cards-indicator]::after · inline-size'
],
'radio-group': ['global · radio-group.css · [data-radio-group-row] · min-block-size'],
'range-calendar': [
'global · range-calendar.css · [data-range-calendar-day][data-range-end] · font-weight',
'global · range-calendar.css · [data-range-calendar-day][data-range-start] · font-weight',
'literal · range-calendar.css · [data-range-calendar-grid] · inline-size',
'literal · range-calendar.css · [data-range-calendar-header] · inline-size',
'literal · range-calendar.css · [data-range-calendar-month-panel] · min-inline-size',
'literal · range-calendar.css · [data-range-calendar] · inline-size'
],
result: [
'literal · result.css · [data-result-extra] · inline-size',
'literal · result.css · [data-result-media] · line-height'
],
's-text-virtual-list': [
'global · s-text-virtual-list.css · [data-s-text-virtual-list] · font-family',
'global · s-text-virtual-list.css · [data-s-text-virtual-list] · font-size',
'global · s-text-virtual-list.css · [data-s-text-virtual-list] · font-weight'
],
'scroll-frames': [
'global · scroll-frames.css · [data-scroll-frames-loader] · opacity',
'literal · scroll-frames.css · [data-scroll-frames-loader] · line-height',
'literal · scroll-frames.css · [data-scroll-frames-media] · block-size',
'literal · scroll-frames.css · [data-scroll-frames-media] · inline-size',
'literal · scroll-frames.css · [data-scroll-frames] · inline-size'
],
sidebar: [
'global · sidebar.css · [data-sidebar-content] · gap',
'global · sidebar.css · [data-sidebar-group-label] · color',
'global · sidebar.css · [data-sidebar-group-label] · font-weight',
'global · sidebar.css · [data-sidebar-group-label] · line-height',
'global · sidebar.css · [data-sidebar-group-label] · padding-block',
'global · sidebar.css · [data-sidebar-menu-button], [data-sidebar-menu-sub-button] · color',
'global · sidebar.css · [data-sidebar-menu-button]:hover, [data-sidebar-menu-sub-button]:hover · color',
'global · sidebar.css · [data-sidebar-menu-button][data-active], [data-sidebar-menu-sub-button][data-active] · background-color',
'global · sidebar.css · [data-sidebar-menu-button][data-active], [data-sidebar-menu-sub-button][data-active] · color',
'global · sidebar.css · [data-sidebar-menu-button][data-active], [data-sidebar-menu-sub-button][data-active] · font-weight',
'global · sidebar.css · [data-sidebar-menu-button][data-disabled], [data-sidebar-menu-sub-button][data-disabled] · color',
'global · sidebar.css · [data-sidebar-menu-item] · gap',
'global · sidebar.css · [data-sidebar-menu-sub][data-floating] · border-radius',
'global · sidebar.css · [data-sidebar-rail]:hover · background',
'literal · sidebar.css · [data-sidebar-panel] · block-size',
'literal · sidebar.css · [data-sidebar] · block-size',
'literal · sidebar.css · [data-sidebar] · inline-size',
'literal · sidebar.css · [data-sidebar][data-mobile] [data-sidebar-panel] · block-size',
'literal · sidebar.css · [data-sidebar][data-mobile] [data-sidebar-panel] · inline-size'
],
skeleton: ['literal · skeleton.css · [data-skeleton] · inline-size'],
'skin-media-player': [
'global · skin-media-player.css · [data-skin-media-player] · inline-size',
'literal · skin-media-player.css · [data-media-player]:not([data-paused]) .smp-lamp · opacity',
'literal · skin-media-player.css · [data-skin-media-player-cassette] · filter',
'literal · skin-media-player.css · [data-skin-media-player-deck][data-spinning] .smp-lamp · opacity',
'literal · skin-media-player.css · [data-skin-media-player-fader] [data-slider] · inline-size',
'literal · skin-media-player.css · [data-skin-media-player] > svg · block-size',
'literal · skin-media-player.css · [data-skin-media-player] > svg · inline-size'
],
'spin-field': [
'global · spin-field.css · [data-spin-field-increment-trigger], [data-spin-field-decrement-trigger], [data-spin-field-scrubber] · block-size',
'global · spin-field.css · [data-spin-field-increment-trigger], [data-spin-field-decrement-trigger], [data-spin-field-scrubber] · inline-size',
'global · spin-field.css · [data-spin-field-increment-trigger], [data-spin-field-decrement-trigger], [data-spin-field-scrubber] · min-inline-size',
'global · spin-field.css · [data-spin-field-input] · padding-inline',
"global · spin-field.css · [data-spin-field][data-steppers='stacked'] [data-spin-field-increment-trigger], [data-spin-field][data-steppers='stacked'] [data-spin-field-decrement-trigger] · font-size",
"global · spin-field.css · [data-spin-field][data-steppers='stacked'] [data-spin-field-increment-trigger], [data-spin-field][data-steppers='stacked'] [data-spin-field-decrement-trigger] · inline-size",
"global · spin-field.css · [data-spin-field][data-steppers='stacked'] [data-spin-field-increment-trigger], [data-spin-field][data-steppers='stacked'] [data-spin-field-decrement-trigger] · min-inline-size",
"global · spin-field.css · [data-spin-field][data-steppers='stacked'] [data-spin-field-input] · padding-inline"
],
spinner: [
'literal · spinner.css · 0%, 80%, 100% · opacity',
'literal · spinner.css · 40% · opacity',
"literal · spinner.css · [data-spinner][data-variant='dots'] [data-spinner-dot] · border-radius",
"literal · spinner.css · [data-spinner][data-variant='ring'] [data-spinner-track] · border-radius"
],
'split-button': [
'global · split-button.css · [data-dropdown-menu-content][data-split-button-menu] · min-inline-size'
],
stepper: [
"literal · stepper.css · [data-stepper-separator][data-orientation='vertical'] · block-size"
],
table: [
'literal · table.css · [data-table-root][data-block] · inline-size',
'literal · table.css · [data-table-sort-trigger][data-sorted] [data-table-sort-indicator] · opacity',
'literal · table.css · [data-table] · inline-size'
],
'tag-group': ['literal · tag-group.css · [data-tag-group-remove-button] · line-height'],
'text-scramble': [
'literal · text-scramble.css · [data-text-scramble-sr] · height',
'literal · text-scramble.css · [data-text-scramble-sr] · width'
],
textarea: [
'literal · textarea.css · [data-textarea-count] · line-height',
'literal · textarea.css · [data-textarea-input] · inline-size',
'literal · textarea.css · [data-textarea] · inline-size'
],
'time-picker': [
'global · time-picker.css · .time-picker-scale · padding-inline',
'global · time-picker.css · .time-picker-scale-mark · background',
'global · time-picker.css · .time-picker-scale-tick · color',
'global · time-picker.css · .time-picker-scale-tick · font-family',
'global · time-picker.css · .time-picker-scale-tick · font-size',
'global · time-picker.css · .time-picker-slider-label · color',
'global · time-picker.css · .time-picker-slider-label · font-family',
'global · time-picker.css · .time-picker-slider-label · font-weight',
'global · time-picker.css · .time-picker-slider-label · letter-spacing',
'global · time-picker.css · [data-time-field-input] [data-time-picker-trigger] · block-size',
'global · time-picker.css · [data-time-field-input] [data-time-picker-trigger] · color',
'global · time-picker.css · [data-time-field-input] [data-time-picker-trigger] · inline-size',
'global · time-picker.css · [data-time-field-input] [data-time-picker-trigger]:focus-visible · background',
'global · time-picker.css · [data-time-field-input] [data-time-picker-trigger]:focus-visible · color',
"global · time-picker.css · [data-time-picker-clock] [data-time-picker-day-period-toggle] [data-toggle-group-item][data-state='on']:hover · background",
"global · time-picker.css · [data-time-picker-clock] [data-time-picker-day-period-toggle] [data-toggle-group-item][data-state='on']:hover · border-color",
'global · time-picker.css · [data-time-picker-clock] · padding',
'global · time-picker.css · [data-time-picker-trigger] · background',
'global · time-picker.css · [data-time-picker-trigger] · border',
'global · time-picker.css · [data-time-picker-trigger] · border-radius',
'global · time-picker.css · [data-time-picker-trigger][data-disabled], [data-time-picker-trigger]:disabled · opacity',
'global · time-picker.css · [data-time-picker] · color',
'global · time-picker.css · [data-time-picker] · font-family',
'global · time-picker.css · [data-time-picker] · line-height',
'literal · time-picker.css · .time-picker-scale · block-size',
'literal · time-picker.css · .time-picker-scale · inline-size',
'literal · time-picker.css · .time-picker-scale-mark · block-size',
'literal · time-picker.css · .time-picker-scale-mark · inline-size',
'literal · time-picker.css · .time-picker-scale-tick · gap',
'literal · time-picker.css · .time-picker-scale-tick · line-height',
'literal · time-picker.css · .time-picker-slider · gap',
'literal · time-picker.css · .time-picker-slider · inline-size',
'literal · time-picker.css · .time-picker-slider-label · line-height',
'literal · time-picker.css · [data-time-picker-clock] [data-slider] · inline-size',
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
'literal · time-picker.css · [data-time-picker] · inline-size',
'private · time-picker.css · .time-picker-slider-label · font-size',
'private · time-picker.css · [data-time-field-input] [data-time-picker-trigger]:hover · background',
'private · time-picker.css · [data-time-field-input] [data-time-picker-trigger]:hover · color',
'private · time-picker.css · [data-time-picker-clock] [data-slider-range] · background',
'private · time-picker.css · [data-time-picker-clock] [data-slider-thumb] · border-color',
'private · time-picker.css · [data-time-picker-trigger] · block-size',
'private · time-picker.css · [data-time-picker-trigger] · inline-size',
'private · time-picker.css · [data-time-picker-trigger]:focus-visible · border-color',
'private · time-picker.css · [data-time-picker-trigger]:hover · background',
'private · time-picker.css · [data-time-picker-trigger]:hover · border-color',
'private · time-picker.css · [data-time-picker-trigger]:hover · color',
'private · time-picker.css · [data-time-picker] · font-size'
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
],
'time-range-picker': [
'global · time-range-picker.css · .time-range-picker-endpoint · gap',
'global · time-range-picker.css · .time-range-picker-endpoint-label · color',
'global · time-range-picker.css · .time-range-picker-endpoint-label · font-weight',
'global · time-range-picker.css · .time-range-picker-endpoint-label · letter-spacing',
'global · time-range-picker.css · .time-range-picker-endpoint:first-child::after · background',
'global · time-range-picker.css · .time-range-picker-endpoint:first-child::after · inline-size',
'global · time-range-picker.css · .time-range-picker-scale · padding-inline',
'global · time-range-picker.css · .time-range-picker-scale-mark · background',
'global · time-range-picker.css · .time-range-picker-scale-tick · color',
'global · time-range-picker.css · .time-range-picker-scale-tick · font-family',
'global · time-range-picker.css · .time-range-picker-scale-tick · font-size',
'global · time-range-picker.css · .time-range-picker-slider-label · color',
'global · time-range-picker.css · .time-range-picker-slider-label · font-family',
'global · time-range-picker.css · .time-range-picker-slider-label · font-weight',
'global · time-range-picker.css · .time-range-picker-slider-label · letter-spacing',
'global · time-range-picker.css · [data-time-range-field-input] [data-time-range-picker-trigger] · border-radius',
'global · time-range-picker.css · [data-time-range-field-input] [data-time-range-picker-trigger] · color',
'global · time-range-picker.css · [data-time-range-field-input] [data-time-range-picker-trigger]:focus-visible · background',
'global · time-range-picker.css · [data-time-range-field-input] [data-time-range-picker-trigger]:focus-visible · color',
'global · time-range-picker.css · [data-time-range-picker-clock] [data-slider-thumb] · box-shadow',
'global · time-range-picker.css · [data-time-range-picker-clock] [data-slider-thumb]:focus-visible · box-shadow',
"global · time-range-picker.css · [data-time-range-picker-clock] [data-time-range-picker-day-period-toggle] [data-toggle-group-item][data-state='on']:hover · background",
"global · time-range-picker.css · [data-time-range-picker-clock] [data-time-range-picker-day-period-toggle] [data-toggle-group-item][data-state='on']:hover · border-color",
'global · time-range-picker.css · [data-time-range-picker-clock] · padding',
'global · time-range-picker.css · [data-time-range-picker-trigger] · background',
'global · time-range-picker.css · [data-time-range-picker-trigger] · border',
'global · time-range-picker.css · [data-time-range-picker-trigger] · border-radius',
'global · time-range-picker.css · [data-time-range-picker-trigger][data-disabled], [data-time-range-picker-trigger]:disabled · opacity',
'global · time-range-picker.css · [data-time-range-picker] · color',
'global · time-range-picker.css · [data-time-range-picker] · font-family',
'global · time-range-picker.css · [data-time-range-picker] · line-height',
'global · time-range-picker.css · [data-time-range-picker][data-invalid] [data-time-range-picker-trigger] · border-color',
'global · time-range-picker.css · [data-time-range-picker][data-invalid] [data-time-range-picker-trigger]:hover · border-color',
'literal · time-range-picker.css · .time-range-picker-scale · block-size',
'literal · time-range-picker.css · .time-range-picker-scale · inline-size',
'literal · time-range-picker.css · .time-range-picker-scale-mark · block-size',
'literal · time-range-picker.css · .time-range-picker-scale-mark · inline-size',
'literal · time-range-picker.css · .time-range-picker-scale-tick · gap',
'literal · time-range-picker.css · .time-range-picker-scale-tick · line-height',
'literal · time-range-picker.css · .time-range-picker-slider · gap',
'literal · time-range-picker.css · .time-range-picker-slider · inline-size',
'literal · time-range-picker.css · .time-range-picker-slider-label · line-height',
'literal · time-range-picker.css · [data-time-range-picker-clock] [data-slider] · inline-size',
'literal · time-range-picker.css · [data-time-range-picker-clock] · min-inline-size',
"literal · time-range-picker.css · [data-time-range-picker-day-period-item] input[type='radio'] · block-size",
"literal · time-range-picker.css · [data-time-range-picker-day-period-item] input[type='radio'] · inline-size",
'literal · time-range-picker.css · [data-time-range-picker-day-period-toggle] · padding',
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
'literal · time-range-picker.css · [data-time-range-picker] · inline-size',
'private · time-range-picker.css · .time-range-picker-endpoint-label · font-size',
'private · time-range-picker.css · .time-range-picker-slider-label · font-size',
'private · time-range-picker.css · [data-time-range-field-input] [data-time-range-picker-trigger] · block-size',
'private · time-range-picker.css · [data-time-range-field-input] [data-time-range-picker-trigger] · inline-size',
'private · time-range-picker.css · [data-time-range-field-input] [data-time-range-picker-trigger]:hover · background',
'private · time-range-picker.css · [data-time-range-field-input] [data-time-range-picker-trigger]:hover · color',
"private · time-range-picker.css · [data-time-range-picker-clock] [data-endpoint='end'] [data-slider-range] · background",
'private · time-range-picker.css · [data-time-range-picker-clock] [data-slider-range] · background',
'private · time-range-picker.css · [data-time-range-picker-clock] [data-slider-thumb] · border-color',
'private · time-range-picker.css · [data-time-range-picker-day-period-item][data-checked] · background',
'private · time-range-picker.css · [data-time-range-picker-day-period-item][data-checked] · color',
'private · time-range-picker.css · [data-time-range-picker-trigger] · block-size',
'private · time-range-picker.css · [data-time-range-picker-trigger] · inline-size',
'private · time-range-picker.css · [data-time-range-picker-trigger]:focus-visible · border-color',
'private · time-range-picker.css · [data-time-range-picker-trigger]:hover · background',
'private · time-range-picker.css · [data-time-range-picker-trigger]:hover · border-color',
'private · time-range-picker.css · [data-time-range-picker-trigger]:hover · color',
'private · time-range-picker.css · [data-time-range-picker] · font-size',
'private · time-range-picker.css · [data-time-range-picker] · gap'
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
],
timeline: ['literal · timeline.css · [data-timeline-marker] · line-height'],
'toggle-group': ['global · toggle-group.css · [data-toggle-group][data-disabled] · opacity'],
feat(theming): los 150 privados del residuo quedan adjudicados - 84 firmados, 66 contados Segunda pieza de la firma de los 318 (F2). El residuo que F1 dejo se adjudica POR CLAVE, cada acta con su medida: 150 = 84 ANOTADOS + 66 al LEDGER + 0 sin nombre. - Valvula nueva /* private: <razon> */ -> clase exception (vocabulario cerrado). Corre en una CUARTA pasada, la ultima: donde una prueba mecanica ya decidio, una firma no tiene nada que firmar. La nota va en el bloque de comentario ENCIMA de la declaracion (al final de linea, prettier partiria el var() - un commit de anotacion no reescribe el CSS que viene a firmar); el paseo hacia arriba solo salta lineas que eran solo-comentario. - private es DebtClass: clave `private - {fichero} - {selector} - {propiedad}`, newDebt y STALE simetricos. Un privado no-derivado nuevo ya no puede entrar sin nombre. Ledger 1088 -> 1154 (+66, 0 claves perdidas, verificado contra el blob de HEAD, no regenerado en bloque). - ANOTADOS 84: 59 con ficha SS5 firmada que lo dice (card, avatar, badge, surface, switch, timeline, textarea, spinner, skeleton, metrics, float-panel, image, toolbar, button, drawer, listbox) + 25 medidos (proof-of-human 17: el puente UN NIVEL bajo el knob, base verbatim del forward, medido dos veces; form 4: conmutador-identidad; 4 sueltos). - LEDGER 66: casi todo UN patron - el conmutador de tono A MANO ([data-color=risk] { --_c-accent: var(--color-risk-solid) }) sin adoptar el forward THM-2 (time-range-picker 19, chronos 14, time-picker 12, date-range-picker 9...) mas las tallas prestadas de field. Se retiran el dia que esa familia adopte la escalera de paleta. - Contradiccion con ficha RESUELTA por medida: metrics SS5 decia que el conmutador del icono derivaba entero de publicos - cierto para track/text, falso para solid/contrast (leen roles crudos): 3 anotados, 2 al ledger. timeline SS5 (pre-B') se respeta y queda señalado para reabrir. Mutaciones (backup+restore en finally, arbol comprobado): privado nuevo -> newDebt lo nombra y suelo ROJO; anotado -> verde; registrado -> verde; ledger'd que gana su nota -> STALE hasta borrar la linea. --debt final: 1154 registered - 0 new - 0 stale, dos corridas. Suelo 5/5, audit 162 PASS sin flips, tsc 0 propios, diff de los 22 css = 100% comentario (verificado por strip programatico contra el blob de HEAD), prettier 0 regresiones. Reach 71% -> 73% (3074/4228). El suelo (69/45) y la prosa "318" los sube F3. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
tooltip: ['private · tooltip.css · [data-tooltip-content] · background'],
feat(theming)!: R-5.1/5.2 a error contra el LEDGER DE DEUDA - el ratchet es por clave La pieza grande del CIERRE, con la forma firmada hoy: la deuda de alcance no se tolera en warn ni se disfraza de excepcion - se REGISTRA, clave a clave, y desde ahi la regresion es imposible y la mejora queda contada. - scripts/theming-census-debt.ts (NUEVO): 1088 claves (763 global + 325 literal, 74 componentes), clave `{clase} - {fichero} - {selector} - {propiedad}` INDEPENDIENTE de linea (mover una regla no fabrica regresion), comparacion MULTISET, generacion reproducible (dos corridas = mismo sha256), nace prettier-limpio. NO es un fichero de excepciones: es deuda registrada, la otra clase de acta - la valvula R-5.x exception de los README sigue intacta y NUNCA ciega el ratchet. Los carriles WIP ENTRAN (palabras 359 + chronos 209 = 568): la deuda es real viva donde viva, y dejarla fuera haria del gate una afirmacion sobre dos tercios del arbol. Con la salvedad MEDIDA de palabras escrita: sus nombres --palabras-* son canal de VALOR del scheme del documento, no contrato de tema - sus 103 "public" del censo estan en cuestion. - theming-census.ts: censusAudit() -> {newDebt, stale} + CLI --debt [--write] que imprime el delta que va a cometer (regenerar en masa borra el ratchet: el escritor grita y la cabecera lo prohibe sin firma). - theming-reach-floor.test.ts (reescrito): newDebt=0 y stale=0 con las claves NOMBRADAS; los techos burdos maxLiteral/maxGlobal RETIRADOS (superseded por el por-clave: 5 regresiones ya no se esconden bajo 5 arreglos); reachPct sube a 69 como ratchet grueso - y cubre el hueco nombrado: los 318 privados no-derivados siguen SIN ratchet por clave (acotado por la firma a literal|global; pendiente de firma propia); atHundred corrige su criterio (public>0, 14 -> 45: los 31 de diferencia eran denominadores vacios, ninguno un avance real). - component-audit.ts: filas R-5.1 y R-5.2 a ERROR consumiendo censusAudit() (dos implementaciones de una medida son dos medidas); R-5.2 honesto sobre los 18 sin-contrato (11 nada-que-declarar all-system/0-knobs; field-langs cubierto POR el ledger - la entrada ES su registro; 3 consumidores de capa calendar; mockup y text-scramble PASS con nota del idioma var(..,fallback) sin contrato - forma real sin nombre, pendiente de decision; palabras fuera del catalogo del audit). R-5.3 YA estaba en error (verificado, --names 0 desviadas). El skip por censo roto ahora GRITA por consola (la leccion del prepareWith: un guard saltado nunca es mudo - y el suelo de vitest queda de red mecanica). - docs: canon/recipe-contract.md SS4 y theming/reference.md SS12 reflejan la ley (gate F3 = censo 100% ADJUDICADO); completion-checklist gana las dos filas (exigido por el guard I5); el stub RECIPE_CONTRACT.md solo actualiza su linea de enforcement. Mutaciones, todas mordiendo: literal nuevo en mark -> newDebt lo nombra, suelo rojo, R-5.1 falla; clave de aura tokenizada -> STALE rojo hasta borrar la linea; literal sin registrar en field-langs -> R-5.2 muerde. Guards en HEAD: component:audit 162 PASS (cero flips; los 4 NEEDS-WORK son R-1.x ajenos), suelo 5/5, docs:check 0/0. BREAKING: los techos maxLiteral/maxGlobal del suelo desaparecen; anadir un literal o un global crudo a una receta exige desde ahora tokenizar, anotar /* literal: */ o firmar la entrada en el ledger de deuda. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 month ago
'tree-grid': ['literal · tree-grid.css · [data-tree-grid-root][data-block] · inline-size'],
'tree-view': ['literal · tree-view.css · [data-tree-view-root][data-block] · inline-size'],
'virtual-grid': [
'literal · virtual-grid.css · [data-virtual-grid-root][data-block] · inline-size',
'literal · virtual-grid.css · [data-virtual-grid-viewport] · block-size',
'literal · virtual-grid.css · [data-virtual-grid-viewport] · inline-size'
],
'virtual-list': [
'literal · virtual-list.css · [data-virtual-list-root][data-block] · inline-size',
'literal · virtual-list.css · [data-virtual-list-viewport] · block-size',
'literal · virtual-list.css · [data-virtual-list-viewport] · inline-size',
'literal · virtual-list.css · [data-virtual-list-window-viewport] · inline-size'
],
waveform: [
'global · waveform.css · [data-waveform]:has([data-slider][data-disabled]) [data-waveform-wave] · opacity'
],
'year-grid': [
'literal · year-grid.css · [data-popover-content] [data-year-grid-grid] · inline-size',
'literal · year-grid.css · [data-popover-content] [data-year-grid] · inline-size',
'literal · year-grid.css · [data-year-grid-grid] · inline-size',
'literal · year-grid.css · [data-year-grid-header] · inline-size',
'literal · year-grid.css · [data-year-grid] · inline-size'
]
};

Powered by TurnKey Linux.