Formato puro: `npm run format` (dos pases; siete ficheros no convergían en el
primero) sobre todo lo que .prettierignore no excluye (web/ congelado,
.claude/, artefactos generados). Este commit va en .git-blame-ignore-revs.
Neutralidad medida fichero a fichero, compilando y minificando con esbuild (y
con el compilador de Svelte, cliente y servidor, para .svelte) la versión de
HEAD y la formateada: 1 031 ficheros de código idénticos; 9 CSS que solo
difieren en espacios pegados a un paréntesis (`var( --x )` frente a
`var(--x)`), que CSS no tokeniza como significativos; 510 Markdown sin
compilación posible (docs:check los valida). Los dos generados y el guard que
dependía del formato se resolvieron en el commit anterior.
Verificación sobre este árbol: npm run lint exit 0 · gate entero verde salvo
focus-census, arreglado en el commit anterior y re-ejecutado (9/9): check:gate
OK (src/ y scripts/ a cero) · docs:check 0/0 · arts/blocks/packs/rtl/
translations/agent · eidos:lint 0 inválidos · apps:check (boot 27/27, 0
errores) · suite 465/466 → 466/466 con el guard corregido · build de la raíz
exit 0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Toggle as the eidos pilot: subdirectory layout (recipe + Svelte wrapper +
types + index + README) replacing the flat CSS-only form. Pattern is
documented in eidos/components/README.md and the toggle README.
Shared types live in eidos/lib/types.ts. First export is `Size` (8 values
xxs..xxl + full); components narrow with `Extract<Size, ...>` per the
per-component-subset doctrine. No `Eidos` prefix on types — module path
already conveys the layer.
API doctrine:
- soma stays compound (Toggle.Provider) for symmetry with multi-part
- eidos exports both default + Provider so single-part components
accept both `<Toggle>` (ergonomic) and `<Toggle.Provider>`
(compound-style consumers)
SoundChannel eager-init fixes the autoplay race: AudioContext is created
+ resumed synchronously on the first user gesture (capture-phase
listener registered in the constructor), avoiding the previous race
where the first emit() scheduled the resume in a microtask outside the
gesture window.
Demo page (web/routes/toggle/+page.svelte) restructured so the live
preview renders ALWAYS above the tablist — Sema-tab Play buttons can
fire on the real toggle. Motion preview amplifies scale ×8 visually
only; doctrinal values stay in the <dl>.
Conventions 7-13 added to src/docs/sema-implementation-guide.md
covering: directory structure, wrapper composition, no Eidos prefix,
soma compound vs eidos flat, iconOnly sr-only body, sound eager-init,
docs-preview amplification.
CLAUDE.md gets a session hand-off block listing where things stand and
next concrete steps (migrate switch/collapsible/dialog/drawer/popover/
toast/avatar; wire topbar sound mute to masterGain; rename theme
tokens to drop the success/warning/danger fallback aliases).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>