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 }
15 Commits (7d4f95005d8486d14b79caa74c80a8adc164b0aa)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
58c798b195 |
feat(eidos): F4-D foundation — themed selection, caret, scrollbars
Add a "Foundation globals" section to eidos/archetypes.css (document-wide, not archetype-keyed) closing the two zero-coverage systemic gaps + the scrollbar item from the F4-D GAP menu: - ::selection — translucent accent wash (background only, text keeps its colour so it stays legible in light and dark) - caret-color — accent identity on input/textarea/contenteditable, in :where() so a field recipe can override (invalid -> threat) - native scrollbars — themed + thin via the STANDARD properties on :root (Firefox + Chromium >= 121). Heavy ::-webkit-scrollbar deliberately skipped: ScrollArea draws overlay bars and hides the native one inline (scrollbar-width: none on its viewport, which wins). Thumb colour matches ScrollArea's thumb. Cursors were already archetype-wired (trigger/close/action/item/option = pointer, thumb = grab/grabbing, disabled = not-allowed, text zones = native input + explicit cursor:text in date-field/editable) — no change needed. All values read role tokens (--color-primary-solid, --color-content-muted), lowest specificity so any component recipe still wins. Verified live (tags-input demo, base-dark): input caret = --color-primary-solid exactly; scrollbar-width thin applied; ::selection rule present + token resolves; docs-harness :root override wins (app > foundation). npm run check src/ = 9-error baseline, 0 new. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
3 months ago |
|
|
1c7b4e7f51 |
docs(process): continuation handoff — session close state (THM-2 + THM-4 done)
Add a close-of-session state block at the top: what shipped this session (media-player Batch-4, THM-2 full rollout + avatar + closure, THM-4 5-hotspot adjudication) with commit refs, the real-component verification method, and the remaining §9 / side queue (F4-D GAP scoping, motion cascade-vs-signatures). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
3 months ago |
|
|
34d1d46bdb |
docs(theming): close THM-4 — 5 hotspots adjudicated, only 1 real debt item
Adjudicate color-picker (29), avatar (28), time-range-picker (26): all 0 debt — composition (de-dialoged pickers compose Popover; avatar's per-role color now lives in the shared layer after the THM-2 migration; sliders/toggle composed), behavioral (sema last-action, format, endpoint, loading status), and per-file-lint blind spots (recipe-token variant rules). Across the 5 biggest hotspots (156 unused) the only real debt was stepper's dual-representation API, now consolidated. Confirms the doctrine: the unused column stays informational, no machine rule warranted. THM-4 closed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
3 months ago |
|
|
75fa94005b |
refactor(stepper): THM-4 — consolidate step state on data-state, drop boolean aliases
Every step part (item/trigger/indicator/separator) declared BOTH `data-state` (enum) AND `data-current`/`data-complete`/`data-incomplete` (booleans) — the same state twice, used inconsistently (enum on trigger/indicator, boolean on separator). Consolidate on the canonical `data-state`: - morfo: prune the 12 boolean declarations. - provider: drop the current/complete/incomplete sources (item/indicator/separator) + the trigger's explicit boolean writes + the now-unused isComplete/isIncomplete getters (isCurrent stays — it drives aria-current/tabindex). - separator.css: [data-complete] -> [data-state='complete']. - README + provider test updated to the single form. Verified with the real component (Next advances → complete/current/ incomplete via data-state, boolean attrs gone, complete separator still paints). stepper unused 30->18; provider test + contracts green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
3 months ago |
|
|
d9c3d03f7d |
docs(theming): THM-4 dossier — media-player + stepper adjudicated, low debt rate
Burn the two biggest THM-4 hotspots. media-player (47 unused): 0 real debt — all composition artifacts (composed Buttons/Sliders), behavioral state mirrors of the media element, default-state enum values, or documented-v2 roadmap surfaces (settings-button, custom captions). stepper (30 unused): mostly legit + one API redundancy — every step part declares both data-state (enum) and data-current/complete/incomplete (booleans), used inconsistently (enum on trigger/indicator, boolean on separator). Consolidating is a public-API design decision, not a prune. Emerging read (2 batches): hotspots are mostly legitimate; genuine declared-for-nothing debt is rare, confirming the doctrine — the debt rate does not justify a machine rule. THM-4 is mostly documented adjudication. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
3 months ago |
|
|
0a5aa387b9 |
docs(theming): close THM-2 rollout — Avatar.Badge out of the scale palette by design
Record the rollout as shipped ( |
3 months ago |
|
|
cc7e9a162a |
feat(theming): THM-2 - avatar root palette to the shared layer + 33 scales
The avatar body's per-instance palette now resolves through the shared
per-instance layer (size collapse, behavior-preserving for roles, adds
the 33 scales):
- avatar.svelte: isCanonicalColor recognizes palette scales, so a scale
name routes to data-color instead of the custom CSS-color path ('teal'
is also a CSS color name, so it used to fall to --avatar-color-custom).
- recipes/base.ts: _palette-{solid,surface,contrast,text,border} (host
fallback only - the avatar always emits a canonical data-color, so the
presence-guarded forward routes roles + scales) + _bg/_fg/_border move
from a variant x color matrix to variant-only readers of
--_avatar-palette-*. The matrix helper + intermediates stay (the badge
still uses them; 0 orphans). avatar.css unchanged.
- demo: scale picker.
Verified end-to-end with the REAL component (drive the demo color control
-> the avatar emits data-color -> the shared layer resolves the exact
scale): affirm+soft behavior-preserving, teal+soft = scale-teal-a2
(translucent surface), teal+solid = scale-teal-9.
The Avatar.Badge sub-part (aria-hidden decorative chip with its own color
+ default) stays on its role palette + custom-CSS: migrating it needs a
per-part forward + pruning ~36 orphaned intermediates, disproportionate
for a decoration whose arbitrary-color case already works. Documented for
a decision.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
3 months ago |
|
|
05f0031cad |
feat(theming+soma): media-player Batch-4 (SOM-4) + THM-2 shared-palette rollout to 14 surfaces
media-player Batch-4 (closes SOM-4): the 10 sub-parts migrate to
renderProps() (35 attr-dup hits -> 0). Register the sources the morfo
reads (label propRef, on stateRef, direction/type) so renderProps emits
type/role/aria-*/data-state; keep only contract-only soma-owned attrs.
Pin the soma-attr-audit ceiling to 0.
THM-2 rollout - collapse each per-component palette cascade into the
shared per-instance layer (size win, behavior-preserving for roles,
adds the 33 scales):
- Rename palette tokens to canonical _palette-{slot} + route via the
presence-guarded forward: tags-input, stepper, badge, card, select
(parts-aware trigger+content), file-upload, editable, tag-group.
- Extend the shared vocabulary with alpha surface(a2)/surface-hover(a3)
slots (soft variant of variant-aware recipes) and hover(4) - the
latter also fixes Toggle's latent scale-hover.
- tag-group: variant-aware migration (solid/outline -> canonical,
soft -> alpha surface; merge outline-fg into text, prune orphans).
- toggle-group: replace the 4-role cross-recipe composition with a
hand-authored presence-scoped route to the shared layer (the
composition DSL can't presence-scope); covers roles + 33 scales.
- Widen color to ComponentColor (roles + 33 scales) where arbitrary
color is meaningful: badge, tag-group, tags-input, toggle-group, and
add the scale picker to their demos. Semantic controls stay restricted.
Verified end-to-end with the REAL components (drive the demo color
control -> the component emits data-color -> the shared layer resolves
the exact scale). Gates: recipe-css-contract/config/contracts/
soma-attr-audit/media-player suites green; 0 orphan tokens.
avatar remains for a focused pass: its variant-resolved matrix and badge
sub-part don't fit a mechanical migration.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
3 months ago |
|
|
6da8466f68 |
docs(process): handoff — media-player Batch-4 scopeado como arranque de la próxima sesión
Estado: F0·F1·F2·F3·F4-C·SEM-4·THM-2 ✅ commiteadas/pusheadas. El bloque
ARRANQUE reescrito: media-player Batch-4 (cierra SOM-4) con el diagnóstico
completo (10 sub-partes hardcodean attrs que el morfo declara; migración
renderProps parte-a-parte; plantilla carousel/table; cierre con ceiling +
navegador) para ejecutar en frío sin re-scopear. Cola posterior: rollout
THM-2 (12) · hotspots THM-4 · F4-D GAP (scoping) · cascada-vs-firmas.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
3 months ago |
|
|
0e75890f60 |
feat(theming): THM-2 — paleta universal por instancia (capa compartida + forward), 5/17 superficies
El mecanismo genérico ya existía (universalPaletteDecls auto-completaba las 33
escalas para recetas con tokens palette-*), pero con PREFIJO de componente
(--button-palette-*) — cada superficie pagaba ~21 KB, por eso solo button/toggle
lo tenían (rollout a las 17 = ~+315 KB). Colapso al modelo compartido:
- renderSharedPaletteLayer: UNA cascada component-agnóstica
[data-color='{role|scale}'] { --palette-{slot}: … } — 8 roles + 33 escalas,
emitida una vez (~19 KB). Roles 1:1 a --color-{role}-*; escalas con el step
map + on-solid contrast, valor idéntico a la cascada per-component retirada.
- renderRecipePaletteForward: toda receta con palette-* (público) o _palette-*
(privado) recibe [data-{c}][data-color] { --{c}-palette-{slot}:
var(--palette-{slot}, host-default) }. La guarda de PRESENCIA es la seguridad
de anidamiento — un hijo sin color dentro de un ancestro coloreado matchea
solo [data-{c}] (su default) y nunca lee el --palette-* heredado.
- Generalización a la paleta PRIVADA: checkbox/radio-group/switch ganan las 33
escalas con CERO cambio de CSS (ya consumen --_{c}-palette-*).
- universalPaletteDecls eliminado; 2 guards migrados al modelo compartido
(recipe-css-contract "shared layer + forward"; active-eidos-config contrast
en la capa compartida).
DONE (per-instance): button, toggle, checkbox, radio-group, switch (5/17).
Rollout de las 12 restantes en docs/process/continue-cleanroom-fixes §THM-2.
Doctrina en theming/reference §25 ("The per-instance palette layer").
Verificado en vivo (button + checkbox): color="teal" → escala teal exacta ·
affirm → rol exacto · primary → primary · nested-nocolor en ancestro teal →
primary (sin contaminación). Peso 345K → 329K. Gates: matriz 141/141 ·
eidos 314 · recipe-css-contract + active-eidos-config 98/98 · contracts 38/38.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
3 months ago |
|
|
082b66232a |
docs(process): SEM-4 COMPLETO — D.6 ya estaba vivo (registro reconciliado) + D.2 descartado
- book-deviations: los caveats de D.6 (emisión dormida + branch-vs-item) marcados
RESUELTOS con verificación en vivo 2026-07-12 (los 6 providers emiten; packs con
onBranch/onRow casan con los targets reales) — el párrafo stale fue citado por la
clean-room como evidencia de dormancia: lección anotada (el registro se actualiza
en el mismo pase que el cableado). D.11: párrafo de pickers actualizado al cierre
real (delegado closeWith→dismissWith,
|
3 months ago |
|
|
b55ca6eecb |
fix(cleanroom): F2+F3+F4-C+SEM-4s1 — lote mecánico, censos con guard, corpus documental y el close polimórfico de los pickers VIVO
F2 — lote mecánico (13 ítems): - DEP-2 ogl eliminado (0 imports) · DEP-1 clsx inlineado como toClassString propio + suite de contrato (props.test.ts; soma.md §12 cerrado). - THM-7: los 5 selectores manuales de sema.md reescritos con semaSelector (los ejemplos [data-toast-root] apuntaban a un part INEXISTENTE — la deriva que el builder previene, demostrada en el propio doc). - MOR-1 escape isomorfo + validación de attr-names en semaSelector + 9 tests (selectors.test.ts, matches() real con comillas/corchetes) · MOR-2 partMarkerAttr = única fuente compilador↔builder + test de paridad · MOR-3 _resetCompileCache borrado (0 usos). - SOM-2 keydown continue en match sin handler + keyboardFixtureMorfo · SOM-1 no-await de handlers (censo async = 0; contrato V1 cumplido) + pin. - SEM-2 trigger pre-attacha catch con logger (void trigger sin unhandled rejection; throw intacto para awaiters) + pin · SEM-3 fallback muerto de applyDominance → skip defensivo + timer tope de awaitExpression cancelado · SEC-1 adjudicado YA implementado (assertCssVariableValue desde 2026-05-11) + pin del path de VALOR. - accordion → outline (§32; su outline:none dejaba CERO anillo en HCM) — verificado en vivo · THM-6 radius-full 9999px · EID-4 recuentos 33. F3 — censos con guard: - SOM-3 cerrado: announcer + image-provider migrados a scheduler-preferred (consumidores cableados: date/time-field vía soma.uix.timers; avatar/image vía eidos.timers — verificado en vivo); guard de timers ENSANCHADO de soma/components a TODO soma y pasado a EVIDENCIA (setTimeout exige .schedule( en el fichero — layers/ y datetime/ escapaban del ámbito viejo). - THM-5: R-4.7 nueva (válvula same-line /* important: <razón> */, escaneo comment-blanked) + las 15 declaraciones anotadas con su razón + canon recipe-contract §3/§4. - SOM-4 adjudicado: el censo/guard YA existían (49 pins); knob/mask-field/ timeline pinneados (overrides documentados en call-site); media-player Batch-4 (35 hits, cero renderProps) = único batch restante, registrado. - THM-4 doctrinado en eidos.md §unused (comportamiento/composición = legítimo; deuda = eje visual sin consumidor; hotspots por lotes). F4-C — corpus documental (decisiones de usuario aplicadas): - DOC-3: los 15 enlaces muertos resueltos (repoint a la edición FINAL trackeada / des-link históricos) · docs:check I6-links WARN→ERROR. - DOC-1: tabla «Build contract» MIGRADA a component-guide con estados modernizados (A3–A5 → LIVE + guards de hoy); banners reapuntados; citas de CANON/sema.md historificadas; lápida-redirect en el §13 del fósil. - DOC-4: hold chain → holds.ts · FAQ event:* SUPERSEDED por signatures · gradient añadido a los DOS capstones (sextet real) · nota de paleta de demo-authoring corregida (universalPaletteDecls + decisión THM-2 = mecanismo universal como sucesor del tracker borrado). - DOC-5/6: recuentos anti-frágiles datados · §4.11 dup → §4.12 · Known gaps historificado · N-6/N-7 recuperadas de git (d68d2c45^) y canonizadas en eidos.md §pickers · authoring E2 → canon/tsc.md · air-old des-linkado · EID-3 (placement) en la fila RTL · AUX-2 disabledDom documentado. SEM-4 sesión 1 — el close polimórfico de los pickers, VIVO (D.11): - Reconciliación: los morfos ya no declaran close (delegated al Popover, de-dialoged 06-27); el agujero real era el cierre programático bypaseando dismissWith → save/cancel/select eran perceptualmente SILENCIOSOS. - Fix: PickerShellHandle.setPopoverDismiss + closeWith(cause) en los 5 providers (14 sitios; select/commit → 'save' = commit.save+fulfill, cancel → 'cancel' = emerge; fallback raw para headless) + UN inyector en el eidos PickerShell root (norma N-8). Picker genérico fuera a propósito (ya suena commit-set/cancel por diseño S9). - Verificado en vivo (date-picker): Done → close·commit·fulfill·active · Cancel → close·emerge · cierre real. Gates: matriz 141/141 (los 6 morfos nuevos de la pista de texto paralela también PASS) · contracts 38/38 · eidos 314 · sema 178 · morfo 94 · docs:check 0/0 con I6 en error · baseline propio 57. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
3 months ago |
|
|
29e621b17c |
docs(process): handoff — F0+F1 EJECUTADAS; turnkey F2 (lote mecánico) + doctrina AUX-1
- continue-cleanroom: bloque de ARRANQUE para la próxima sesión (F2 en 6 pasos ordenados, barato→delicado, no-cascada) + registro de ejecución de F1 (EID-1 anillo fundación→outline con :where() — el reset global que lo justificaba NO existía y el anillo viejo pintaba en paralelo con los de receta; EID-2 opacidades→tokens; F1.3 3 guards de fundación; SEM-1 prioridad=intent pinneada con liveRegionFixtureMorfo) + cola lateral nueva: accordion outline:none+box-shadow = cero anillo en HCM (a F2). - sema.md §Announce: doctrina AUX-1 "who owns what" — 1 sink (uix.announce), 2 emisores (runtime a11y + AnnounceChannel), <Announce> = región de app; UNA política de prioridad (SEM-1) pinneada en ambos lados. Gates al cierre: matriz 135/0/0 · contracts 38/38 · eidos 309/309 · sema 178 · baseline 57. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
3 months ago |
|
|
4addfd7dbf |
fix(cleanroom): P1s ejecutados (EID-1/EID-2/SEM-1/MOR-4/THM-1/THM-3) + auditoría + plan scene/ambient
Clean-room fixes (2026-07-11, sobre los P1 de la auditoría):
- EID-1: el anillo de foco de la fundación migra a `outline` (§32) — el último
box-shadow del catálogo; :where()-wrapped para que las recetas siempre ganen;
doctrina actualizada en theming/reference + changelog.
- EID-2: opacidades literales de archetypes.css → var(--opacity-disabled/hover).
- SEM-1: política de live-region unificada — la urgencia va SOLO por intent
(threat/loss → assertive), runtime y AnnounceChannel ya coinciden.
- MOR-4: card-group con morfo propio (scope eidos) + guard de enumeración.
- THM-1: component-audit + recipe-css-contract escanean los *.css hermanos
(calendar-select, color-picker-spectrum, date-range-picker-time…); R-2.1
caza también hsl()/oklch(); violaciones de los secundarios corregidas.
- THM-3: canario de censo de toggle volteado (lint.test); commit-block promovido
a firma global block-shake; regen de generated/base.css.
Docs nuevos:
- docs/audit-new-10-july/audit-active-uix.md — auditoría clean-room 2026-07-10
del ecosistema (hallazgos P1–P3 con evidencia ruta:línea, matriz y gap analysis).
- docs/process/PLAN-scene-ambient-pack.md — plan por fases: motor arts/scene +
pack Ambient (45 animaciones de demos) + vía de promoción agéntica (Aura);
gate de decisiones D1–D9.
- docs/Disenando_lo_que_ocurre_FINAL.{docx,pdf} — edición FINAL del libro.
- README.md raíz (esqueleto de paquete).
Excluidos deliberadamente de este commit: words/palabras/chronos (pista
separada), web/routes/alpha (terminado, sin commitear por decisión), rt.css
(volcado de referencia Radix Themes).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
3 months ago |
|
|
4c1fbec1d8 |
docs(audit): formal programme close-out + the clean-room continuation handoff
- docs/audit/components/_cierre.md — the programme closure: final gates (matrix 134/0/0, contracts 37/37, vocab 0, baseline 57), the full package journey with hashes, the canonized method (dossier template, evidence-only exceptions, no-cascada, machine valves), the findings that outlive the programme, and what moved to new owners (demo frame, active tracks, follow-ups). - docs/process/continue-cleanroom-fixes-2026-07.md — the LIVE turnkey for the next sessions: the clean-room severity table as the queue, the state reconciliation (SOM-5 P1 already closed post-snapshot; SOM-3 partial), the proposed P1 order (machine-extending THM-1/MOR-4 first), the WIDENED verification protocol (134/0/0 and 37/37 must HOLD), exclusions and the side queue. - The old audit-fixes handoff is sealed as historical with a redirect header. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
3 months ago |