You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/docs/repository.md

80 lines
5.4 KiB

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
---
title: The Repository
type: reference
audience: human + agent
authority: reference — the zones of this repository, who may write in each, and the invariants that hold them apart
status: current
---
# The Repository
One tree, one install, one gate. [`docs/README.md`](./README.md) is the map of
the **docs**; this is the map of the **repository**: what each zone is, who may
write in it, and the few invariants that keep the zones from bleeding into each
other. The path from clone to first change is
[`getting-started.md`](./getting-started.md).
## The zones
| Zone | What it is | Who writes it |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- |
| `src/uix/` | The layers — `morfo` (contract), `soma` (behavior), `sema` (perceptual engine), `eidos` (CSS) — plus the `active-uix` composition root and the `blocks` tier | the framework |
| `src/arts/` · `src/libs/` · `src/svrs/` · `src/packs/` | Runtime artifacts, zero-dependency helpers, server-authoritative engines, the opt-in pack tier | the framework |
| `web/routes/` | The demo site Kit serves (`kit.files.routes`). **FROZEN** — see below | nobody |
| `apps/*` | npm workspaces that consume the framework as source; `apps/base` is the reference consumer | app authors |
| `scripts/` | The tooling: validators, generators, the pre-push hook. Type-checked and owing zero, like `src/` | whoever adds or fixes a guard |
| `docs/` | The doc corpus (strata E0–E5), plus `docs/process/` for the ephemeral record | doc authors |
| `static/` | Fonts, sounds, images served by URL; an app copies what it needs into its own `static/` | the framework |
Two zones are NOT source: `src/docs/` holds the book manuscripts the canon comes
from, and `src/lib/_demo` holds the frozen demo site's own widgets (the `$demo`
alias).
## `web/routes/` is frozen
The demo tree is being rebuilt from scratch, so it is **read-only**: read it as
a reference for composition, never edit it. Two consequences that bite:
- the browser-driven validators (`morfo:check`, `perm:check`, `smoke`,
`layer:check`) and the demo rules of `component:audit` validate AGAINST that
frozen tree, so they stay manual until an app tree replaces them;
- `web/` is in `.prettierignore`, so the format policy does not reach it.
## One install, one workspace
The root `package.json` declares `workspaces: ["apps/*"]`: one `node_modules`,
one lockfile, one copy of `svelte`, `vite` and `@sveltejs/kit` for the framework
and every app. Two copies of Svelte would be two runes runtimes, and the
framework's `.svelte.ts` modules would not share state with an app's components.
Vite derives the workspace root from that field, which is what lets an app's dev
server read files under `src/` with no `server.fs.allow`. The contract an app
follows — aliases, runes, composition root, CSS and assets, the pre-hydration
boot — is [`consuming.md`](./consuming.md).
## One import map
Every `$…` / `@/` specifier resolves through ONE module,
[`uix.aliases.js`](../uix.aliases.js), imported by `vite.config.ts`,
`svelte.config.js`, `scripts/generate-boot.ts`, `scripts/docs-check.ts` and each
app's `svelte.config.js`. Order is load-bearing — Vite and esbuild match a
string alias as a PREFIX, so a longer specifier must precede any key that is its
prefix — and `src/uix/aliases.test.ts` fails on a second copy, a broken order,
or a target that is not on disk. The table summary lives in
[`CLAUDE.md`](../CLAUDE.md) → Path Aliases.
## The framework owes zero, the demo tree owes a shrinking ledger
`npm run check:gate` fails on any type error under `src/` or `scripts/`; errors
in the frozen `web/` tree are measured against a per-file ledger that may only
shrink. That policy, the whole gate chain and the pre-push hook are in
[`testing-and-tooling.md`](./testing-and-tooling.md) § The gate — with the
format policy and the inventory of generated artifacts in the same page.
## What is open
The framework's open rows live in one place, by id:
[`docs/process/LEDGER-cierre-2026-09.md`](./process/LEDGER-cierre-2026-09.md).
It is process — a record of what happened, never a source of truth for how the
framework works — but it is the only place that knows what was deferred and why.
The `CONTINUE-*.md` hand-offs beside it are frozen and point at it.

Powered by TurnKey Linux.