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 }
2260 Commits (2c0fca431989ccec6955a582a9f5b0f788de19bd)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
2c0fca4319 |
feat(morfo): 28 morfos declaran su política de foco — la especie, por escrito
9 trap (dialog, drawer, alert-dialog, context-menu, dropdown-menu, menu-dial, onion-menu, float-panel, popover) y 19 roving (toolbar, menubar, tabs, listbox, radio-group, stepper, tag-group, tags-input, toggle-group, carousel, drag-drop, tree-view, tree-grid, grid-list, chronos, calendar, range-calendar, month-grid, year-grid). Actas dentro de cada declaración; las que corrigen mentiras: - popover: trap FALSE — declaraba true desde hacía meses con cero lectores; la verdad embarcada manda. - radio-group: orientation 'both' por APG — su propio keyboard[] declaraba las 4 flechas; lo embarcado (2 flechas) era la deriva. El provider pasa both=true al ejecutor. - calendarios ×4 (calendar, range-calendar, month-grid, year-grid): grid + executor.custom firmado — roving-tabindex REAL medido en sus providers (focused ? 0 : -1), 2D que el primitivo 1D no expresa. - grids/árboles (tree-grid, grid-list, chronos, carousel, drag-drop, tree-view): custom firmado con su razón. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
f491bc6be0 |
feat(morfo)!: MorfoFocus es una unión discriminada — la declaración nombra el MECANISMO
MorfoFocus = MorfoFocusTrap | MorfoFocusRoving (discriminada por `kind`).
La forma única antigua ({initial, trap, return, restore}) solo sabía hablar
de overlays y no tenía ejecutor: el censo midió 21+ componentes con foco
contra 9 declaraciones, con la familia roving (14) estructuralmente muda.
- trap: familia overlay; la declaración es el DEFAULT DE ESPECIE y la prop
per-instancia gana (patrón dir).
- roving: composite WAI-ARIA (un solo tab-stop; parts es LISTA porque
toolbar rueda por varias); `orientation:'grid'` EXIGE executor.custom
firmado (esquema lanza) — el primitivo compartido es 1D y forzar 2D a 1D
sería mentir.
- schema.ts: invariantes nuevos (partRefs del trap; parts ⊆ kebabs y no
vacío; custom sin razón lanza).
- index.ts exporta MorfoFocusTrap (lo consume FocusScope); el export de
errores viaja colapsado por prettier (contenido idéntico).
Eje focus-first (docs/process/PLAN-focus-first.md), nacido de la inversión
del autor: el error no era el campo sin lectores, era la flota sin declarar.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
53810cb5ec |
refactor(eidos): item 2 - los slots de forma de la capa deslizante llevan el _ del alias
Firma (a) del autor: --indicator-duration/-ease eran el ALIAS de la capa (la especie de --_indicator-x, opcionales-con-fallback), no un pomo de tema - la ortografia bare prometia una superficie que la cascada negaba. Flip a --_indicator-{duration,ease} (1 escritor radio-group.css alimentando desde sus claves de CONTRATO segmented-transition-*, 1 lector lib/sliding-indicator.css); reparto de propiedad escrito: la capa posee QUE propiedades deslizan (y su colapso reduced-motion), el anfitrion A QUE VELOCIDAD via contrato. Contrafactico MEDIDO pre-flip: bare en :root a 9s = 0.18s intacto (no se retira superficie); post 4/4: pixel identico, bare inerte y vacio en el pill, contrato alcanza (7s), alias en :root inerte. Comentarios themeable-so-bare reescritos; prosa del sentinel al nombre vivo (clave intacta). Lint 0 invalid, reach-floor 5/5, censo neutro.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
1 month ago |
|
|
2d3b3fc775 |
docs(soma): paridad de README del item 0 - data-ready en Indicator de tabs y SelectionIndicator de radio-group (fila de parte que faltaba incluida); hallazgo del corpus P0-docs (vicen-41)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
3eb819e7d5 |
docs(uix): tanda 2 del contraste con el corpus — el modelo de los capitulos alcanza a la tuberia unica
La lectura completa del corpus (6 lectores Opus, 6/6 censos, ~4,5M tokens) destapo lo que la tanda 1 no vio, y esta tanda lo cierra: - El modelo «Effects sync attrs» — repetido VERBATIM en cuatro capitulos (morfo, soma-architecture, overview, active-architecture), en sus tablas de piezas, en los cuatro pasos de trigger y en las dos frases-resumen — muere: la pieza es la bolsa de render; ADom aplica solo el prewrite. - morfo.md: partProps re-descrito (bolsa completa), la cadena causal de commits, y las filas de la tabla de ejecutores (data/aria/role → bolsa). - coincident: los DOS docstrings que ensenaban «in-flight» (types.ts y morfo.md) se alinean con la equivalencia FIRMADA de sema.md §slider («emit-then-handler, like pre; declared indivisible») — el hallazgo del informe queda refutado como defecto de runtime y reducido a esto. - glossary: el kind fantasma `internal` (la clase exacta que docs-check:422 mata y su regex no ve en tablas markdown) → `public|private|virtual` real. - El gate entra en la doctrina: check:gate/gate en el loop de verificacion (testing-and-tooling y getting-started), eidos:lint como script npm en su fila, y la tabla de Commands de morfo.md. - Mi propia sobreafirmacion de ayer, calificada: el test SSR es un CANARIO de dos representantes sobre mecanismo compartido, no un censo — el censo por provider queda encolado (P1). morfo:check en getting-started declara su alcance real (data-*; role/aria sin validador DOM). - Supervivientes de C2c: el assert-vacio de cropper (la clase «guard sobre VACIO pasa») retirado con acta; sticky/README deja de citar syncAttrs. - gradient-builder/README: fila data-kind del Track + acotacion mesh v1. - Handoff: DOS fe de erratas — «nunca los vio nadie» era falso (vistos y reducidos 12→3 en cb554ae2e; lo que faltaba era la puerta) y la ley del escritor imperativo gana su excepcion abierta (textarea autosize, con su cierre correcto encolado). Verificacion: docs:check 0/817 · cropper 19/19 · morfo schema+compile 133/133. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
8ca595a179 |
test(gate): presupuesto explicito por-test para el escaner soma-attr-audit
Enmienda bajo la politica firmada (
|
1 month ago |
|
|
3f87773326 |
fix(soma): P1 — Soma.runtime() inyecta el logger; el diagnostico del runtime resucita
El hallazgo mayor del informe (§soma): assert() de contrato, warnings de anclaje (assertAnchor), el aviso SO2 de semantic ignorado y el catch del trigger() fire-and-forget eran no-ops silenciosos en los 115 runtimes — el runtime aceptaba logger?: Logger y nadie lo inyectaba. La raiz siempre tiene uno (EngineLogger extends Logger, core fijo tambien en attach), asi que la linea va en la unica fabrica. Los cuatro sitios son solo-log: ningun flujo cambia; assertContract ya se auto-veta en PROD. Verificacion: check:gate OK - runtime/contracts/ssr 98/98 - suite completa 5060/5060 - console de tabs y menubar limpio en el server vivo (transporte console por defecto: el silencio es ausencia de violaciones, no mudez). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
6c0bc69284 |
docs(theming): fe de erratas de c494fb395 - los tres hunks de soma-architecture eran de vicen-41 (P0-docs, 70c01870a), no de vicen-42
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
70c01870a0 |
docs(uix): la doctrina alcanza a la bolsa única — el corpus deja de enseñar la API muerta
La clase exacta que la auditoría flagueó (doc↔código), producida esta vez por NUESTROS propios cambios de P0 fase C y sin corregir hasta ahora: - component-guide §«two sanctioned ways»: reescrita a UNA vía (la bolsa .props resuelve el contrato entero; extras solo lo que el morfo no puede expresar; valores CRUDOS; la inversa «morfo sin value ⇒ soma escribe»). Los 4 snippets con syncAttrs: true, limpiados. - soma-architecture: partProps re-descrito como LA bolsa (identidad + contrato completo, SSR incluido); el párrafo del flag sustituido por «el único escritor imperativo es el prewrite»; snippet limpiado. - soma.md: snippet de accordion sin el flag. - morfo.md §naming: el «(SSR included)» dejó de ser contraste — desde la tubería única TODO plan viaja en la bolsa; lo que distingue a los naming es la PRECEDENCIA (consumer-first via mergeProps). - testing-and-tooling: la postura SSR gana el canario ssr-contract.test, y nace «The gate» (check:gate + ledger menguante, gate, hook — los instrumentos de fase B no estaban documentados). - CLAUDE.md: el paso 4 de trigger ya no dice «effect-driven» (prettier normalizó de paso el fichero entero — solo whitespace, contenido intacto, declarado aquí para que el diff ancho no sea silencioso). Lo histórico (changelog, old-deprecated, audit de julio, process/) se queda como historia. Verificación: docs:check 0 errores sobre 817 docs; cero menciones normativas de la API muerta fuera de referencias históricas. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
c494fb3952 |
refactor(soma)!: §15 — la geometría del posicionador es canal del ANFITRIÓN
Firma A del autor (§14 literal, cuarta aplicación de «la capa es la pluma,
no la dueña»): FloatingContentOpts gana `component` (kebab del morfo, nunca
literal — 11 hilos de creación en 9 anfitriones) y las medidas por instancia
del posicionador aterrizan como `--_{host}-floating-{transform-origin,
available-width,available-height,anchor-width,anchor-height}`. El sexto
nombre que el expediente no contaba (`--floating-native-offset`, rama
nativa) queda canal INTERNO de capa (`--_floating-native-offset`: lo escribe
la capa en su propio wrapper, lo leen solo sus reglas foundation). El lector
COMPARTIDO (preset scale-fade de motion) lee el alias neutro
`--_floating-transform-origin` que cada receta anfitriona declara desde su
canal — cableado sliding-indicator, 9 declaraciones. getFloatingContentCSSVars
(export muerto, next-features §13.ii) MUERE con la firma.
Matiz que la ejecución destapó: el content de MENUBAR compone DropdownMenu —
su canal es --_dropdown-menu-floating-* y el alias de menubar se acota al
PANEL (el canal sigue al componente que POSEE la composición flotante);
split-button y palabras leen el canal ajeno de su composición en el punto de
composición, anotado en cada sitio.
Verificado: suites 96+60+78 en verde - eidos-lint x10 con 0 invalid -
reach-floor 5/5 (ledger 0 NEW / 0 STALE) - component:audit 162 PASS / 4
NEEDS-WORK idéntico - check 0 atribuibles POR FICHERO - dinámica CDP 9/9
anfitriones: canal vivo con px por instancia, los nombres VIEJOS computan
VACÍO en todos, positivo exacto (tooltip max-block-size 525.033px == canal
525.0326px; combobox ídem; panel de menubar anchor-width 886px = la barra;
sidebar popout ENGANCHADO 720px/35px), negativo fijando los viejos en :root
= nada se mueve. Trampa reconfirmada: el popout SIN ANCLAR da undefinedpx —
comprobar que la superficie estaba abierta.
Viaja con atribución declarada (acuerdo por canal con la sesión P0
vicen-42, precedente
|
1 month ago |
|
|
7730f033fa |
docs(process): handoff P0 al dia — 8 guards adjudicados, politica de flakies firmada, hook armado
Items 1 y 2 del handoff ejecutados ( |
1 month ago |
|
|
d09c4919cc |
test(gate): politica de flakies firmada — presupuestos explicitos en el proyecto server
Los 4 flaky del handoff eran UNA clase: los defaults de vitest (5s test / 10s hook, no configurados en ningun sitio) midiendo el coste de transform/import bajo carga paralela (5210s agregados vs ~1s en solitario, medido), no la lentitud del test. El rojo de orca era el hook beforeEach muriendo en un await import a los 10s; cookie-adapter no tiene ni un timer. testTimeout/hookTimeout 30_000 con acta en vite.config.ts: un assert falso sigue cayendo al instante y los candados anti-cuelgue conservan sus 5s explicitos (component-guide A36). Con esto se arma el hook pre-push. Hallazgo residual (clase NUEVA, adjudicacion aparte): gesture.test.ts rotate detent es un assert sensible a carga (90 vs 270 — projectAngle come velocidad de timestamps reales); verde x2 en solitario. Exactamente la clase que retry:1 habria enmascarado. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
4610781381 |
fix(uix): los 8 guards historicos de contracts.test, adjudicados — el gate respira verde
Primera tarea del handoff P0 ( |
1 month ago |
|
|
860ad2a911 |
docs(theming): item 0 ejecutado - data-ready es contrato (1cb07c1e1), acta en el handoff; header-z objetado y revertido, el peldano espera firma
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
1cb07c1e15 |
refactor(morfo): data-ready es contrato — los morfos lo declaran y la bolsa lo emite
Item 0 del handoff theming (firma ii del autor, 2026-08-27): el estampado manual de data-ready muere en los dos providers; la parte indicadora de tabs y la selection-indicator de radio-group declaran el estado 'ready' (stateRef, presence, severity optional) y el render bag lo emite desde la fuente registrada (() => indicator.ready). ready no es prop: es un hecho de runtime de la instancia — la misma especie que checked o active. La puerta anti-flash (tabs.css:329, sliding-indicator.css:66) queda declarada donde el guard la exige; 'data-ready' sale de EIDOS_ONLY_ATTRS con acta en el propio fichero (ya no es eidos-only: es contrato). Verificado: guard "hardcoded Soma component data attrs" sin los 2 rojos de este eje - morfo 16/16 (222 tests) - suites tabs/radio-group + visual-attrs 3/3 - eidos-lint: [data-tabs-indicator]:not([data-ready]) pasa a morfo-backed, 0 invalid en ambos - dinamica CDP: tabs ready="" opacity 1 y desliza (translate 0 -> 103.9px, inline-size 99.9 -> 75.8); radio-group segmented ready="" y el pill desliza; control negativo: pane oculto (rAF congelado) = sin medida, sin attr, opacity 0 — la puerta anti-flash aguanta. Viajan con atribucion declarada (acuerdo por canal con la sesion P0 vicen-42): las altas de data-aura-status-label/detail y data-waveform-played/remaining en scripts/eidos-only-attrs.ts son suyas (sus guards de contracts.test); su commit sigue a este por dependencia (su guard consume el registro y necesita estas declaraciones en el arbol). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
43bb676d48 |
docs(process): fe de erratas del handoff P0 — la proveniencia de data-ready
El eje theming la midió (`git show`): los dos hand-writes de `data-ready` los introdujo `76f18a5e8` (cuyo mensaje ya avisaba del punto ciego del guard), no `8ac23047f`. Quedan aceptados en su cola como item 0 con la adjudicación pre-masticada: contrato real (tabs.css:329 + sliding-indicator.css, puerta anti-flash) → declarar en ambos morfos. Error con alcance, jamás repudio. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
1 month ago |
|
|
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 |