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 }
14 Commits (468a9d1134d697546f1b36231d6773d6324a5faa)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
035a748450 |
feat(sema)!: la señal precede al commit — emit() devuelve {id, settled} síncrono, el hold no bloquea a nadie, y el motor enacta la reducción 'state' (D-full + sema §3.9)
D-full. `EngineSemantic.emit(signal)` deja de ser `Promise<string>` que resolvía
tras el hold y pasa a devolver SÍNCRONAMENTE `EmitHandle { id, settled }`: el id
se acuña sin await, la proyección sigue siendo síncrona en `replace`, y `settled`
cubre cola + proyección + despacho + hold + expresión + limpieza (la limpieza
ocurre ANTES de resolver). El runtime de soma, en `pre`/`coincident`, proyecta y
despacha ANTES del handler en el mismo tick (ya no espera el hold); en `post`,
handler → tick() → emit. `TriggerResult.settled` siempre presente. La a11y del
runtime (announce / foco) corre tras el despacho, no tras el hold. El modelo es
el de la plataforma (`element.animate()` → `Animation.finished`): el estado
cambia en el instante de la acción y la expresión corre en su propio reloj sobre
un nodo que retiene Presence. `pre`/`post`/`coincident` describen el ORDEN entre
proyección y mutación, nunca una espera; `coincident` pasa a ser literalmente lo
que declara.
Medido en Chrome real (servidor propio, misma sonda antes/después; Escape →
`data-state=closed`): dialog 258.6 → 9.1 ms · drawer 286.6 → 9.1 ·
popover 1757.8 → 8.5 · float-panel 1807.8 → 49.7 (n=1, pane oculto). Toggle con
`regime: 'queue'` conserva su forma (contact 20 · estado 28 · commit encolado 156). En los
cuatro el sello `emerge-close` se proyecta ANTES del cambio de estado y
`data-ending-style` aparece (Presence). El «hasta 1,5 s» del informe de auditoría
era real: el tope de `awaitExpression` se pagaba ante cualquier animación viva en
el target (popover, float-panel).
Condición 1 (censo, fase 0): 260 eventos; 39 `pre` + 21 `coincident` (0 sin
`sequence`). Solo 14 tienen handler registrado (los únicos donde D-full adelanta
la mutación; cifra del adversarial, el constructor contó 12); los otros 46 ya mutaban el estado en el mismo tick que un `void
trigger` (sidebar.css:363-375 y tooltip-provider:272 lo tenían escrito con
medición). Los 6 que desmontan (4 overlays + toast + tooltip) tienen Presence.
CERO migraciones necesarias. La regla transversal `[data-event^='emerge-close']
{ animation: dismiss-fade }` (base.css) existe en LETRA sobre los cuatro overlays,
pero el preset de Presence gana la cascada en todo instante (medido con
getComputedStyle): el refutador tenía razón en EFECTO.
Condición 2 (carrera nueva del id síncrono): `clear(id)` / `clearTarget` honran
ocurrencias EN VUELO (`inFlight` + `pendingClears`): la ocurrencia no se registra
como persistente al terminar y limpia como transitoria; `clear` devuelve true.
Reproducida en test (hold corriendo ⇒ tras `settled`, sin proyección residual y
`active` vacío). `dispose()` vacía ambas.
SO4 re-firmado: un target ausente NUNCA salta el handler ni lanza en ninguna
secuencia — se omite prewrite+emit, se reporta por logger con
`SomaRuntimeTargetError` como payload, y el handler corre («sema es ornamental;
una acción del usuario nunca se pierde por un adorno»).
sema §3.9. La política perceptual `'state'` bajo reduce pasa al MOTOR:
`ReducedMotionFallback` vive en sema (morfo lo importa), la señal lleva
`a11y.reducedMotionFallback` (cualquier valor declarado) y el motor, con
`motion.get() === 'reduce'` y `'state'`, devuelve el mismo retorno silenciado que
`channels: []` (antes de `queue`). Soma deja de forzar `channels: []`
(`a11yChannelsOverride` muere) y conserva `'text'`/`'focus'` con `sources.motion`.
S5 se conserva como doctrina (la preferencia gana al morfo y a la llamada); cambia
el enactor. Cierra el emit DIRECTO sin a11y (~76 en el docs site). Dato: hoy
ningún morfo declara `'state'` (9 declaran `'text'`); el valor es contrato y
simetría con la háptica, no un síntoma vivo.
Prosa re-firmada (CANON intacto, silente a propósito): engine.ts docblock ·
sema.md (emit contract, promise semantics, lifecycle, One door, overlays, error
policy, reductions, migration) · morfo.md · active-architecture.md (walkthrough)
· overview.md · soma-architecture.md · chans/types.ts req. 3 · sema/README ·
book-deviations D.9/D.10/D.12 · morfo/types.ts (MorfoEventSequence,
MorfoA11ySemantic) · comentarios del `sequence: 'post'` en dialog/drawer/popover/
float-panel (valor intacto).
Verificación (tras la ronda 2): sema 337/337 · runtime 63/63 · alcance del lote
201 ficheros / 2136 tests · suite entera 5366/5366 (458 ficheros, exit 0) · check 89 errores,
0 en src/, ledger intacto (los ~76 emit de web/routes son fire-and-forget y
compilan con el handle) · gate VERDE tras la ronda 1 (5359/5359; un flake de
gesture.test rotate-detent bajo carga, verde en solitario y dentro del gate) ·
+20 tests (engine 40→53, runtime 56→63) · 3 mutaciones enrojecen y revertidas
byte-idénticas (⚠ diferir la limpieza UN microtask es un no-op observable: la
mutación honesta cruza a macrotask) · adversarial Opus independiente (métodos
propios, árbol byte-idéntico al terminar): doctrina SANA; 8 defectos, cerrados
antes de anclar los 6 que eran del lote — D-1 código (el catch de `settled`
vivía en la rama onFulfilled del trigger: un handler que lanzaba en `pre` dejaba
la rechazada del canal visual sin manejar; ahora se engancha donde nace el
handle, con test de las tres vías) · D-2/D-3 prosa · D-4/D-5 tests (los cuatro
valores del fallback, y el par S5 vuelve a discriminar) · D-8 exactitud
(`clear`/`clearTarget` no honran ni cuentan transitorias en vuelo). Segunda
sonda de Chrome del adversarial: 11.6 · 11.0 · 5.1 · 42.7 ms. D-6 (alcance):
`contracts.test.ts` restaurado a HEAD (su diff era 100 % formateo); el
reformateo prettier de los docs tocados se queda. D-7 PREEXISTENTE, fila
nombrada: `dispose()` durante una ocurrencia en vuelo repuebla `active`
después y deja proyección residual (engine.ts, `finally` + `dispose`).
Pendiente del autor: mirar el cierre de Dialog y Toast en un Chrome que PINTE
(los panes de los agentes estaban ocultos: mutaciones y estilo computado
medidos, frame no visto).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
3 weeks ago |
|
|
f875f60b97 |
feat(eidos)!: un escalar es una instancia CLAVADA — mueren el throw de la puerta 2 y las fuentes por eje (c')
Cierra el estado INTERINO de
|
4 weeks 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 |
|
|
6f42eebfe8 |
feat(morfo,sema,eidos): todo evento dice de que familia es, y el cruce por fin se ve
El framework llamaba a la misma cosa de dos maneras: `open` pelado en ocho
componentes y `emerge-open` en tres. No era estetica — un preset de movimiento
engancha el nombre con `^=`, asi que el dialecto pelado no casaba con ninguna
firma y simplemente no animaba, sin romper una sola prueba.
Los 40 nombres sin prefijo pasan a `{familia}-{verbo}[-{matiz}]`: 256 eventos,
256 con prefijo, 0 ambiguos. El plan decia 36 y decia `handle-drag-start`; eran
40, y el canon (c25) dice que esos verbos son `pick` y `drop` — `handle-pick` y
`handle-drop` ya existian en 10 y 4 componentes.
`validateMorfo` cierra la puerta: un `events[].name` que no empiece por su
familia ahora lanza. Visto fallar antes con un nombre pelado inyectado.
Lo que el renombrado destapo, y va aqui tambien:
- La receta del splitter enganchaba `commit-resize`, muerto desde
`bd2e40366`. No casaba desde mayo y nadie chillo. Reescrita por FAMILIA, como
slider y knob, y `eidos-lint` valida ahora el VALOR de `data-event*` contra el
catalogo de morfos — el guard que lo habria cazado en su dia.
- La familia `shift` era muda en el canal visual, contra su propia doctrina
(c27: el cruce debe percibirse; c34 tipifica el «shift invisible»). Su mapa ya
describia la firma que le faltaba y su sonido por defecto es `slide`. Ahora
tiene firma direccional: sexto atributo del sello (`data-event-direction`,
`forward`|`backward`, por emision) y deslizamiento de 320ms RTL-safe por
`:dir()`. Medido: LTR -30px/+30px, RTL los invierte.
- El sello de `shift-navigate` pasa del BOTON al `grid` en los cuatro
calendarios. Medido: el boton recibia `contact-activate` y 8,5 ms despues
—media trama— el `shift-navigate` pisaba la misma ranura y el `press-squeeze`
moria sin pintar un fotograma. Una superficie, una ranura (A-36).
- 101 contradicciones docs<->morfo adjudicadas con evidencia (git log, docs de
decision, el componente vivo). Las docs desfasadas, corregidas; los nueve
DEFECTOS de codigo obsoleto quedan abiertos y sin tocar.
- `SoundDirection` -> `SoundContour`: era un contorno de tono, no un sentido, y
habia tres cosas distintas deletreadas «direction».
check en su linea base con 0 errores nuevos por diferencia de conjuntos ·
docs:check 0/0 · eidos-lint invalid 0 · el censo y las escenas de navegador
medidas con raton real y rAF vivo.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2 months ago |
|
|
3097cfcb69 |
revert: deshacer la auditoría entera — se hizo sin leer la doctrina
Revert de los 7 commits de la sesión del 2026-07-29/30: |
2 months ago |
|
|
c39170abbf |
fix(uix): la auditoría del sistema — lo que los guards no veían
Auditoría clean-room de todo ActiveUIX (excluido `web/`), componente a
componente. Lo que sale de aquí no es una lista de bugs: es un patrón.
El framework validaba que lo escrito fuese VÁLIDO, no que lo declarado
se CUMPLIESE — y sus guards fallaban ABIERTOS.
## El colapso de las uniones de props (95 → 0)
Un `Props` de eidos es `{ …props propias… } & <atributos nativos>`.
Cuando el elemento declara un atributo homónimo, la intersección funde
ambos y una unión estrecha contra el `string` nativo COLAPSA a `string`.
Causa: `Without<T, U> = Omit<T, keyof U>` invocado como `Without<T, {}>`
— `Omit<T, never>`, un no-op — 433 veces en soma; sólo 3 con argumento
real. Invisible para `svelte-check`: ensanchar un tipo no es un error,
es una garantía perdida.
Medido: 95 props en 72 componentes. `<Avatar color="nonsense">`
compilaba. `ComboboxInput.size` chocaba con el `<input size>` numérico
y era inusable. Migrado con codemod sobre AST (nunca regex) a
`Own & Omit<Nativos, keyof Own>`: 92 tipos en 73 ficheros + carousel a
mano. `check` no se movió.
Garantía nueva: `eidos/prop-surface.test.ts` (PROP-1) compara los
literales de la anotación del autor contra los de la propiedad pública.
Verificado que falla reintroduciendo el defecto.
## Los cuatro guards que fallaban abiertos
- `translations:check` crasheaba en CADA ejecución de su historia — un
stripper de comentarios borraba `//` dentro de strings. Sustituido por
import dinámico. Al arrancar destapó 8 slots `texts` sin traducción.
- `soma-attr-audit` agotaba el timeout de 5 s: sin veredicto, verde por
omisión.
- `component-audit` D-7.4 hacía `continue` mudo cuando el tipo no
resolvía. Ahora resuelve con el checker de TypeScript
(`scripts/prop-unions.ts`): puntos ciegos de 124 → 3.
- `component-audit` R-1.1: el regex casaba `[data-motion='reduce']` y
daba PASS por el motivo equivocado.
Regla adoptada: un guard que no puede evaluar TIENE que decirlo. El
informe lleva ahora bloque «Not verified» y recuento en el resumen.
## D-1 · tooltip y D-2 · card, cableados
`tooltip` declaraba 3 eventos `emerge` que nadie emitía. Ahora emiten;
`present` pasa a `sequence: 'post'` — con `'pre'` el hold de ~240 ms
gateaba el montaje del propio overlay.
`card` declaraba `commit-select` sin emisor posible (scope sin soma).
Puente headless en `soma/components/card/` con la forma ya establecida
por `menu-dial` / `onion-menu`: eidos posee estado y render, soma posee
sólo el `SomaRuntime` que emite.
## Documentación: 22 mentiras corregidas
`docs/` afirmaba guards inexistentes (`NO_MISSING_PROVIDER_TESTS`),
APIs con firma equivocada y un modelo de Motion que el código no
implementa. Corregido en CANON, arquitectura, glosario, theming/motion,
checklist y los README de `motion` / `callout` / `arts/motion`.
## Además
- CardGroup: la descripción se metía en la primera celda del grid.
- Motion: `data-state` siempre estampado, salida real en `leave()`,
token fantasma `--motion-stagger-each-default` eliminado.
- `engine-motion`: `handoffState` Map → WeakMap (fuga por nodo).
- `mockup`: primitivo crudo → token de rol (R-4.6).
- 5 catálogos de traducción que faltaban.
Handoff: `docs/process/CONTINUE-audit-2026-07-29.md`.
Batería: check 0 errores en src · vitest server 3701/3701 ·
docs:check 0/0 · component:audit 161 PASS / 2 NEEDS-WORK.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2 months ago |
|
|
4e7753fe08 |
docs(book): F7.6 (1/2) — decision logs moved to docs/decisions/ (verbatim Spanish)
LIBRO_VARIACIONES_Y_EXTENSIONES -> decisions/book-deviations.md and
GUIA_IMPLEMENTACION_SEMAUIX -> decisions/guia-semantica-historica.md,
both moved AS-IS in Spanish: the deviations registry is a logbook of the
author's literal decisions ('transcrita literal') and carries proposed
doctrinal text destined for the Spanish book — translating it would
destroy that function (s G calls itself bitacora); the guia was already
status: historical (Fase 6) and the plan exempts it explicitly. English
frontmatter added to both; internal cross-links repointed (CANON,
theming/reference, book-deviations D.11). docs-check's I2 phantom-field
exemption follows the moved file (it matched by the LIBRO_VARIACIONES
filename; now also matches decisions/book-deviations.md). Corpus swept:
CANON x3, README (E2/E3 strata + tables — also fixed the pre-Fase-6
leftover row still calling the guia 'authoritative for any new wrapper'
and the unswept eidos/TSC.md stratum mention), building-a-component D.4,
completion-checklist G-1.1 + header, theming/reference, architecture
x5 (active-architecture, eidos, morfo, overview, sema x2).
docs:check 0 errors, 11-warn baseline.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
3 months ago |
|
|
62a62075f9 |
docs(book): F7.5 (2/2) — COMPONENT_GUIDE moved; guides/ batch COMPLETE
src/uix/soma/COMPONENT_GUIDE.md (1449 L, English body) moved to
docs/guides/component-guide.md. The only Spanish passage — the
archetype-canon banner (2026-06-19) — translated in the move; the rest
is verbatim. Banner's ARCHETYPE_COHERENCE_AUDIT link reaches into src
(audit fossil, stays with the code); the checklist cross-link is now
the sibling ./completion-checklist.md and the 'soma/README s9' mention
now names architecture/soma.md (its post-F7.2 home). Corpus swept:
authoring + README E4 stratum rows (also stale THEMING_GUIDE name),
building-a-component phases 0/2, architecture/{soma-architecture s4/
s13-tree/s17, overview, morfo, active-architecture}.
F7.5 complete: docs/guides/ = component-guide, completion-checklist,
demo-authoring, component-audit. docs:check 0 errors, warns back at
the 11 baseline.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
3 months ago |
|
|
1a710c12ff |
docs(book): F7.2 (7/7) — soma-architecture chapter translated; architecture/ batch COMPLETE
src/uix/soma/SOMA_ARCHITECTURE.md (1058 L, Spanish) translated to English as docs/architecture/soma-architecture.md, same s1-s17 numbering: layer architecture, design principles, the closed six-piece model + SomaRuntime, component model (picker composition), runtime parts, the layers inventory, the Soma class + date/time domain + statics convention, the reactive system, internal helpers, data-* contracts, IDs, barrels, boundaries, directory structure, anti-patterns, current shape, stability rule, checklist. The frozen per-provider test list (dated 2026-05-15, ~140 L) became the timeless fact: the NO_MISSING_PROVIDER_TESTS guard + the test tree ARE the coverage inventory (testing-and-tooling aligned). Stub with the full sN map at the old path; corpus links swept. F7.2 is complete: docs/architecture/ now holds the whole E1 stratum in English (7 chapters, ~5.4k lines), with thin stubs + sN maps next to the code. docs:check 0 errors (251 docs). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
3 months ago |
|
|
479204fca6 |
docs(book): F7.2 (6/7) — eidos chapter translated to docs/architecture/eidos.md
src/uix/eidos/README.md (1020 L, Spanish) translated to English: the
ActiveEidos runtime (config/patch, themes, themeSource, CSS contract,
setCssVariables, persistence envelope, resolveToken), canonical size +
transversal primitives, what eidos consumes from morfo/soma/sema, the
--* token rule, the THEMING sN map, typographic vertebration (two
anchors + alias chain + R-2.7), the 2-of-3 rule, disciplined-option-C
API conventions (7+4 rules, Toast special case), the selector-drift
defense, and the picker patterns P-1..P-5. Two already-decided
reconciliations folded in: themes/fonts.css superseded (font-faces live
in generated/base.css) and the dated 2026-05-21 picker block merged into
the picker-patterns intro — its dead PENDIENTES.md pointer replaced by a
TODO(reconcile) note (norms N-6/N-7 orphaned by
|
3 months ago |
|
|
8668e117bc |
docs(book): F7.2 (5/7) — active-architecture chapter translated
src/uix/active_architecture.md (865 L, Spanish) translated to English as docs/architecture/active-architecture.md: the s0 module contracts + canonical naming, the four layers in depth, the transcription chain, the causal chain of one interaction, the DOM-attribute table, the 12 hard rules (incl. the sec-dom read-timing rule), authorship vs transcription, what it is NOT, risks. The dated header changelog block was dropped per the timeless rule (s10 already routes snapshots to docs/process/); the stale themes/fonts.css mention in the eidos structure listing corrected to the generated foundation (phase-6 fact). Stub at the old path carries the full sN section map (the most sN-cited doc in the corpus). All docs/ corpus links repointed to the chapter. docs:check 0 errors. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
3 months ago |
|
|
a6371ab58d |
docs(book): F7.2 (4/6) — sema chapter translated to docs/architecture/sema.md
src/uix/sema/README.md (749 L, Spanish) translated to English: the emit contract (sequential strict), the 1-2-3-4-5a-5b resolution cascade, the data-event-* tokens, the typed semaSelector builder, per-component packs, the sound repository, SoundChannel details, SEMA_FAMILY_POLICY (two axes) and SEMA_VERBS + naming shapes. Thin stub at the old path; corpus links swept (CANON, comparison, glossary, docs map, building-a-component, overview, morfo chapter, active_architecture). docs:check 0 errors. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
3 months ago |
|
|
e941bd2a7f |
docs(book): F7.2 (3/6) — soma chapter translated to docs/architecture/soma.md
src/uix/soma/README.md (405 L, Spanish) translated to English: purpose, membership criteria, dependencies (incl. the clsx phantom-dep note), morfo consumption, provider/wrapper pattern, composition + context rules, eidos relationship, inventory doctrine. Thin stub at the old path; corpus links swept (docs map, glossary, building-a-component s0, overview). docs:check 0 errors. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
3 months ago |
|
|
e83b9289ed |
docs(book): F7.2 (2/6) — the thesis translated to docs/architecture/overview.md
src/uix/README.md (485 L, Spanish) translated to English as the book's opening chapter. Two already-decided reconciliations applied in passing: the 'authoritative GUIA' pointer now reflects its historical status (phase-6 decision) and the frozen 2026-05-17 migration status became the timeless statement (every component ships an eidos wrapper; inventory = tree + component:audit). Thin stub at the old path; docs/README entry, strata table and reading order repointed. docs:check 0 errors. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
3 months ago |