astra
alpha-0.1-background
alpha-0.1-dir-prefs
alpha-0.1-sec-dom
menubar-v4-safe
active-uix
morfo-runtime
morfo-driven-soma
semantuix
glm-5
main
sium-v1.0
${ noResults }
2244 Commits (e8a54ac4552feaea05239c33ffc286092eb208b8)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
e8a54ac455 |
docs(theming): item 0 de mañana - los dos guards de data-ready son preexistentes (76f18a5e8, no de SS14) y la adjudicacion es DECLARAR en los morfos (lo leen tabs.css y sliding-indicator.css como puerta anti-flash); el hook sigue sin armar por los 8 rojos historicos de la suite del peer P0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
b01646cfd8 |
feat(soma)!: fase C2c — el efecto syncAttrs muere; una tubería, cero ambigüedad
Cierre de la fase C del P0: tras C2a (la bolsa resuelve el contrato) y C2b (una sola computación), el efecto era doble-escritura idempotente sin función. Se retira entero: `syncPartAttrs`, el flag del tipo y las ~71 registraciones que lo pasaban (tabs-provider y radio-group-provider viajaron en `8ac23047f` del eje theming con la retirada declarada en su cuerpo — coordinación por canal entre sesiones, historia completa desde ambos lados). El único escritor imperativo sancionado que queda es el prewrite de `trigger` (un commit que el morfo declara). La PRIMERA pasada de la suite completa de la historia (nadie la corría — el hallazgo original del informe demostrándose solo) destapó la cola: ~258 asserts en 34 ficheros de test de provider (jsdom, elementos sueltos) ejercitaban las escrituras DOM del efecto retirado, no el contrato. Todos re-firmados a asserts de bolsa, con tres leyes que salieron del trabajo: - la bolsa entrega valores CRUDOS (número 20, no '20'; booleans donde el getter los produce) — Svelte stringifica al render, el DOM no cambia; - una AUSENCIA se aserta contra la bolsa del PART (`'x' in props === false`), no contra un getter de provider que añada la clave explícita `undefined`; - el prewrite (`data-last-action`) SIGUE siendo assert de DOM — es el escritor imperativo que sobrevive. De la misma pasada: `skin-media-player` entra en `COMPETING_ROOTS` de lint.test (viste el contrato de media-player, clase audio-player — nació sin registrarse y nada lo corría), y los ~10 comentarios que describían el efecto (dialog-001, sticky, knob, field, media-player, editable, anchor-nav) pasan a describir la bolsa, verificados spread a spread antes de tocar nada. Verificación: runtime 49/49 · ssr-contract 6/6 · morfo:check 161/161 post-strip («All routed morfos validate» — el detector definitivo) · los 34 ficheros re-firmados en verde · suite completa con únicos rojos residuales los flaky de carga ya adjudicados (timeouts que pasan en solitario) · svelte-check src/ a 0 (71 = ledger exacto de web/). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
613215fe7c |
docs(theming): el dia queda cerrado - handoff 2026-08-26, causa corregida y suelo en 66
Cierre documental tras el adversarial de SS14 (firma sostenida; un claim de
ACTA cayo y se corrige aqui):
- La causa de la extension transitiva del censo era CONTRAFACTUAL en tres
sitios (census.ts, next-features, CONTINUE): el alias de SS14 no lleva
prefijo propio y el censo lo descarta antes - clasifica global con la
razon CORRECTA (medido construyendolo: 1 new, rojo). La extension se
justifica por tooltip (alias propio sobre canal propio), no por el alias.
Reescrita con el contrafactico medido.
- El suelo sube a minAtHundred 66 - SS14 llevo a tabs al 100% y el
adversarial cazo el suelo rezagado de su propia ley ("only moves up").
- SS15 NUEVO en next-features, redactado por el adversarial: el GEMELO un
piso arriba - floating.svelte.ts publica cinco medidas de instancia como
--floating-* (publico sin dueño, ~8 recetas lectoras); mas grande que SS14
porque el posicionador sirve a muchos hosts. Dimensionar antes de firmar.
- Handoff 2026-08-26: las cinco firmas del dia con sus adversariales, lo
primero de mañana por orden de valor (SS15 - la especie de forma sin dueño
- cableado motion - palabras/timeline), el estado de la rama compartida
(peer vicen-63 con su C2c/hook, que push falta) y las leyes nuevas del dia
(el nombre dice la verdad en las dos direcciones; grep ciego a llaves;
sonda ciega a canales; una causa sin contrafactico acaba corregida).
Suelo 5/5 con 66 - docs:check 0/0.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
8ac23047f1 |
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 |
|
|
243122393d |
refactor(soma)!: fase C2b — renderProps() muere; .props es la única bolsa
Tras C2a las dos computaban lo mismo. Sin shim, por doctrina: los 262 call sites en 62 ficheros migran a `.props`, el método y su tipo desaparecen del runtime, y las ~200 menciones en comentarios (la plantilla «lets renderProps() emit…» de los morfos incluida) pasan a nombrar la bolsa de render, para no dejar deriva doc↔código en el propio código. Verificación: svelte-check con src/ a 0 (71 errores = exactamente el ledger de web/) · suites de soma tocadas en verde. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
9dffa541ef |
fix(uix): fase A cierre — los seis rojos del censo morfo:check, adjudicados
Cada uno leído antes de tocarlo; tres clases distintas: - combobox.input y gradient-builder.track: el morfo declara el data-* SIN value (soma posee el valor — el idioma que el propio trigger de combobox documenta) y nadie lo escribía. El comentario del input además afirmaba que la bolsa lo resolvía, cosa que una declaración sin fuente no puede hacer. Escritura manual, como sus hermanos. - menu-dial.trigger: componente de scope eidos (contrato espejado a mano); el trigger estampaba marker y aria pero olvidó data-state — la lista de al lado sí lo lleva. Espejo del idioma existente. - calendar (data-calendar-surface) y fab (data-fab-size): attrs visuales de wrapper / hooks compartidos de eidos, sancionados FUERA del morfo por la doctrina firmada (precedente: data-combobox-control). El instrumento no conocía la doctrina: nace scripts/eidos-only-attrs.ts como lista ÚNICA que consumen morfo-check y eidos-lint-all, para que los dos instrumentos no puedan divergir. - palabras.handle: el grip porta el escape del focus-scope a propósito (comentario in situ con la razón); la declaración alcanza a la implementación sancionada. Los otros cuatro rojos del censo previo no eran contrato: accordion, background y link eran timeouts de compilación fría (pasan en caliente) y color-field lo sanó la unificación de la bolsa por sí sola. Verificación: morfo:check 160/161 con los seis en PASS — el único rojo restante (natural-time-picker) es la clase flaky del instrumento «demo que navega bajo el eval» (no falló en ninguna de las dos pasadas previas; la ruta verificada a mano en navegador con su contrato completo) · schema sweep 89/89 · eidos:lint exit 0 · combobox 11/11 · palabras 84/84. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
3ca138e913 |
feat(soma)!: fase C2a de P0 — la bolsa de render ES el contrato
El crítico-rebajado-a-mayor confirmado por el adversarial: 42 providers en la tubería `syncAttrs` servían HTML sin role, sin aria-*, sin data-state y sin type="button" (un Toggle dentro de un form era type="submit" — un clic pre-hidratación lo enviaba). Dos tuberías de attrs coexistían sin regla: el efecto cliente (`dom.apply`) y `renderProps()`. `partPropsForRegistration` resuelve ahora el contrato completo: statics (role, literales) + todo plan dinámico no-consumerWins, y los naming (consumerWins, A-85) al final como siempre. Consecuencias: - SSR lleva el contrato: los 42 providers lo heredan sin tocarlos (todos spreadean `.props`). - La reactividad es de render: readBindings lee fuentes rune-backed, el effect queda como re-aserción idempotente hasta C2c. - `renderProps()` pasa a devolver la misma bolsa — queda como alias hasta que sus ~70 call sites migren a `.props` (C2b) y se borre, sin shim. - El pin viejo («partProps sin attrs mutables») afirmaba el contrato contrario y se re-firma; nace ssr-contract.test.ts (server project, sin ventana) con harness de composición real — rojo antes del pliegue por los 5 attrs, verde después. Verificación: ssr-contract 6/6 · runtime.svelte.test 50/50 · soma-attr-audit verde · smoke 323/323 (hidratación limpia) · morfo:check y perm-check re-corridos (los rojos restantes son fase A adjudicada, no regresión de esto). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
2ec0181079 |
feat(gate): fase B de P0 — la puerta existe y sabe fallar
El hallazgo mayor confirmado de la auditoría 2026-08-26: ~16 validadores y
429 ficheros de test que nada ejecutaba (sin CI en ninguna rama de la
historia, hooks .sample, eidos-lint sin script npm). Esta fase los cablea:
- `check:gate` (scripts/check-gate.ts): svelte-check con política — src/
debe cero; web/ se mide contra el ledger menguante scripts/check-debt.ts
(34 ficheros, 71 errores congelados; sólo puede bajar, la disciplina de
theming-census-debt). Guard anti-vacío: sin marcador COMPLETED o con
conteo que no cuadra, falla — un gate que no inspeccionó nada no pasa.
- `eidos:lint` deja de ser invocación cruda (exit 1 real en invalid/dead).
- `gate`: check:gate → validadores rápidos → vitest al final. `lint` queda
deliberadamente FUERA: hay ~2.300 ficheros de deuda de formato
preexistente (nunca se formateó el repo entero; el one-shot pendiente es
`npm run format` en árbol quieto y re-añadirlo — documentado en el hook).
- scripts/hooks/pre-push: la fuente del hook, SIN armar. Se armó en
caliente, bloqueó el push legítimo del eje theming (secuencia mal: verde
primero, puerta después) y se desarmó — de paso la puerta demostró que
sabe fallar, que era el requisito de verificación de la fase.
- .prettierrc endOfLine:auto — neutraliza la clase CRLF/autocrlf de
Windows (~350 falsos rojos), sin cambiar formato real.
Verificación: check:gate exit 0 sobre HEAD (71 dentro del ledger, src/ a
cero tras
|
1 month ago |
|
|
58fa3021c9 |
fix(uix): fase A de P0 — tres rojos que ningún guard corría
- arts/connection: `close` era un duplicado huérfano de `closeConnection` delegando a un método que el engine no tiene (TypeError garantizado en cualquier llamada; 4 de los 76 errores de svelte-check). Se borra. - soma/stepper: el provider publicaba `state: 'completed'`, fuera del enum del morfo (`complete|current|incomplete`). Lo cazó perm-check la primera vez que alguien lo ejecutó; el test pineaba el valor derivado (escrito contra la implementación, no contra el contrato) y se re-firma. - langs/media-player: `stop` y `record` no existían como hojas y skin-media-player las referenciaba (translations:check, 2 errores). Aditivo, con la excepción firmada: las consume el skin, no el morfo. Verificación: vitest connection 46/46 · stepper 3/3 · translations:check 0 errores · smoke 323/323. Parte del P0 de la auditoría arquitectónica 2026-08-26. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
9d6533cb7e |
fix(eidos): el guard de sideOffset en navigation-menu-content era un vestigio de popover
El unico error de svelte-check en src/ (navigation-menu-content.svelte:7, rest.sideOffset no existe en NavigationMenuContentProps): la condicion `sideOffset === undefined ? 'menu' : undefined` es el idioma de popover - cuyo ContentProps de soma SI lleva sideOffset (flotante por trigger) - copiado a un Content que se posiciona por el modelo de viewport del menu y nunca tuvo la prop. La condicion era siempre-verdadera: se estampa `data-floating-gap='menu'` incondicional. Value-preserving verificado en navegador: panel abierto con gap=menu, depth=overlay, visible. src/ queda a 0 errores para el check:gate de la fase P0-B (encargo del peer vicen-63: el estado era commiteado y el componente es de este eje). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
b7808fbe66 |
docs(theming): puntero de linea de SS14 corregido (radio-group new MeasuredIndicator en :353, no :337) - nit del adversarial; fe de erratas del commit de2e136a0: el ejemplo 1 del README y el control positivo son dos escrituras distintas (el ejemplo mide 2->3px via --border-width-thick; el 9px/rgb(1,2,3) era el probe de valor forzado)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
de2e136a0f |
refactor(theming)!: el indicador de navigation-menu es CANAL - y el consumidor estiliza la PARTE
Firma "(a) completada" (2026-08-26), cerrada tras rechazar la especie
`output` por abrir excepciones (clase barata - frontera de prosa - patron ya
rechazado dos veces): las cuatro hermanas --navigation-menu-indicator-
{x,y,w,h} pasan a --_ (la adjudicacion que tabs ya firmo citando a ESTE
componente como precedente), indicator-w se RETIRA del contrato, y el README
de soma deja de enseñar a saltarse la composicion.
- Flip atomico escritor+lectores. Trampa del barrido, medida: el grep del
nombre LITERAL es ciego a la forma con llaves {x,y,w,h} - escondia tres
menciones. Barrido final: 0 consumos vivos de los nombres viejos.
- indicator-w retirada con acta MEDIDA (y una auto-correccion: la primera
acta decia "con la barra cerrada" y era falso - el indicador se monta
condicional y hay 0 nodos; lo real, con transiciones CONGELADAS: solo una
regla !important de autor le llegaba, y la unica ventana donde asomaba
era el indicador montado sin rect - un subrayado de ancho cero). Contrato
44 -> 43, generated -1 linea, ningun ledger rancio.
- README de soma: las medidas siguen tabuladas como canales privados "not
consumer API"; la seccion nueva enseña la PARTE ([data-navigation-menu-
indicator] + data-state + los tres pomos thickness/bg/radius) con
ejemplos VERIFICADOS POR MEDICION (el ejemplo 1 es literalmente el
control positivo: block-size 2 -> 9px). Hueco FLAGGED sin acuñar: el
ejemplo viejo de pildora no tiene traduccion - falta un eje de forma en
la parte; en SS13.
- Registro PENDING_PRIVATE_RENAME -> UNA entrada (motion). SS14 NUEVO en
next-features: unificar tabs (--indicator-* SIN prefijo, MeasuredIndicator
:80-83, 2 claves global en el ledger) - con el hallazgo de que ningun
guard los caza HOY porque no llevan prefijo: el espacio cerrado premio al
que nombraba mejor.
- Numeros: public 3073->3072, channel 37->38, reach 73% y atHundred 65
intactos (ningun redondeo cayo), --names 4566 con 0 desviadas, centinela
nav-menu 42/43 con la misma unica adjudicacion, --debt identico.
- Dinamica verbatim: el indicador DESLIZA (left 0 -> 111px, ancho 107 ->
108.56 = rect del trigger, canal w/h == triggerRect), los nombres viejos
computan vacio en el elemento (control negativo 777/333: nada se mueve).
Guards: 78 tests verdes + soma 9/9 + mutacion por las dos caras + audit
162 PASS + docs:check 0/0.
BREAKING: los cuatro nombres publicos del indicador ya no existen y
--navigation-menu-indicator-w sale del contrato; el indicador se estiliza
por su parte y sus pomos.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
b9339633f0 |
docs(theming): los residuos que midio el adversarial del codemod de canales
El flip fue ATOMICO (13/13 con escritor y lector vivos, control negativo en los siete componentes, ni un canal muerto en silencio) y lo refutado fue documental: - STUMBLES.md SS7 entra por fin al arbol: la anotacion existia sin commitear (fallo de staging del coordinador - la raiz del repo no estaba en las rutas). Deja escrito lo importante: el renombre no rompio nada por DISCIPLINA de procedimiento (git ls-files por nombre), no porque un guard cruce escrituras del provider contra lecturas de receta - S5 sigue abierto. - PLAN-background: la anotacion decia "las nueve menciones de aqui abajo" y tres quedaban arriba - ahora dice su alcance exacto. - next-features SS13 gana las dos deudas del adversarial: la sonda estandar es CIEGA a 12 de los 13 canales (PROPS sin translate/rotate/ gridTemplateColumns/animationDuration - el control positivo dio 0 diffs con el canal roto a proposito) y el export muerto getFloatingContentCSSVars que construye por plantilla el nombre publico retirado de menubar. Fe de erratas del commit e100ea520: son 31 ficheros, no 32. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
e100ea5209 |
refactor(theming)!: trece canales de valor hablan como lo que son - privados
Eje-codemod firmado 2026-08-26 (destino firmado dos veces: los 318 y la ley
del espacio cerrado). Flip atomico escritor+lectores por nombre, barrido por
git ls-files (94 ocurrencias en 36 ficheros; el barrido destapo lectores que
ninguna lista traia: el comentario del morfo de knob, dos demos, y PLAN-
background). 32 ficheros.
- background pointer-{x,y,px,py} + progress · color-swatch fill ·
emoji-picker columns · knob {angle,progress,start-angle,sweep} · menubar
panel-anchor-width · text-gradient duration -> --_{c}-*. El nombre viejo
computa vacio en los siete componentes.
- PARADO con expediente: --navigation-menu-indicator-h NO se renombra - es
una de CUATRO hermanas escritas en un literal, el README de soma las
enseña como API del consumidor (dos ejemplos de CSS de app leen -h) y -w
es clave DECLARADA del contrato. Privatizar una de cuatro parte una API
documentada. Tres opciones redactadas en next-features SS13, sin elegir;
el registro PENDING_PRIVATE_RENAME queda con DOS entradas (esta + motion),
cada una con su razon.
- La trampa del censo NO mordio y la prediccion estaba mal por un orden de
magnitud: UNA reclasificacion (color-swatch.background), no ~15 - el censo
cuenta knobs de APARIENCIA y doce canales viven en geometria o conservan
un publico hermano. public 3074->3073, channel 36->37, reach 73%,
atHundred 65: el suelo no se toca.
- Verificacion dinamica de los SIETE canales vivos por CDP (verbatim en el
acta de la sesion): el parallax sigue al puntero con la privada (translate
-28,-24 -> 32,28 = x*depth), el knob rota por teclado (-27deg -> 0deg,
arco 108 -> 135 = progress*sweep), el chip pinta su prop, columns 9/6/12
tracks (control negativo: el nombre viejo a 3 no mueve nada), el panel
toma 886px del anchor, text-gradient 8s. Estatica: sonda 7/7 a 0 diffs
reales (el unico diff, un velo de emoji-picker, reproducido 2/2 = ruido);
color-swatch sin ruta de demo declarado en voz alta (la sonda con 0 nodos
es un guard que no inspecciona nada) y medido donde monta.
- Guard mutado por sus dos caras: entrada retirada reintroducida -> STALE;
nombre viejo devuelto a una receta -> missing. Docs ANOTADOS con fecha
(la adjudicacion medida de color-swatch del 23-08 intacta), volcados solo
donde describen codigo vivo. audit 162 PASS - docs:check 0/0 - --debt
1154/0/0 sin una clave movida - --names 0 - check 0 atribuibles.
Deuda menor anotada: la fila generada de audit/theming/background.md:72 la
regenerara el --report supervisado pendiente.
BREAKING: los trece nombres publicos viejos ya no existen; el canal se lee
--_{c}-* y sigue sin ser tuyo para fijarlo.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
cec75d04e4 |
docs(theming): la deriva que midio el adversarial del espacio cerrado
7/7 claims confirmados; la acunacion de phone-shadow resulto ser la pieza que impide una regresion que el commit habria metido sin ella (verificado el contrafactico). Tres derivas de prosa de la propia firma, saldadas: - base.ts: text-scramble gana sus dos anotaciones - el default `inherit` es inerte POR MECANISMO (CSS-wide keyword en :root -> IACVT -> unset -> hereda, que ES la intencion) y `--font-mono` es nombre de capa app que eidos nunca emite (misma clase que el primitive-neutral-12 de mockup, anotada igual). - color-swatch/README: "la forma que recipe-css-contract sanciona" paso a pasado con anotacion fechada - la sancion la retiro esta ley; la adjudicacion (canal de valor, fuera del contrato) queda intacta y el nombre vive en PENDING_PRIVATE_RENAME con su destino. - component-audit: la nota de R-5.2 que describia el idioma como sancionado se reescribe a la ley nueva (y de paso al ingles, ley del repo). Censo byte-identico tras los comentarios (los lectores textuales de base.ts no se inmutan: 4914/3074/73%, text-scramble 4 knobs contract 2), 50 tests verdes, docs:check 0/0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
6499eb2a4c |
feat(theming)!: la ley del espacio cerrado - un --{c}-* existe si y solo si base.ts lo declara
Firma 2026-08-26. El espacio de nombres publico queda CERRADO sobre el
contrato: no hay tercer estado. El fallback es seguridad de VALOR, no
escapatoria de contrato; declarada la clave, el fallback inline muere (el
default vive en UN sitio, base.ts).
- El barrido real del catalogo: 25 nombres propios con fallback fuera de
contrato en 10 componentes (la prosa decia 13 en 2). ONCE eran knobs de
tema y quedan DECLARADOS con su default verbatim, scope root medido:
mockup 9 (con --mockup-phone-shadow ACUNADA - un nombre cargaba shadow-4
en el marco y shadow-5 en el bisel: un nombre con dos defaults es la
mentira que la ley mata) y text-scramble 2. Fallbacks inline retirados.
- Los otros QUINCE no son knobs: 14 canales de VALOR que soma/envoltorio
escriben por instancia (destino ya firmado por la firma de los 318:
--_{c}-*; el codemod es un eje propio) y el default de motion cuyo hogar
es EidosConfig.motion (su entrada structural queda intacta). Viven en el
registro PENDING_PRIVATE_RENAME del guard - nombrados, fechados, con
destino escrito y STALE simetrico: contarlos, no bendecirlos. La firma
medida de color-swatch.fill (2026-08-23) queda INTACTA y citada.
- El guard de fantasmas endurecido al "si y solo si": un --{c}-* del propio
componente fuera de contrato es ROJO con o sin fallback; el prestamo
ajeno y el sistema conservan sus reglas. Mutaciones: var inventado con
fallback -> rojo nombrado; prestamo ajeno -> verde; entrada de registro
rancia -> rojo STALE.
- Neutralidad PROBADA: generated/base.css = +11 lineas y nada mas; computed
A/B en navegador reconstruyendo el mundo viejo inline sobre el mismo nodo
- mockup 3 nodos x 2 cromos x 6 propiedades identicos (el bisel conserva
shadow-5), text-scramble identico. mockup se midio donde monta de verdad
(/blocks/feature-split): no tiene demo propia.
- Numeros: solo no-contract 18 -> 16. El suelo NO sube y la razon importa:
la ley cerraba un hueco de CONTRATO, no de alcance - esas declaraciones
ya puntuaban public; lo que faltaba era declarar el NOMBRE.
- Efecto lateral anotado en la clave, el handoff y next-features: el crudo
var(--primitive-neutral-12) migro verbatim a base.ts y R-4.6 (que escanea
CSS) ya no lo ve - la deuda sigue, ahora nombrada en el contrato.
- docs: recipe-contract SS4 reescrito con la ley y sus corolarios (el
value-reference con-fallback queda acotado a vocabulario ajeno/sistema);
CONTINUE y next-features al dia - pendientes del eje: el codemod de los
14 canales, el cableado del canal de motion, palabras y timeline.
BREAKING: consumir un --{c}-* propio no declarado es rojo desde hoy, con o
sin fallback.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
cc2894b36f |
docs(theming): el corpus derivado recoge la clase structural y la firma de los 318
Regeneracion tras |
1 month ago |
|
|
1c239bf797 |
docs(theming): precision de prosa que midio el adversarial de los 318
13/13 claims confirmados (particion re-derivada clave a clave, 22 css 100% comentario por tokenizador propio, valvula irrompible ante declaracion ajena, suelo 73/65 exacto sin holgura, canario del centinela byte-identico). Cuatro precisiones de prosa, ninguna de clasificacion: - component-audit: el bloque R-5 decia 1088/74 (cifras del 25); ahora ancla 1154/76 al baseline del 26 con fecha. - theming-census: "los 29 nombres tienen escritor en envoltorio o soma" era 28 de 29 - el 29 (scroll-frames viewport) es el hatch que su contrato firma como geometria del SITIO: su escritor es la pagina, por diseño. - CONTINUE: unidades normalizadas en la lista de contradicciones (timeline 10 knobs/5 notas - listbox 6 knobs/5 notas - proof-of-human ya decia knobs). - recipe-contract: el "(1088 -> 1087)" historico gana su "that day" para no leerse como estado. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
90b93a79e0 |
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 ( |
1 month ago |
|
|
a74aeec7b6 |
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 |
|
|
e812d3ffd3 |
feat(theming): el censo distingue PUENTE y CANAL - 318 privados dejan de ser un bulto
Primera pieza de la firma "clasificacion de los 318" (F1). Dos clases nuevas
de knob, MEDIDAS contra el emisor y no adivinadas por nombre (la ceguera del
chooser, escarmentada en este mismo eje):
- bridge (132): el knob lee el privado que el forward THM-2 ESCRIBE -
verificado contra la CSS generada real (la linea `--_{c}-palette-{slot}:
var(--palette-{slot}, ...)` de renderRecipePaletteForward), no contra la
forma del nombre: un `--_c-palette-shadow` que nadie forwardea se queda en
residuo. Alcanzable DOS veces (capa --palette-* + tonos publicos); un
publico encima dejaria a un tema PINearlo y matar el color= por instancia
(los SS5 de card/tags-input/avatar ya lo decian).
- channel (36): el privado que NADIE declara - ni la receta ni el generador -
porque soma o el envoltorio lo escriben POR INSTANCIA (29 nombres, cada
uno con su escritor real verificado). Un tema no debe alcanzarlo.
- Precedencia puente > canal > residuo; `every`, no `some`; un privado
GENERADO nunca es canal (los 4 knobs de gradient finish quedan en residuo
con su razon medida - adjudicar una clase "finish" seria inventarla sin
firma).
Aritmetica: 318 = 132 puente + 36 canal + 150 RESIDUO (la adjudicacion por
clave es de F2). Ambas clases salen del denominador como system/structural:
reach 69% -> 71% (3074/4312). Cero knobs de otras clases movidos (diff
programatico de las 162 filas). Mutacion del instrumento sobre copia:
vaciar los forwards -> bridge 0; declarar-todo -> channel 0 - las clases
las manda la medida. Nuevo `--residue <out>` vuelca el residuo con la
cadena de fuentes de cada privado (el material de F2).
Casos firmados, contrastados: card 8 = 4 puente + 4 residuo (su SS5 exacto) -
tags-input 4/4 puente - toolbar 2 residuo ("esta barra no tiene paleta") -
avatar 6 residuo (su canal custom esta un nivel POR DEBAJO del knob) - el
indicador de tabs NO esta en los 318 (es clase global y ya vive en el
ledger de deuda).
Suelo 5/5 verde (el ledger literal|global no se toca; el ratchet grueso
sube en F3), audit 162 PASS identico, tsc 0 propios, prettier sin
desajustes nuevos. Deuda de prosa (los "318" en cabeceras/docs y el suelo
en 69) queda para F3, nombrada.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
3f9f9be6be |
docs(theming): EL EJE THEME-REACH QUEDA CERRADO
El CONTINUE pasa a CERRADO: desde hoy el estado del eje no lo vigila un
handoff sino los guards - el suelo por clave (newDebt=0 - STALE=0 - reach
>=69% - >=45 al 100%), component-audit R-5.1/5.2/5.3 en error y el centinela
R-5.4. La deuda restante vive NOMBRADA en scripts/theming-census-debt.ts
(1088 claves que solo pueden menguar). Trabajo nuevo de theming = entrada
nueva, no herencia de aqui.
next-features SS13 recibe: la clase structural EJECUTADA con sus candidatos
no incluidos y la deuda de fichas sin regenerar; y las DOS FIRMAS PENDIENTES
que el cierre dejo nombradas - los 318 privados no-derivados sin ratchet por
clave, y el idioma var(--{c}-x, fallback) sin contrato - mas la
re-clasificacion abierta de palabras (canal de valor, no tema).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
1ba518fcc2 |
fix(theming): lo que el adversarial del cierre midio - numeros de prosa y el exit de --debt
La verificacion adversarial del cierre (11 confirmados, 2 refutaciones de NARRACION, 7 mutaciones con arbol restaurado byte a byte) dejo cuatro correcciones, ninguna de mecanismo: - El "114" de palabras eran 117 nombres --palabras-* consumidos (103 con fallback + 14 sin, los 117 bajo --palabras-scheme-*): el punto doctrinal sale REFORZADO - todo el canal es proyeccion del scheme. Corregido en el README y en la cabecera del ledger. - Los "18 sin contrato" de recipe-contract SS4 son 23: el titulo dejaba fuera a los cinco estructurales que su propia enumeracion lista dentro. Renumerado con el desglose recontado. - --debt no fijaba exit code: un modo de chequeo que no puede fallar es medio guard. Ahora process.exitCode=1 con deuda nueva o STALE (verificado por mutacion: HEAD exit 0, con literal inyectado exit 1, restaurado). - El 5o test del suelo se llamaba "mutation probe" y no muta nada: renombrado a lo que es (canario de cordura del scanner), con la historia de donde SI se vio el rojo por mutacion. Hallazgos del adversarial que quedan registrados sin ejecutar: las fichas de docs/audit/theming estan OBSOLETAS respecto a la clase structural (--report sin re-correr; tarea aparte con supervision por ficha) - el desglose "Knobs de apariencia" de la ficha no suma (preexistente) - el suelo de reach tiene ~0,5pp de holgura por redondeo. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
69d69d43c6 |
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 |
|
|
ef47f34478 |
docs(theming): la deuda B queda saldada - los tres ultimos README "Talla y tema"
Pieza del CIERRE del eje: los tres componentes que |
1 month ago |
|
|
2c61946fba |
feat(theming): la clase structural del censo - el 0% por NATURALEZA deja de contar como deuda
Pieza del CIERRE del eje (SS13: el censo no distingue "0% por deuda" de "0% POR NATURALEZA" y el gate de F3 era inalcanzable por construccion). Nueva clase structural en theming-census.ts, la forma de LAYER_VOCABULARY: la lista Y la razon por componente EN el artefacto, por COMPONENTE entero, con el SS5 firmado de cada ficha como fuente. No es un cajon para "este es dificil": una entrada exige veredicto escrito, y un componente que gane superficie de tema real sale de la lista. Los cinco medidos 2026-08-22: aspect-ratio (faceta de box, knob prestado) - text-blur (el 1px de la tecnica sr-only) - cascade y motion (el opacity del gate antiparpadeo, mecanica del canal cuyo valor vive en EidosConfig.motion) - date-picker (la correccion max-content del pie, un unico valor correcto). Aritmetica cuadrada: structural 9 knobs (global -1, literal -8), knobs 4998 intacto (salen del DENOMINADOR, como system), reach 68% -> 69%, no-contract 23 -> 18, <20% 12 -> 7. Diff de tablas: exactamente 5 filas cambian (0% -> strct), las otras 157 byte a byte. Los knobs estructurales se siguen LISTANDO en SS2-bis de su ficha con su razon; la seccion de propuestas los excluye (proponer un token contradiria el SS5). component:audit identico (162 PASS; el NEEDS-WORK de motion es R-1.1, raiz sin declarar, ortogonal al alcance). Suelo del censo verde con margen. Candidatos NO incluidos, reportados con dato: field-langs es deuda REAL (31 globales crudos) - range-calendar/month-grid/year-grid son la pregunta abierta de las capas compartidas - display/heading/text ya son all-system. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
4cb76403a0 |
docs(theming): la GRANDE EJECUTADA y verificada 12/12 - TONE_UNREACHED ha muerto
Cierre de la firma de instrumento grande. La verificacion adversarial
confirmo los 12 claims (aritmetica del ledger cargando el modulo en cada
commit, monotonicidad E2E con comparador propio, seis catas empiricas
incluida la sorpresa de tags-input dos veces y el test de dos caras del
PALETTE_FLOOR, la sonda sana, y la estatica fina del codigo).
- Corrige el acta de la retirada de tags-input en el ledger: la asimetria
del estampado (data-color en todos los nodos vs solo el proveedor) EXISTE
pero NO es la causa de la revivida - medido en forma de produccion, el
token mueve 6 nodos igual porque el privado hereda del proveedor al item.
- Anota en next-features SS13 las tres cegueras como EJECUTADAS (S1/S2/S3
con sus commits y numeros) y registra la deuda nueva del adversarial:
asimetria del estampado, ternario falsy de la restauracion de atributos
(
|
1 month ago |
|
|
b9cef9a43f |
fix(theming): S3 de la GRANDE - el guard mide TONO y ESTADO a la vez, y TONE_UNREACHED muere
Tercer barrido de la firma de instrumento grande (ceguera 2 + su cuarto
defecto). Cuatro piezas en theming-sentinel.ts:
- F2.1: el pase de hover estampa el tono (data-color + data-intent) y lo
restaura al salir, simetrico al estatico.
- F2.2: toneOf() con (^|-){tono}- a nivel de modulo, viajando como parametro
a los dos page.evaluate - el tono MEDIAL existe (censo: 4556 claves, 556
nombran tono, 16 mediales, las 16 de tag-group, cero falsos positivos).
- F2.3: el pase de hover corre para toda clave de TONO que siga muerta,
aunque su nombre no diga hover (las 21 de file-upload).
- F2.4: seis ejes de estado como DATO en COMPONENT_OVERRIDES, cada valor
sacado del morfo/receta/DOM real (button variant; switch state; checkbox
variant x state - indeterminate FUERA con medida, comparte bloque con
checked; radio-group +state; tags-input +state 4o eje; tag-group variant x
state). Ningun eje nuevo bajo ninguna cuenta.
Barrido S3 del ledger entero contra la base S2: 91/91, 43,8 min, 0 rojos,
0 avisos, 0 bajadas, 0 movedores ajenos - exactamente los nueve previstos,
+140 claves (catalogo 2778 -> 2918). 130 de las 132 TONE_UNREACHED reviven;
las 2 que no (checkbox/radio-group primary-solid-hover) nunca fueron la
clase: son el tono HOST por defecto, absorbidas en PALETTE_FLOOR tras el
test de dos caras. La firma de los ocho componentes es una sola: el unico
tono que queda muerto es siempre el default estampado del host.
Ledger: 8 patrones RETIRADOS (button 35/35 - file-upload 28/28, la entrada
que NOMBRO el tercer defecto - switch 10/10 - toggle 10/10 - tags-input
14/14 - tag-group 21/21 y 6/6 - toast action-hover-bg 5/5, la que ESCRIBIO
la clase), 2 ESTRECHADOS a PALETTE_FLOOR (checkbox, radio-group), 5 exactas
retiradas (button.palette-track/-border/-text con su razon corregida - el
guard escribe en el nodo, no solo :root; tag-group.solid-fg que se retiro a
si misma; hover-item-fg re-atribuida: la callaba su data-state=selected
nativo, no el arquetipo), 2 razones reescritas por medida. La constante
TONE_UNREACHED RETIRADA como huerfana - la muerte que su docstring pedia.
Tier de patrones 26 -> 16; 15 de los 16 son ya el unico hecho PALETTE_FLOOR.
Dos contradicciones del expediente, reproducidas dos veces: las -text de
tags-input SI reviven (la causa del arquetipo solo tapa el ITEM RESALTADO y
la escena no tiene ninguno; el token pinta ademas dos nodos hermanos fuera
de esa regla) y tag-group.hover-item-fg estaba mal atribuida. Queda señalado
en acta para expediente propio: el pase estatico estampa data-color en TODOS
los nodos mientras produccion lo estampa solo en el proveedor - anterior a
esta firma.
Los nueve componentes editados re-corridos tras el ledger: verdes, STALE 0.
label 1/2 byte a byte; switch 27->37 por diseño, reproducido dos veces.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
b4dd5a9067 |
fix(theming): S2 de la GRANDE - el centinela elige la sonda por el VALOR, no por el nombre
Segundo barrido de la firma de instrumento grande (ceguera 3 del expediente VA). sentinelFor(key) pasa a sentinelFor(key, kind): el guard ya leia base.ts para extraer las claves y ahora captura en el mismo pase el VALOR por defecto de cada una y tipa la sonda por el (literales por sintaxis; var() por el vocabulario del sistema, con resolucion transitiva dentro del catalogo via recipeTokenIndex). La escalera de nombre queda como respaldo para lo no clasificable. La regla: la sonda tiene que ser imposible EN LA DIRECCION en que la propiedad puede moverse. Censo del cambio: 357 claves cambian de sonda (320 clase A color<-1234px en 40 componentes - la clase entera del "vivo por accidente" IACVT - + 17 B + 8 E + 1 F + 11 menores). Easing (52 claves) intacto y explicito. Dos desviaciones del boceto, ambas medidas: el % NO se clasifica (opacity 62% vs width 42% - ambiguo) y el entero/0 tampoco (la "clase E de 24" del expediente era una mala lectura: 22 son calc(px * var(--scaling)), longitudes; y tipar el 0 habria matado en falso 7 claves vivas con default 0 - no monotono). Barrido S2 del ledger entero contra la base S1: 91/91 verdes, MONOTONO (0 componentes bajan), 0 rojos, 0 avisos de prepareWith, 39,7 min. Catalogo 2776/3577 -> 2778/3577: avatar 80->81 y stepper 62->63, exactamente las dos victimas medidas del expediente. Ninguna de las 102 claves clase A cubiertas por patron revivio - esperan la ceguera 2 (S3), como estaba escrito. Un fantasma no reproducido (spin-field 0/20 en 6,2s, la pagina no rindio; rerun 13/20 identico a S1) queda archivado como flake del instrumento. Ledger: DOS retiradas exactas con acta y medida - avatar.badge-fg-custom- contrast (default white, la entrada describia la sonda, no el token) y stepper.neutral-text (el unico caso donde la sonda mala daba VEREDICTO malo: la IACVT caia en la tinta heredada que el tono neutral practicamente es). background.scrim-fg-over-* siguen muertas por su puerta real y su entrada sobrevive tal cual. Re-corridos tras editar: verdes, sin STALE. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
6392d6003f |
fix(theming): S1 de la GRANDE - el prepareWith GRITA y el STALE ve los patrones
Primer barrido de la firma de instrumento grande (cegueras 6 + 1 del
expediente VA). Dos cambios en theming-sentinel.ts:
- Ceguera 6: el catch del bucle prepareWith avisa SIEMPRE por stderr - el
count() previo ya filtro la ausencia, asi que lo que cae ahi es un control
que estaba y fallo, la fuente de las muertes fantasma (chat-message midio
59/81 y 77/81 sobre codigo identico). No lanza: un barrido debe terminar,
pero una corrida con aviso NO es certificable.
- Ceguera 1: stale/oscillating filtran por reasonFor(k) (exactas Y patrones)
en vez de k in ledger (solo exactas) - 236 de las 821 ranuras adjudicadas
(29%) no podian disparar STALE, el silencio que costo 207 claves en B'. El
mensaje distingue: exacta -> retirar la entrada; patron -> ESTRECHARLO
(nunca retirarlo: cubre una familia y las demas siguen muertas).
Barrido S1 del ledger ENTERO: 91/91 componentes VERDES, cero unadjudicated,
cero avisos de prepareWith (corrida certificable), 40,8 min. label 1/2 y
switch 27/52 byte a byte identicos a las bases - los cambios no tocan
veredictos, solo el informe.
Cosecha: 18 claves STALE, todas de PATRON, todas de toast - los dos patrones
PLANE_SUPERSEDED ({tono}-{surface|border} y {tono}-accent) adjudicados el
2026-08-24 y dejados rancios ESA MISMA NOCHE por SS12.9 (el plano bajo a
:where() y la receta volvio a ganar; el handoff registra los seis tonos
restaurados). Reproducido 3/3 sobre codigo identico. 18/18 vivas = familias
enteras = ambos patrones RETIRADOS (no estrechados) con acta en el ledger;
toast re-corrido tras la retirada: 72/85, exit 0, 0 STALE. La tercera entrada
de toast (action-hover-bg) es clase tono-en-hover: cosecha de S3, intacta.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
5fb2db027b |
docs(theming): la mitad gratis EJECUTADA - queda la GRANDE
Anota en next-features SS13 la ejecucion de la firma de instrumento
(codemod IIFE + huecos de la sonda) con sus numeros y las deudas nuevas que
la verificacion adversarial midio (search-field clear-trigger, asimetria de
escenario, alreadyOpen, tres lectores de base.ts), y reescribe el handoff:
la primera de las dos firmas de instrumento esta ejecutada (
|
1 month ago |
|
|
0474643895 |
fix(theming): la mitad gratis del instrumento - el codemod lee la IIFE y la sonda habla la puerta del centinela
Firma de instrumento (expediente VA, cegueras 4 y 5): coste de ledger CERO,
tres scripts, ni una entrada de theming-sentinel-exceptions.ts tocada.
- __names-codemod.ts: blocks() devuelve {name, at, end, depth} con offsets
reales del fichero; la IIFE de avatar acota su region al return{...} con
depth 3 (y LANZA si no lo encuentra) y los muros 2-3 leen por fin sus 97
claves (86 publicas + 11 privadas); el pase A renombra a \t{depth}.
Laboratorio sobre copias: duplicado inyectado a 3 tabs DETECTADO,
renombrado de una clave de avatar = 1 linea. La via de carga SE QUEDA en
tsx: theming-census importa src/uix/morfo/compile sin extension y todo
src/uix/morfo esta escrito asi.
- theming-sentinel.ts: COMPONENT_OVERRIDES se exporta (UNA tabla de puertas,
no dos) con guarda de entrypoint via realpathSync - sin el realpath la
guarda muere a traves de un junction (exit 0 sin inspeccionar nada) y este
repo usa worktrees con junctions; UIX_DEV_URL reemplaza el :5173 clavado.
Importarlo: 0,85 s sin navegador. label 1/2 y switch 27/52 byte a byte
identicos a las bases pre-firma. Incluye +10 lineas de comentario
PREEXISTENTES de otra sesion (la justificacion de image-adjustments en
COMPONENT_OVERRIDES, solo prosa, verificada contra su acta del 24).
- __theming-probe.ts: el pase open habla el vocabulario del centinela
(prepareWith/openBy/openWith/openMarker, con OPEN_TRIGGER podada de sus
copias literales) y su catch AVISA en stderr distinguiendo "no hay trigger"
de "el gesto fallo"; editable registra por fin su bloque open (25 filas, 6
con data-editing; dos corridas sobre codigo identico = 0 diffs en TODOS los
bloques); pases nuevos de FOCO (la cabecera lo prometia y nada llamaba a
.focus()) y disabled (bloque aparte y ULTIMO de la corrida);
PROBE_ROLE_BOUND_SCALES + PROBE_SAFE_SCALES + assertProbeSafeScale con la
discrepancia risk amber/orange documentada; UIX_DEV_URL. card y editable a
0 diffs contra sus bases en los bloques pre-firma; menubar (6 nodos -> 7
con el panel) y chat-message (24 filas x 2 corridas, 0 diffs) abren via las
entradas del centinela.
Fuera de la firma, registrado en next-features SS13: el barrido de variantes
de la sonda (ensanche diferido), el clear-trigger de search-field en el pase
open, la asimetria de escenario de los seis con prepareWith sin fila en
DEMO_VARIANTS, y la GRANDE (cegueras 6+1+3+2, barridos S1-S3), que sigue
esperando firma. El catch del prepareWith del centinela sigue MUDO a
proposito: es la ceguera 6, S1 de la GRANDE.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
fb2e12ea9f |
docs(theming): handoff 2026-08-25 noche - por aqui manana
Las cinco firmas del eje EJECUTADAS y los tres expedientes de 13 de la tarde commiteados (ARIA F-1, velo/atajo 56, talla A-112). Manana, en orden: la firma de instrumento "mitad gratis" (PRESENTADA, sin firmar - coste de ledger CERO) - la GRANDE de cuatro cegueras con TRES barridos escalonados (~3h dimensionadas, NO fusionar S2/S3) - y el cierre del eje (deuda B, gate F3, R-5 a error). Fuera del carril, registrados: E1 composicion del array (con la correccion de E-talla), lo abierto por el ARIA, y el parrafo de doctrina que querria vivir en reference.md. Leyes de la sesion escritas: interrupciones matan agentes (informe a disco INCREMENTAL) - el supervisor mira capturas antes de cada commit - las demos no entran ni como prueba central - F5 compartidas en serie. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
2 months ago |
|
|
318aac207d |
fix(eidos): el eje size de form LLEGA a sus acciones - contexto A-112
<Form size="xs"> renderizaba acciones md: la talla moria en el provider (form-submit/reset con default 'md', nada la propagaba) y del eje entero solo sobrevivia el row-gap. Contexto de eidos calcado 1:1 de toolbar/context.ts (el precedente A-112): form provee su size resuelto; Submit/Reset lo consumen como default (su prop explicita gana; md standalone). El eje va VERBATIM, no tapado en md - la bifurcacion de doctrina queda RESUELTA Y ESCRITA (next-features 13 "Anchura vs densidad"): reference.md:590 (tapar en md, precedente Dialog.Close) gobierna ejes de ANCHURA; el de form es DENSIDAD declarada cuya receta ya escribio los cinco peldanos. - 5 ficheros de codigo, solo eidos (context.ts NUEVO); los dos costes avisados NO se tocan, verificado con linea: la excepcion A11 de form-auto-fields y el duck type CompatibleFormProvider quedan intactos (el puente es setContext/getContext con Simbolo propio, disjunto). - Medido: 84 diffs y NI UNO fuera - submit 40, reset 40, form 4 (su panel); CERO en array/widget/error-summary; CERO en md. Alto -10/-6/0/+8/+16 px; la letra lg/xl difiere de la prediccion (+4/+12 vs +2/+8) por causa MEDIDA: --font-size-lg/xl son clamp() fluidos que saturan desde ~1200px - ningun valor fuera de la escalera. Capturas xs/md/xl revisadas por el supervisor. - Los botones del array siguen POR HERENCIA CSS, intactos (0 diffs) - respuesta para E1: E2 ahorra el contexto, no la lectura (E1 debera pasar size al Button que inyecte o sigue siendo la regresion medida). - Dos mentiras NUEVAS del instrumento, registradas: la sonda estandar fuerza data-size sobre el nodo compuesto y SE PISA (su 0 es por construccion) - y los clamp() fluidos no son comparables sin declarar viewport. - Registro: 13 cierra E2 (diagnostico original conservado tachado - era exacto) y abre alert-dialog (mismo agujero; a el le toca la norma TAPADA por ser eje de anchura), error-summary con data-size que nadie lee, la escalera de fuente 3-sobre-5 que viola el 1:1 (E1, su carril), y la cita colgada de dialog/context.ts:9. Pendiente dicho: el parrafo de doctrina querria vivir tambien en reference.md (fuera del alcance liberado). - Gates: eidos 443+1 ajeno - check 0 atribuibles - docs-check 0/0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
2 months ago |
|
|
3bf7930baa |
fix(theming): el velo del sistema no muere por un atajo - y el pin de chronos sobra
Dos hechos de cascada, hermanos de la firma 55:
1. Las reglas del suelo de popover usaban el ATAJO `background:` - expande a
`background-image: none` y MATA el velo de hover del sistema
(archetypes) cuando el orden de carga cae del otro lado. La regla dura lo
prohibe por escrito ("hover is the system's"). Partido a
`background-color:`: 0 px sobre las 14 identidades del catalogo (68
lecturas reposo + 68 hover, todas a cero; `rules split=2` en las catorce
como anti-vacio; control negativo 5/4), y el velo SOBREVIVE al orden
invertido - verificado con experimento de cascada aislado.
2. El pin de `chronos.css:417` RETIRADO: sus cinco declaraciones eran copias
textuales de `[data-button]` - 20 combinaciones variant x size identicas
con y sin el (control negativo 0/20). La adjudicacion de 13 era FALSA:
al `+N more` el velo se lo mata `button.css:69`/`:88`, con pin o sin el.
`calendar-select.css:14` NO es pin (vivo en 3 de 4 tallas) - se queda.
- Guarda extendida (active-eidos-config.test.ts): el suelo declara
`background-color` y NUNCA el atajo - validada por 4 mutaciones (las dos
ultimas prueban la mitad NEGATIVA, anadidas porque 1-2 solas la dejaban
sin morder).
- Sondas popover 0/448 y chronos 0/36.832 - eidos 443+1 ajeno - check
identico byte a byte antes/despues - docs-check 0/0 x2 - lint 0 invalid.
- Registro: changelog 56 (la prueba citable es el barrido de catalogo) -
13: `background-image` RESUELTO y `transition` como RESIDUO VIVO con su
numero (suelo `background,border-color` vs arquetipo
`opacity,background-color`: hoy el border-color del hover SALTA en vez de
animarse) - fichas de chronos (7 filas stale corregidas, recuentos
contados contra fichero: 202->198, 50->47), calendar (su HALLAZGO ya
resuelto por 55, cerrado) y emoji-picker - 5 textos stale ANOTADOS sin
reescribir (cada medida fue correcta con la cascada de su dia), con dos
matices: en gradient-picker solo caduco la mitad base, y open-trigger-fg
gana ahora por ESPECIFICIDAD, no por orden.
- Fuera del registro del eje, por regla dura del autor: el material de
sitio/demo (la inversion de imports de /alpha) - ademas desactivado por
esta misma firma en la capa que importa.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2 months ago |
|
|
d5a27b87e7 |
fix(morfo)!: tags-input habla UN patron ARIA - layout grid, cierra F-1
El AX hablaba tres dialectos rotos a la vez (medido por CDP): dos listbox
anidados (las opciones eran hijas del Control; el Provider no tenia ninguna),
button DENTRO de option (rol hoja: el nombre se fundia - "svelte Eliminar
etiqueta" como una sola cosa) y un combobox sin aria-expanded/aria-controls
apuntando activedescendant a etiquetas commiteadas. F-1, adjudicado
2026-07-07; el registro de ayer era una re-deteccion parcial.
Estructura B (firmada): Control = grid de UNA fila - etiquetas = gridcell
(conservan el aria-selected -> stateRef de 2ce43db56; gridcell lo admite) -
el boton de borrar CONVIVE en la celda de su etiqueta ("a cell contains one
widget... link, button" - lo que lo prohibia era option, Children
Presentational) - el input en celda propia como TEXTBOX nativo (combobox
EXIGE controls/expanded y no hay popup) - el Provider pierde su listbox.
Dos partes privadas nuevas (Row, InputCell) con display:contents: grid solo
posee filas, row solo celdas.
- Teclado: la navegacion estaba MUERTA (ArrowLeft x2 avanzaba 0) y ahora
camina; el resalte mueve foco DOM - la CONDICION de retirar el
activedescendant (su destino debe ser descendiente y era hermano).
Tabulacion sigue en UNA parada.
- aria-orientation RETIRADO (no es propiedad de grid; Chrome no la expone,
medido): se conserva como comportamiento, no como atributo.
- Pixel CERO: sonda 2.496 valores por identidad de nodo, 0 diffs, geometria
al centesimo; capturas byte-identicas. CSS: 7 lineas display:contents.
- Gates: morfo 222/222 - soma tags-input - attr-audit con el techo APRETADO
1->0 - eidos 443+1 ajeno - morfo:check PASA - check 0 propios - docs 0/0.
- Registro: F-1 CERRADO (ficha de componente, nota fechada) - el item 12.5
del tono MOVIDO de 13 a 12 con sus dos cifras corregidas ((0,4,0); gana el
BLOQUE de archetypes) - abiertos: tag-group filas sin celdas (el
"precedente" refutado midiendo: CERO gridcell), search-field F-1, y la
regla del censo de citas APG - demo: 3 filas de su tabla a11y actualizadas
para no mentir sobre los roles nuevos.
- Trampa nueva anotada: `const state = Provider.create()` SOMBREA la runa
$state (compila y revienta en render); un error SSR no llega al navegador -
se caza navegando por el router desde otra pagina.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2 months ago |
|
|
466b24f34f |
feat(theming)!: el sobre de trigger de popover es un SUELO - tercera ley 55
El "baseline button envelope" que popover.css pinta a sus triggers vivia a (0,2,0) con hover a (0,5,0): le ganaba a las recetas de sus HUESPEDES (el chip de anadir reaccion de chat-message perdia 9/9 propiedades disputadas y salia cuadrado gris entre pildoras - SU receta lo pintaba en el mismo selector-lista y PERDIA), mataba la capa de estado del sistema en hover (chronos plain = caja gris) y dejaba el trigger de calendar en manos del orden de carga (14/16/14/14px medidos - la moneda al aire). El sobre baja a :where() - base y hover, con el :not(field-trigger) DENTRO (where anula especificidad, no matching). El suelo pinta lo que el huesped CALLA; la receta gana donde habla; la capa de estado compone otra vez. Tercera aplicacion de la ley firmada (12.9 planos - B'/53 paleta - y archetypes.css:9-21 ya lo decia para SU capa). Cambio de codigo: 2 lineas. Medido (gate de dos niveles, 76 instancias, 16 rutas, 4 estados): - No afectados: 3 field-trigger diff VACIO; los 66 desnudos ganan EXACTAMENTE los dos valores del SISTEMA que el sobre tapaba (velo de hover de archetypes + su transition). 167 nodos de referencia: 0. - Los 7 movers, valor a valor por CDP hacia lo que SU receta declara: el chip vuelve pildora (36->26px, r9999) - chronos recupera su plain y su hover - calendar mes/anio pasa a su ghost compuesto Y SE VUELVE DETERMINISTA (8 cargas en dos ordenes, mismo pixel; antes 2 de 6 caian del otro lado) - emoji/palabras/ntp a sus recetas (ntp revive 4 claves: 44->48/62). - Capturas antes/despues x8 revisadas por el supervisor (chip, chronos, calendar, emoji, gradient, popover generico, palabras, ntp). - Guarda 55 en active-eidos-config.test.ts validada por SEIS mutaciones (la sexta se anadio porque la primera pasada dejo pasar un verde falso; y el arnes mintio con -t sobre 0 tests - detector de cero-tests anadido). - vitest 35/36 (rojo ajeno skin-media-player) - check 0 atribuibles - docs-check 0/0 - eidos-lint popover/chat-message 0 invalid. Registrado en 13 y fichas: los parches-pin de chronos/calendar pasan a REVISABLES (ahora redundantes o semi) - el suelo comparte peldano (0,0,0) con archetypes.css (medido 16 cargas: archetypes cae despues y el resultado es identico, pero es un empate real sin verificar en produccion) - la dependencia sin registrar de palabras queda anotada junto a su regla (no tiene README de eidos). changelog 55 escrito (la guarda citaba una seccion que debia existir). CON ESTA, LA LISTA "Lo que espera TU FIRMA" DEL CONTINUE QUEDA VACIA. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
2 months ago |
|
|
1f8ce293bb |
fix(theming)!: avatar - el contrato dice la verdad: 4 claves, cero desviadas
Las ultimas CUATRO claves fuera de gramatica de las 4.558 publicas del catalogo, resueltas cada una por lo que ES (no eran cuatro iguales): - `badge-color-custom-contrast` -> `badge-fg-custom-contrast`: la unica TINTA real y alcanzable. Nombre derivado DE la gramatica D-TH.6 (la ranura se sustituye EN SU SITIO; `custom` no es interactivo ni rol, va detras) con el precedente firmado scrim-fg-over-dark - y es la salida literal del clasificador que consume R-5.3. Renombre a mano (el codemod ABORTA sobre la IIFE de avatar - deuda registrada en 13): value-preserving, verificado con sonda dirigida (la clave vieja movia antes y no despues; la nueva al reves). - `ring-color-custom` y `badge-color-custom` RETIRADAS del contrato publico: canales de valor INALCANZABLES (puerta data-*-custom y escritura inline nacen de la misma expresion - mentiras bajo R-5.4). Mecanismo: canal privado de envoltorio `--_avatar-*-color-custom` + respaldo currentColor (el patron de las 5 privadas-de-envoltorio del parque, 5/5 sin declaracion en receta), NO borrado (el CSS las lee) NI privada plana (cero precedente). Ley 8.bis re-aplicada: cero lectores fuera de avatar, re-barrido. - `group-carve-color` EXENTA en NAME_EXEMPT con razon medida: alimenta box-shadow (geometria del carve, no tinta; alcanza en 59 instancias) - `fg` seria gramatica correcta con semantica peor. Medido: sonda 7.4 0/576 - pixel visible IDENTICO (anillo ambar, insignia violeta, tinta white) e instancia imposible identica (currentColor preserva el default retirado) - Tokens 88 -> 86 EN VIVO con el nombre nuevo (captura revisada por el supervisor) - censo --names: DESVIADAS 0 EN 0 COMPONENTES (4.556 claves) - centinela exit 0 - lint 0 - docs-check 0/0 - vitest 442+1 ajeno - check 0 atribuibles. Hallazgo de instrumento NUEVO, adjudicado y registrado en 13: el chooser del centinela elige el valor por NOMBRE y no conoce `fg` MEDIAL (su prueba de tinta es `fg$`): las 5 claves que la propia D-TH.6 fabrica (badge-fg-custom- contrast, bubble-fg-in/-out, scrim-fg-over-dark/-light) reciben 1234px, invalido para color - y el veredicto depende de si el respaldo coincide por azar (bubble-fg-* leen vivas POR ACCIDENTE). Arreglarlo obliga a re-verificar el ledger - firma de instrumento aparte. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
2 months ago |
|
|
2ce43db563 |
fix(morfo)!: tags-input - aria-selected sigue al resalte, no a un literal
`v.literal('true')` era el UNICO aria-selected incondicional de los 18 morfos
que declaran el atributo: el AX tree entregaba DOS option selected:true dentro
de un listbox multiselectable:false (mentira de plataforma), archetypes.css
(0,4,0) clavaba el velo de estado EN REPOSO (la etiqueta vivia en su propio
hover: reposo y hover byte-identicos) y `--tags-input-item-fg` no habia
pintado nunca.
Ahora `v.stateRef('active')` - el estado que soma YA deriva de
highlightedIndex, registrado como fuente por parte (states: { active }).
Precedente en casa: tag-group/listbox/tabs. `severity: 'optional'` NO hace
falta (inerte: solo la leen los checks de data-*, verificado en compile.ts).
Medido (ejecutor E-tags, heredando y VERIFICANDO la edicion de un ejecutor
interrumpido - dos claims sin medir corregidos, uno de atribucion: el tono de
la activa lo enmascara [data-highlighted] (0,3,0), no este atributo):
- Sonda: 14 diffs / 2.504 valores, UNA propiedad (backgroundImage), las dos
etiquetas x 7 pases sin puntero - el velo saliendo del reposo. Hover: 0
diffs = la afordancia recuperada (reposo 224,58 / hover 212,10; antes
212,10 = 212,10). Capturas antes/despues revisadas por el supervisor.
- AX: reposo false,false - ArrowLeft false,TRUE - Escape false,false.
Exactamente una navegando, cero en reposo.
- Centinela 63/91 -> 71/91 (revive item-fg; medida directa oklch(0.2435) ->
rgb(1,2,3)), exit 0, 0 sin adjudicar, 0 STALE, ceguera-a-patrones validada
a mano (17 cubiertas, todas muertas).
- Gates: morfo 222/222 - soma tags-input 3/3 - eidos 442+1 ajeno - check 0
atribuibles - docs-check 0/0 - eidos-lint 0 invalid.
Quedan ABIERTOS y registrados en next-features 13 (sin decidir aqui): el
morfo declara apg:grid pero implementa listbox/option - Provider y Control
llevan ambos role=listbox anidados - la tinta de tono de la activa la
enmascara [data-highlighted] (12.5) - migracion a grid (B-b) como
continuacion. Y una observacion de soma al paso: ArrowLeft desde el input no
saca el foco (:381).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2 months ago |
|
|
df3a4d054b |
fix(theming): form cede el cromo de submit/reset al Button que componen
El bloque de accion de form.css vestia CUATRO nodos con las mismas 23 claves:
submit/reset (que COMPONEN el Button canonico - ahi muertas Y contradictorias:
declaraban un boton solido de tinta blanca mientras se pintaba surface verde,
discrepando en silencio desde siempre) y array-add/array-remove, <button>
PELADOS donde las 23 son su UNICO cromo y estan 23/23 VIVAS (medido montandolos
a la fuerza: la demo nunca los monta).
Ejecuta la doctrina YA FIRMADA que nombra a Form.Submit por su nombre
(component-guide.md:126-146, consumer pattern rule 5) - la opcion de escalar a
(0,2,0) queda descartada por escrito: si se quiere el submit solido, el camino
es <Form.Submit variant="solid">, no ganar la cascada.
- El bloque de accion apunta ya SOLO a los dos botones del array; mueren 4
reglas y se estrechan 5 grupos. Los 4 privados THM-2 de submit/reset fuera
(nadie los consumia): el diff del generado son EXACTAMENTE 14 lineas (su
suelo y su forward). Las 23 publicas SE QUEDAN.
- Ceder submit/reset: 0 px sobre 79.296 valores (16 escenarios, V1) + sonda
0/834 con CONTROL POSITIVO (el CSSOM vivo no contiene una sola regla de
submit/reset ni un --_form-palette-*). El cromo del array, intacto contra
los valores pre-firma; su eje de talla sigue llegando por herencia.
- Centinela 22/64 exit 0, identico conjunto: solo cambia la RAZON de las 23
("rama array que la demo no monta") - la anterior era falsa a medias (los
botones del array NO llevan data-button) y el "24" era un error triplicado
(ficha, README, ledger): son 23.
- CONTINUE: la firma del compuesto EJECUTADA; gradient-picker (36) y
emoji-picker (3) des-RANCIADOS - ejecutados el 2026-08-20/23, hoy 0
adjudicaciones por compuesto (verificado; ademas su mecanismo era OTRO:
especificidad de popover.css, no orden de emision).
- next-features 13: DOS expedientes nuevos destapados y NO ejecutados aqui:
los botones del array deben COMPONER el Button (soma+morfo, clase A-112,
y son perceptualmente mudos) - y el eje size de form NO llega a sus
acciones (<Form size="xs"> renderiza acciones md; solo sobrevive el
row-gap).
Verificacion: V1 (verificador independiente, informe recuperado de disco tras
interrupcion) + ejecutor con gates completos (vitest 442+1 ajeno - check 0
atribuibles - docs-check 0/0 - eidos-lint 0 invalid).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2 months ago |
|
|
2daa683fa4 |
fix(theming)!: file-upload pinta lo SUYO - muere el barrido de descendientes
`[data-file-upload] [data-disabled]` (0,2,0) vestia todo nodo disabled bajo el provider, HUESPEDES incluidos, y ganaba el empate por orden de import - el accidente que B' condena. Medido en la composicion documentada del composer: el textarea huesped recibia la atenuacion TRES veces (0.4^3 = 0.064, el placeholder casi ilegible) con el file-upload NI SIQUIERA disabled, y `--chat-composer-disabled-opacity` no alcanzaba nunca. - La mitad descendiente se sustituye por los CINCO selectores por parte (label, dropzone, trigger, item-remove, clear-trigger; el provider ya estaba). El morfo declara `data-disabled` exactamente en esas partes y soma lo estampa siempre junto al atributo de parte: el barrido era 100 % redundante hacia dentro - solo anadia alcance hacia fuera. - Unicidad re-censada HOY: 171 recetas, unica ocurrencia con `data-disabled`. - Medido: file-upload CERO ESTRICTO (4.608 valores x 8 estados + pase disabled propio 0/35); composer recupera EXACTAMENTE 6 valores (opacity y alpha de textarea/input, cursor x2) y nada mas - la excepcion a D-TH.5 firmada, con capturas antes/despues. - Centinela: composer 29 -> 30/33 (revive `disabled-opacity`; su excepcion EXACTA salio STALE por si sola - el reverso de la ceguera a patrones); file-upload 61/98, exit 0 ambos. - README del composer corregido: su adjudicacion "no se ve hasta que un tema mueva" era FALSA para el textarea (triple atenuacion en el tema default). - Registro: PLAN 8 entrada fechada - CONTINUE item 3 EJECUTADA - notas en las fichas de ambos. Aviso de instrumento (en el registro): la sonda sancionada es CIEGA a esta firma (sin paso disabled; su filtro del composer no ve [data-textarea]) - su cero vale como regresion, no como testigo; el gate se cumplio con instrumento dedicado, exacto y sin extras. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
2 months ago |
|
|
ffa45726fd |
feat(color)!: una palabra, un significado - primary/secondary son SIEMPRE jerarquia
La homonimia muere: `primary`/`secondary` significan JERARQUIA DE MARCA en el
catalogo ENTERO, tambien dentro de los seis primitivos de tinta (text, heading,
display, code, label, s-text). El paso de tinta del 82 % se llama `subtle` -
PROP y TOKEN, sin excepcion: el nombre es el contrato en el artefacto (la misma
ley que la FIRMA B' y la 12.9; se rechazo por escrito la via "solo el prop con
tabla de traduccion" - las excepciones legitimas son las FIRMADAS con razon,
no las inventadas al decidir para abaratar).
- Los seis CONTENT_INK, IDENTICOS: {subtle, muted, disabled, on-solid}; el
nivel-1 es el DEFAULT sin prop. `label` gana `on-solid` (cierra la
divergencia de familia registrada en
|
2 months ago |
|
|
e4fa616e5d |
docs(theming): registro post-B' - cinco hechos verificados entran al expediente
Pase de registro de lo que la firma B' descubrio y no arreglo (pre-existente, simetrico antes/despues). Seis claims de agentes -> verificacion adversarial independiente -> DOS murieron (label-inline era diseno firmado de la seccion 43; drag-drop refutado: su forward vive y alcanza) y UNO se fusiono (el color de `code` lo gana `[data-uix-docs] code` (0,1,1) - ES la firma pendiente 5.2 del harness, que se ENSANCHA de radio/padding a la tinta; medido por CDP, solo dos reglas declaran color). Entran en next-features 13 / CONTINUE: - El detector STALE del centinela es CIEGO a los patrones (filtra `k in ledger`, solo exactas): 207 claves revividas por B' y ni un aviso. Arreglo minimo anotado; clase re-verificar-ledger. - El guard no mide tono+estado a la vez (raiz de TONE_UNREACHED): tono solo en el paso estatico, hover sin tono, solo `toggle` declara eje de estado, switch/button sin entrada en COMPONENT_OVERRIDES (48). - Tres huecos de la sonda: el `open` de editable muere por CLIC sobre inputs ocultos (no por el localizador), button sin analogo de barrido de variantes, y NUEVE de las 33 escalas atadas a rol (purple slate indigo gray teal green orange red plum) - `plum` ES `loss`; 24 libres como reserva de sondeo. - Divergencia de familia: `label` es el unico primitivo de tinta sin el paso `on-solid` (tipo y runtime, auto-consistente); decision pendiente. Citas contrastadas contra el arbol (cuatro corregidas del verificador, incluida la deriva de +10 lineas del diff ajeno del sentinel). docs-check 0/0 sobre 815. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
2 months ago |
|
|
8244cb4a62 |
feat(theming)!: FIRMA B' - la cascada de paleta es una ESCALERA sin empates
suelo :where([data-{c}]) (0,0,0) < forward [data-{c}]:where([data-color],
[data-color-custom]) (0,1,0) < tono [data-{c}][data-color='X'] (0,2,0).
El orden de emision deja de decidir: la especificidad ES el contrato,
legible en el artefacto (doctrina hermana de la FIRMA 12.9).
- Emisor (render-css.ts): isPaletteSlotToken PARTE el bucket host - solo
las ranuras de paleta bajan al suelo, el chasis del componente queda a
(0,1,0). 49 suelos + 49 forwards reescritos + 0 pares viejos; bloques
por tono (112), capa compartida y gradient finish byte-identicos.
- Neutra en pixel, MEDIDO: ~297.000 valores computados antes/despues
(105.248 planos lotes A+B, 57.720 planos lote C, 134.464 con los tonos
ESTAMPADOS en las 49 unidades, incluidos 5 @active), 0 diffs reales.
Los 17 crudos, probados ruido por reproduccion sobre codigo identico.
- Guarda por MUTACION (active-eidos-config.test.ts): suelo con contenido,
forward de un peldano, par viejo ausente, tono sin envolver, particion
del host, cierre estructural (toda declaracion de paleta vive en un
peldano) - 6 mutaciones inyectadas, 6 mordidas. El contrato del forward
pasa de vigilar 2 recetas a 49 (privadas incluidas, multi-parte bien).
- Ledger: PALETTE_SUPERSEDED muere (describia el mundo viejo); 207 de sus
353 claves pasan a VIVAS y las 146 restantes quedan bajo PALETTE_FLOOR
(el tono-default estampado resuelve por el forward: quitar el atributo
ES hablar en silencio) o TONE_UNREACHED (ningun paso del guard estampa
tono Y hoverea), con razon medida. stepper y tag-group, barridos por
primera vez. El detector STALE es CIEGO a patrones: la retirada fue
manual y por estrechamiento, guiada por medida.
- Docs: changelog 53 - reference THM-2 - next-features 13 (RESUELTA) -
CONTINUE-theming.
Supervision: 4 agentes Opus en 5 fases (baseline plano + baseline
estampado, emisor, guarda, verificacion de parque completo, docs), con
refutacion del supervisor sobre censo, emisor y guarda.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2 months ago |
|
|
5d71d830e9 |
feat(theming)!: FIRMA §12.9 — el plano de profundidad es el SUELO, no el techo
El plano `data-depth` pinta el bundle de elevación (superficie · borde · sombra
· tipografía on-surface) y hasta hoy lo hacía a (0,1,0), la misma especificidad
que la receta del componente. La Decisión 8 daba por bueno ese empate porque
«las recetas cargan después de la fundación y ganan por ORDEN DE CASCADA».
ESA PREMISA ERA FALSA
La fundación la inyecta ActiveEidos en runtime como <style> gestionado, y las
recetas llegan como chunks code-split de Vite: a igual peso ganaba quien
cargara el último, y se midió AL REVÉS en dev que en producción (§13). No era
una decisión de diseño, era una moneda al aire — y la moneda cayó del lado del
plano.
LO QUE COSTABA, MEDIDO
Un toast `risk` y uno `fulfill` vestían la MISMA TARJETA GRIS: los seis tonos
idénticos y la franja de acento —el rasgo que identifica la intención de un
vistazo— reducida a 0,67 px de gris neutro, porque el atajo `border` del plano
pisaba el longhand `border-inline-start` en los cuatro lados. Las TRES variantes
de tooltip computaban lo mismo: `outline` indistinguible de `solid`, `ghost` un
backdrop-filter invisible tras una superficie opaca. Y ~35 claves públicas
quedaban adjudicadas como mudas en cinco componentes, con tres recetas que
habían RETIRADO su tipografía por esto.
LA REGLA
La regla de apariencia del plano se emite envuelta en `:where(...)` —
especificidad CERO. La receta gana donde el componente HABLA, en cualquier
orden de carga; el plano sigue pintando todo lo que el componente CALLA, que es
exactamente lo que significa «baseline». Vale igual para un plano que añada un
tema (jaula abierta).
EL FROST NO BAJA, Y ES DELIBERADO
`[data-depth='{plane}'][data-frost]` conserva sus (0,2,0). El baseline es un
suelo que la receta puede pisar; el frost es una petición explícita por
elemento —alguien escribió `data-frost`— y honrarla significa ganarle al fondo
propio del componente. Mismo atributo, intención opuesta: queda comentado en el
emisor para que nadie los «armonice», y el guard lo fija por los dos lados.
QUÉ MUEVE DE PÍXEL, ENTERO
De 19 adoptantes, DIECISÉIS con diff CERO sobre ~49.000 valores computados. Los
tres que se mueven son la firma haciendo su trabajo:
- toast: 35 diffs (7 fondos + 7 bordes de tono + 21 anchuras). Cuatro tonos
medidos en la demo real: 4 de 4 DISTINTOS donde antes 3 de 3 eran idénticos,
y la franja de acento pasa de 0,67 px de gris a 3 px del color de la
intención.
- tooltip: sus tres variantes vuelven a distinguirse — solid opaco con sombra,
outline transparente con borde, ghost translúcido al 70 %.
- popover, tooltip y link-preview: `line-height` de 1.25 (el `--leading-ui` del
plano) al que cada receta pide. Es EXACTAMENTE la decisión que la receta de
link-preview tenía escrita desde el 2026-08-21: «se quedan declaradas A
PROPÓSITO; retirarlas arreglaría el empate a favor del plano — una decisión
de píxel que pertenece a la firma pendiente de §12.9».
`font-family` no se movió en ninguno: las recetas piden el mismo
`--style-label-font-family` que el plano pinta, así que la seguridad
tipográfica del portal (Decisión 8) queda intacta.
Refutada una hipótesis propia: temía que el atajo `background` del plano
estuviera matando el velo de hover del sistema y que bajarlo lo resucitara
moviendo píxel. `backgroundImage` no cambia en ninguno de los 19 — el velo vive
en los ítems, no en la superficie.
EL LEDGER
17 claves salieron STALE solas y se retiran: toast (3), tooltip (5),
float-panel (5), link-preview (2), popover (2). Los cinco vuelven verdes —
toast pasa de 51/85 a 72/85. El ledger sigue en 87 bloques, sin duplicados, y
parsea.
DOS VECES QUE EL INSTRUMENTO MINTIÓ
La sonda compartida mide UN nodo en dialog, drawer, popover, tooltip,
context-menu, dropdown-menu y link-preview: nunca abre la superficie, que es
justo donde el plano pinta, así que sus «0 diffs» no probaban nada. La medición
buena reproduce el «antes» EN RUNTIME, inyectando la regla vieja a (0,1,0) al
final del head en vez de revertir el fichero — entra como
`scripts/__plane-open.mjs`.
Y el primer barrido del ledger dio 87 de 87 rojos: «todos fallan igual» es la
firma del instrumento, y era la misma trampa del CR de Python en Windows que ya
está registrada. Re-corrido con la lista limpia.
EL BARRIDO DEL LEDGER ENTERO
87 de 87 componentes con entrada en el ledger, re-corridos tras el flip: cero
NO EFFECT sin adjudicar, cero STALE, cero errores. El cambio es global y se
verificó globalmente.
GUARDS
vitest src/uix/eidos 439/440 (el rojo conocido skin-media-player) ·
active-eidos-config 75/75 · npm run check COMPLETED con los 72 errores
preexistentes de la rama y ninguno en ficheros de este cambio · rtl:check 0 ·
docs:check 0 · eidos-lint 0 invalid en los cinco tocados · capturas de las tres
superficies que se mueven.
Un test hermano afirmaba el selector desnudo para un plano añadido por un tema:
ahora afirma `:where()`, porque un plano de tema es un suelo igual que los
cinco de fábrica.
Doctrina en docs/theming/changelog.md §29 (junto a la Decisión 8 que corrige),
cierre del expediente en next-features §13 y handoff al día.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2 months ago |
|
|
d4a83cca68 |
docs(theming): la COLA A queda CERRADA — y §12.9 pasa a tener coste de producto
scroll-area y slider al 100 %, tabs cerrado en 97 %, toast al 100 %. Global 68 %, 45 componentes al 100 %. Los cuatro cerraron SIN acuñar una sola clave: a los cuatro les quedaba un literal y en los cuatro era identidad. Firmar un literal y cerrar es una respuesta tan válida como acuñar. LO QUE MÁS PESA, RE-MEDIDO EN LA SUPERVISIÓN Un toast risk y uno fulfill visten la misma tarjeta gris. Disparados los tres tonos en la demo real con transiciones y animaciones congeladas, risk, fulfill y affirm computan idénticos: fondo, borde, franja de acento de 0,67 px y sombra. La tarjeta lleva data-intent Y data-depth=overlay; --toast-risk-surface en :root no la mueve y --depth-overlay-border la repinta. La intención llega al DOM y muere en la cascada, 21 claves. Es la primera vez que §12.9 tiene coste de PRODUCTO y no sólo de contrato, así que sube el precio de dejarla sin firmar. Y queda anotada la trampa de medirlo: el tono viaja en data-intent, no en data-color — una sonda que lea data-color lo encuentra null y diagnostica «el tono no llega», que es un defecto distinto y manda la firma por el camino equivocado. LA LEY QUE DEJARON LOS OTROS DOS Antes de retirar una clave, mira quién la lee: scroll-area.auto-max-block leía muerta en su propia demo y la consumen cinco recetas ajenas; slider.min-block-size la fija media-player. Retirarlas habría roto seis componentes sin que un guard se pusiera rojo. Ya es el paso 8.bis de §7.3. Queda del eje: cero de cola A, tres de deuda B (cada uno por su razón), ninguna pestaña Tokens pendiente, y siete cosas esperando tu firma. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
2 months ago |
|
|
fde65af7ea |
docs(theming): el registro §8 recoge tabs y toast, con su sha — y la cola A CIERRA
Los dos commits de esta sesión, con sus cifras y sus artefactos:
- `tabs` 96 % → 97 % CERRADO (`300153f9f`) — 79 claves, ninguna acuñada,
centinela 70/79 con 9 adjudicadas.
- `toast` 98 % → 100 % (`b8eccc1c4`) — 85 claves, ninguna acuñada, centinela
51/85 con 34 adjudicadas.
Y con ellos la Cola A queda CERRADA: los cuatro (`scroll-area`, `slider`,
`tabs`, `toast`) cerraron **sin acuñar una sola clave**. Sus contratos ya
estaban enteros y lo que quedaba fuera eran literales-identidad y, en `tabs`,
el canal de VALOR de soma. Cuando el número no se mueve porque no debe, eso ES
el resultado — y así está escrito en el handoff.
Lo que enseñaron los dos últimos, para el que siga:
- §12.9 en una tarjeta PORTALADA se lleva la TARJETA ENTERA, no sólo la
tipografía — 21 claves de `toast`, y con coste de producto: un toast `risk`
y uno `fulfill` visten la misma tarjeta gris. Medido, adjudicado con
`PLANE_SUPERSEDED` y registrado en next-features §12; sin firma no se toca.
- La misma clave puede mentir en reposo y decir la verdad en animación: los
`{tono}-accent` alcanzan bajo `[data-loading]`, donde el `@keyframes` del
pulso gana a toda declaración normal.
- Poner `openMarker` puede EMPEORAR la medición cuando la superficie se
auto-descarta: tres corridas del guard discreparon sobre código idéntico.
- El indicador de `tabs` es canal de valor: `MeasuredIndicator` escribe su rect
en cada movimiento, y un público encima sería un knob que rompe el
deslizamiento al fijarse.
Guard: `docs:check` 0 · prettier limpio sobre el contenido normalizado a LF.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2 months ago |
|
|
b8eccc1c4f |
uix(toast): temable — 98 % → 100 %, y el plano se lleva la TARJETA ENTERA
El contrato ya tenía sus 85 claves y `global` era CERO: no se acuña ninguna.
Lo único fuera de alcance era un literal, y era identidad.
Lo que entra:
- `opacity: 1` de la tarjeta firmado con su anotación `/* literal: */`
(recipe-contract §3): es el polo EN REPOSO del par abierto/cerrado, y el
que lleva tokens es el otro (`closed-offset`, `closed-scale`). «Presente
del todo» no tiene un segundo valor que sostener. 98 % → 100 %.
- Guard R-5.4: entrada nueva en `COMPONENT_OVERRIDES` que dispara la tarjeta
con el botón del demo — y que DELIBERADAMENTE no pone `openMarker`. Una
tarjeta se auto-descarta a los 5 s, así que «¿ya está abierta?» no tiene
respuesta útil: con `openMarker` tres corridas sobre código idéntico
discreparon en QUÉ token leía muerto. Sin él, el guard cae al marcador por
defecto (una parte que este componente no tiene) y dispara una tarjeta
nueva antes de CADA token: **51/85 en tres corridas seguidas**, determinista.
- Ledger: 34 adjudicaciones, ninguna retirada, todas MEDIDAS.
- La sonda aprende a disparar el toast (`DEMO_VARIANTS`): medía UN nodo (el
viewport) porque un toast no EXISTE hasta que algo lo lanza. Ahora 8.
EL HALLAZGO — §12.9 con una cara nueva y con coste de PRODUCTO:
`toast-item.svelte` sella `data-depth='overlay'`, y el plano declara
`background`, el ATAJO `border` y `box-shadow` con la misma especificidad
(0,1,0) y más tarde. Medido sobre la tarjeta real con transiciones congeladas:
escribir `--toast-{tono}-surface` / `-border`, `--toast-provider-border-width`,
`--toast-accent-width` o `--toast-provider-shadow` no mueve NADA; escribir
`--depth-overlay-surface` / `-border` / `-shadow` y `--border-width` en la
misma raíz lo repinta todo. Son 21 claves de 85, y a diferencia de `tooltip`
esto se VE: un toast `risk` y uno `fulfill` visten la misma tarjeta gris, y la
franja de acento —un `border-inline-start` que el atajo posterior pisa en los
cuatro lados— no aparece nunca en reposo.
Matiz que sólo aparece midiendo: los seis `{tono}-accent` NO están muertos.
Bajo `[data-loading]` la regla del pulso es (0,2,0) y su `@keyframes` gana a
toda declaración normal — 100 fotogramas del pulso real: sin escribir, el
color interpolado corre en oklab L 0.5032..0.8514; con el token en rgb(1,2,3),
0.0823..0.5032. La misma clave miente en reposo y dice la verdad en animación.
§12.9 sigue SIN FIRMAR, así que las 21 se ADJUDICAN con `PLANE_SUPERSEDED` y
la incidencia se registra en `next-features.md` §12. No se toca desde este eje.
Las 13 restantes: la pareja de transición (el guard congela `transition`),
`closed-offset` / `closed-scale` (estado de salida + `transform`, que el guard
no fotografía), los tres del anillo de foco de la acción (el guard hace
`blur`), los cinco `{tono}-action-hover-bg` (el guard estampa el tono en su
pasada estática y no en la de hover) y `provider-max-width`, cuyo centinela de
1234px se capa contra el `min(100%, …)` — medido desde el otro lado, 120px
encoge la tarjeta de 420 a 280.
Censo: 98 % → 100 % (45 knobs · 45 públicos · 0 globales · 0 privados ·
1 excepción firmada). Global 68 %, al 100 % 42 → 45. Sin cambios en
`recipes/base.ts` ni en `generated/base.css`.
Diff de computed: **0 diffs sobre 1.760 valores en 7 estados** (8 nodos en
reposo, 7 en hover). Capturas 2× de la tarjeta byte a byte idénticas — y van
por un script propio, porque su viewport es `position: fixed` y cae fuera del
recorte del escenario que usa `__shot`.
Más README con su sección «Talla y tema», pestaña `Tokens` en la demo (85
claves, verificada en el navegador) y ficha con veredicto §5.
Guards: centinela 51/85 verde (exit 0, sin STALE) · `component-audit --only
toast` PASS · `eidos-lint toast` 0 invalid (24 morfo-backed, 6 eidos-only) ·
`vitest run src/uix/eidos` 35/36 (el rojo conocido es `skin-media-player`) ·
`rtl:check` 0 · `docs:check` 0 · `check` COMPLETED sin un solo error en
ficheros de toast · prettier limpio sobre el contenido normalizado a LF.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2 months ago |
|
|
868bd235bf |
docs(theming): el protocolo aprende a mirar QUIÉN LEE una clave antes de retirarla
R-5.4 dice que un token que no mueve nada es un token que miente, y esta pasada ha retirado varias con razón: file-upload.button-bg no pintaba en ninguno de sus tres botones, avatar.group-max no lo leía nadie, editable.control-border no la consumía ninguna regla. Pero leer muerto en SU demo no es leer muerto en el CATÁLOGO, y las dos sesiones de hoy lo enseñaron a la vez. scroll-area.auto-max-block salía silenciosa en su propia página y la consumen cinco recetas ajenas —combobox, command, gradient-picker, select y palabras—. slider.min-block-size sólo la lee la orientación vertical, que su demo no monta, y es justo la que media-player fija para su volumen. Retirar cualquiera de las dos habría roto seis componentes sin que un solo guard se pusiera rojo, porque ninguno mide el catálogo entero. Entra como paso 8.bis de §7.3, con el comando: un grep sobre src/uix/eidos/components/ antes de retirar nada. Si aparece alguien más, la clave no se retira: se adjudica con esa razón. Las dos sesiones lo hicieron por criterio propio, sin que el protocolo lo pidiera. Ahora lo pide. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
2 months ago |
|
|
999481e08c |
docs(theming): el registro §8 recoge scroll-area y slider, con su sha
Los dos cierran la cola A por arriba y los dos cierran **sin acuñar una sola clave**: llegaban con `global` y `private` a cero y un único literal cada uno, que se firma como identidad (`opacity: 1` de la barra visible · `inline-size: 100%` del rail horizontal). Diez adjudicaciones entre los dos, todas medidas. - `scroll-area` 94 % → 100 % (`3282ef978`) — la clave que el guard leía muerta (`auto-max-block`) es la que CINCO componentes escriben sobre su propio ScrollArea. - `slider` 97 % → 100 % (`4d3ca2fd8`) — con un solo valor el tick ACTIVO no existe: `data-active` es una relación con el rango, no un estado del tick. El registro va aparte del commit del componente porque un commit no puede contener su propio sha, y el marcador `(COMMIT)` ya costó trece entradas sin resolver. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
2 months ago |