La tabla de alias (38 entradas) estaba escrita dos veces, en vite.config.ts y a
mano en svelte.config.js, y dos scripts la sacaban de vuelta de la config de
Vite con una regex (generate-boot.ts y el invariante 8 de docs-check.ts). Una
app del workspace habría sido el cuarto sitio. Ahora vive UNA vez en
uix.aliases.js (raíz, .js con JSDoc porque Node carga svelte.config.js sin
bundler): UIX_ALIASES con rutas relativas y resolveUixAliases(root) con las
absolutas, en el mismo orden. Las dos tablas eran idénticas en claves, valores
y orden (comprobado antes de sustituirlas).
El orden es contrato: Vite y esbuild casan un alias de cadena por prefijo y
SvelteKit se los pasa en orden de inserción (leído en
@sveltejs/kit/src/exports/vite/utils.js), así que $svrs/auth/testing y
$svrs/auth van antes que $svrs. src/uix/aliases.test.ts lo guarda junto a lo
demás: cada destino existe (anti-vacío ≥ 38), resolveUixAliases conserva orden
y rutas, ninguna config vuelve a llevar una copia, y el tsconfig generado por
SvelteKit tiene paths para cada entrada. Visto fallar: con $svrs delante de
$svrs/auth, 1 rojo (restaurado byte a byte).
svelte.config.js gana kit.typescript.config para que svelte-check incluya el
módulo. readViteAliases muere sin shim; pack.test.ts importa el módulo.
CLAUDE.md y AGENTS.md dicen dónde vive la tabla (la sección de AGENTS.md
listaba alias que ya no existen).
Verificación: aliases.test + pack.test 6/6 · generate:boot byte-idéntico (esbuild
recibe el mismo mapa) · docs:check 0/0 · check:gate OK (src/ a cero; 89 en web/, dentro del ledger) · suite
entera 464 ficheros / 5 442 tests, exit 0 · npm run build de la raíz exit 0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Creates the binding pre-flight checklist every agent / contributor
must read before touching any UIX component (`src/uix/{morfo, soma,
sema, eidos}/components/{name}` or `web/routes/uix/components/{name}/`).
Sections:
0. Inviolable rule — always read this + DEMO_AUTHORING_GUIDE +
components/README before coding
1. Reference library matrix (radix-themes, chakra, mantine, mui,
react-aria, ark, bits, shadcn, WAI-ARIA APG) with what each is for
2. 4-layer ownership recap (morfo / soma / sema / eidos) + the
2-of-3 rule for morfo extensions
3. Pre-flight audit template — feature parity matrix, architectural
choices, reference comparison, decision log, user sign-off line
4. Project-wide architectural rules (Radix item/container split,
composition over visibility props, chip parity, size category
cheatsheet, per-event intent, no re-export facades, persistent
label registries, floating layer defaults, combobox keyboard,
Chakra band-above-control chips)
5. Demo template lock — points at DEMO_AUTHORING_GUIDE
6. Anti-pattern catalogue — every failed approach from recent
sessions with WHY it failed (shallow demos, matchAnchorWidth,
visibility booleans, inline chips, onpointerdown picks, flex
100% wrap, unregistering labels on unmount, auto-rendering
wrappers, refocus without guard, agent git reset, skipped audit)
7. Canonical canaries per domain (drawer, search-field, box, flex,
date-picker, avatar)
8. Audit log — running table of completed audits with commit hashes
+ the known gaps from Layout Batch 1 to address before the next
round (alignContent on Flex/Grid, columns/rows shorthand on Grid,
grow boolean on Group, fluid on Container, HStack/VStack helpers)
9. Pre-port checklist consumers can copy into task plans
10. "When in doubt, ask the user" closer
AGENTS.md updated with a top-banner ⚠ block linking the three
required reads (this guide, the demo guide, the eidos components
README) so any new agent picks them up before touching code.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>