docs: el repositorio, el formato y los guards de texto entran en el corpus; cuatro afirmaciones caducas mueren (documentación del cierre)
El plan de cierre cambió cosas de un nivel que el corpus no cubría: la forma del
repositorio, la política de formato, el inventario de lo generado y la clase de
guard que lee TEXTO fuente. Un inventario previo de todo `docs/**` (más los
README de raíz, `src/**` y `apps/**`) midió qué había: los temas de capa estaban
cubiertos, y este nivel no.
NUEVO
- `docs/repository.md` (E0): las zonas y quién escribe en cada una; la LEY de
`web/routes/` congelado y sus dos consecuencias (los validadores de navegador
siguen manuales; el formato no llega ahí); un solo install y un solo workspace
(el argumento de la copia única de Svelte); un solo mapa de importación con el
orden como contrato; qué debe cero y qué debe un ledger que solo mengua.
Enlazada desde el mapa, el README de la raíz, getting-started y AGENTS.md.
- `docs/testing-and-tooling.md` §Format policy: `.prettierignore` enumerado y
justificado (cinco clases), el commit único de formato, el
`git config blame.ignoreRevsFile` que hay que ejecutar a mano y que Gitea no
lo lee.
- `docs/testing-and-tooling.md` §Guards that read source text: la doctrina que
faltaba. Un guard de texto está acoplado al formateador; el positivo se pone
ROJO y te enteras, el NEGATIVO pasa en VERDE sin inspeccionar nada. Los cinco
síntomas medidos en el formateo de una sola vez, seis reglas para escribir uno
que no dependa del formato, y los cuatro pasos antes de commitear un formateo
masivo (neutralidad compilada, la vista de los guards, los validadores que NO
están en el gate, un commit puro).
CORREGIDO (afirmaciones vivas y falsas)
- `README.md` de la raíz: era una plantilla vacía que mandaba `npm install
vicen` con el repositorio `private: true` y sin paquete. Ahora es una puerta.
- `AGENTS.md`: su pre-flight INVIOLABLE mandaba leer dos guías del árbol
congelado (el canónico está migrado), su ejemplo de test apuntaba a
`src/lib/ling/`, borrado en el refactor, y describía cuatro librerías que no
existen. Además decía que los comentarios en castellano valen, contra
CLAUDE.md.
- `docs/theming/guide.md`: los cuatro sitios que llamaban `eidos.listThemes()`
DENTRO de `hooks.server.ts`, donde no hay instancia; ahora `THEME_IDS`
derivado con `listEidosThemes(config)` del módulo que la raíz también importa.
- `docs/architecture/active-uix.md`: la regla 6 decía que la raíz no proyecta
preferencias; hoy standalone proyecta por defecto (`projectPrefs`, `@default
true`) y attach es opt-in. Su ejemplo de arranque montaba una SEGUNDA
proyección a mano.
- `announce`: el opt-in queda calificado (motor desnudo) frente al cableado por
defecto de las raíces, en `book-deviations.md`, `channels.md:58` y el docblock
del canal.
- `docs/getting-started.md` y `docs/architecture/morfo.md`: la política de
`check:gate` también cubre `scripts/`.
- `docs/canon/direction-contract.md`: los dueños literales de la marca (`boot`,
`projection-<n>`) pasan a la prosa, citables por un guard.
- `src/uix/eidos/components/README.md`: regla 8 — un bindable se reenvía con
`bind:`, nunca por el spread del resto (el proxy de rest props no lleva
`set`, así que el tipo promete lo que no ata). Con el `ref` en la superficie
del `Button` y el gap RESUELTO en `cookie-consent`.
`docs/canon/vocabularies.md` y `src/libs/emoji/data.ts` aparecen por fin como
artefactos generados, con su comando.
Ledger: L-133 · L-142 · L-143 · L-154 a ARREGLADO; L-152 conserva los 532
ficheros pero ya con doctrina escrita; nuevas L-161…L-165 (la última, DIFERIDA:
nadie obliga aún a que un guard de texto falle con el corpus vacío).
Verificación: `npm run gate` exit 0 en 542 s — lint limpio · check:gate OK
(89 de web/ en el ledger) · docs:check 0/0 en 822 docs · suite 466/466 ficheros,
5445/5445 tests · apps:check verde. `component:audit` exit 0 con PASS 161 /
NEEDS-WORK 5, las cifras de antes.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3 weeks ago
|
|
|
# UIX
|
|
|
|
|
|
|
|
|
|
A Svelte 5 component system built around a **declarative contract**: a component
|
|
|
|
|
is declared once in `morfo` (parts, `data-*`/ARIA, keyboard, events with a
|
|
|
|
|
semantic family and intent), and the other layers read that declaration —
|
|
|
|
|
`soma` runs the behavior, `sema` projects the perceptual signal (sound, haptic,
|
|
|
|
|
live region), `eidos` paints against exactly those attributes.
|
|
|
|
|
|
|
|
|
|
> Morfo declares · Soma transcribes · Sema projects · Eidos paints.
|
|
|
|
|
|
|
|
|
|
This repository is **private and consumed as source**, not published to npm: an
|
|
|
|
|
app lives beside the framework as a workspace and imports it through the shared
|
|
|
|
|
alias table — [`docs/consuming.md`](docs/consuming.md).
|
|
|
|
|
|
|
|
|
|
## Start here
|
|
|
|
|
|
|
|
|
|
| If you want to… | Read |
|
|
|
|
|
| ------------------------------------ | ------------------------------------------------------------------- |
|
|
|
|
|
| Understand the corpus and find a doc | [`docs/README.md`](docs/README.md) — the map of everything |
|
|
|
|
|
| Run it and make a first change | [`docs/getting-started.md`](docs/getting-started.md) |
|
|
|
|
|
| Know what each zone of the tree is | [`docs/repository.md`](docs/repository.md) |
|
|
|
|
|
| Build an app on it | [`docs/consuming.md`](docs/consuming.md) · [`apps/base`](apps/base) |
|
|
|
|
|
| Build or finish a component | [`docs/building-a-component.md`](docs/building-a-component.md) |
|
|
|
|
|
| Test, validate, or reformat | [`docs/testing-and-tooling.md`](docs/testing-and-tooling.md) |
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
npm install
|
|
|
|
|
npm run dev # the demo site (web/routes — frozen, read-only)
|
|
|
|
|
npm run gate # everything the pre-push hook runs
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Agent rules: [`CLAUDE.md`](CLAUDE.md) and [`AGENTS.md`](AGENTS.md).
|