docs(process): el ledger de cierre y las colas congeladas — 160 filas, un solo pendiente (F6 del cierre)

Las colas dejan de vivir en 20 handoffs de 12 782 líneas que se contradecían
entre sí: cada `CONTINUE-*.md` lleva cabecera CONGELADO y apunta a
`LEDGER-cierre-2026-09.md`, que es desde hoy la fuente única de lo que queda
abierto, por id.

- NUEVO `docs/process/LEDGER-cierre-2026-09.md`: 160 filas. L-001…L-125 son el
  censo de los handoffs vivos (agente de exploración, antes del plan); L-126 en
  adelante las dejaron las fases. Estados: ARREGLADO 16 (con hash) ·
  CONFIRMADO 14 · DIFERIDO 120 (con razón) · DATO 7 · REFUTADO 2 · PENDIENTE
  1, que es el push del autor (L-123). Re-adjudicadas las 33 que el censo
  marcaba «bloquea cierre» y seguían pendientes: seis las cerró el plan
  (esbuild, hash del boot, adversarial de la fila 2, deuda de formato,
  generate:contracts-docs, prettier de consuming.md) y el resto queda diferido
  con su razón escrita. Lleva la definición de hecho A.1-A.7 con hashes.
- Los 20 `CONTINUE-*.md` con la cabecera; `CONTINUE-audit-p0.md` cierra con el
  bloque «CERRADO — definición de hecho cumplida» y la lista de fases.
- `docs/process/README.md` abre con el ledger.
- Los siete handoffs de julio en minúscula (`continue-*.md`) NO se congelan:
  no estaban en el censo y su pendiente no está transcrito (fila L-156).

Verificación: `docs:check` 0/0 en 821 docs · prettier limpio en docs/process ·
`grep -L CONGELADO docs/process/CONTINUE-*.md` vacío (20/20) · las 160 filas
tienen las siete celdas (validador escapando `\|`).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
alpha-0.1-background
dev 3 weeks ago
parent 8a7a31fb90
commit 67edc53d10

@ -1,5 +1,9 @@
# CONTINUE — `Affix`, la capa de colocación, y el eje que abrió: los knobs visuales
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> **Kickoff**: _«Lee `docs/process/CONTINUE-affix.md` y sigue por §3.»_
> **Fecha**: 2026-08-15 (cierre de jornada) · Rama `alpha-0.1-dir-prefs`,
> **pusheada en `65536ae6c`** — limpia contra el remoto, 0 por delante.

@ -1,5 +1,9 @@
# CONTINUE — P0 de la auditoría arquitectónica (handoff, act. 2026-09-16)
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
**⚡ BOOT EN PRODUCCIÓN — FILA 1 EJECUTADA `9ae58c236` (2026-09-16), FILA 2 EN VUELO.** El autor firmó el
diseño que salió de un PANEL DE 9 AGENTES (5 diseños independientes · 3 jueces con lentes distintas ·
síntesis), no la cura que yo había propuesto: la mía metía los parámetros en el cuerpo del script, lo que
@ -931,3 +935,25 @@ FORMA:
4. Motor JS: arts/motion NO importa arts/prefs (puertos). El puerto pasa a ser un `reduced` inyectado por la RAÍZ desde el efectivo de prefs (createActiveUix: motion recibe una fuente `() => prefs.motion.effective === 'reduce'` o suscripción), y `dom?.prefersReducedMotion` deja de ser la fuente por defecto en modo compuesto; standalone (sin raíz) conserva el fallback del SO con acta. Test: intent 'allow' con SO reduce ⇒ el motor NO degrada; intent 'reduce' con SO no-preference ⇒ degrada.
5. Docs: docs/theming/motion.md o el capítulo que documente reduced-motion (grep) + arts/motion/README.md + changelog: «eidos no lee medios: lee atributos; el efectivo lo decide prefs».
VERIFICACIÓN: vitest eidos + arts/motion + active-uix + value-channels; check (src/ a cero; ceiling web/ del ledger); check:gate; eidos:lint; prettier de lo tocado; adversarial con re-medida (grep cero media en eidos, cuenta de reglas antes/después, !important antes/después con acta por cada uno que queda).
## CERRADO — definición de hecho cumplida (2026-09-17)
El plan de cierre del framework (F0-F6) cerró este eje. Los siete criterios, con
sus hashes, están en [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md)
§«Definición de hecho del cierre»:
- F0 `086422e63` y previos — árbol legible.
- F1 `29e581c72` — el boot lo compila el build del sitio con su esquema; marca
de propiedad de `<html dir>`.
- F2 `9254bcc15` + `4f3425783` — un mapa de alias; `docs/consuming.md`.
- F3 `834e6c49a` — `apps/base`, primera app que consume UIX como fuente;
`apps:check` en el gate.
- F4 `adb680899` — el Button de eidos reenvía `bind:ref`; pin del aviso de
opciones de sonido; sema.md dice quién enciende announce.
- F5 `e31ac3ce3` · `6d4aa05fb` · `468a9d113` · `b9369682d` — scripts/ tipado y a
cero; formato de una sola vez con neutralidad medida; lint el primero en el
gate. `npm run gate` verde: 466 ficheros, 5445 tests.
- F6 — el ledger y la congelación de los handoffs.
Lo que queda abierto no se sigue desde aquí: está en el ledger por id. El push lo
hace el autor (L-123).

@ -1,5 +1,9 @@
# CONTINUE — la cola de auditorías, y el protocolo con el que se trabaja
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> **Kickoff para la sesión siguiente**: _«Lee `docs/process/CONTINUE-audit-queue.md`
> y empieza por §1 (S-33, firmado y sin ejecutar).»_
> **Fecha**: 2026-08-13 · Rama `alpha-0.1-dir-prefs`, pusheada en `eda3b977b`.

@ -1,5 +1,9 @@
# CONTINUE — eje `Background` (handoff, act. 2026-08-18)
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
**Estado: F0 → F5 CERRADAS Y COMMITEADAS.** El componente existe, tiene demo,
está documentado y el tier lo usa. Cuatro commits en `alpha-0.1-background`:

@ -1,5 +1,9 @@
# CONTINUE — Familia `commerce` del tier `blocks`
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> **Kickoff para sesión nueva**: _«Lee `docs/process/CONTINUE-blocks-commerce.md`
> y continúa la fase que toque.»_
>

@ -1,5 +1,9 @@
# CONTINUE — tier blocks (handoff, act. 2026-08-19 noche · el chasis de sección)
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
**Estado**: F1 CERRADA (8/8) · F2 CERRADA (15/15) · F2b CERRADA ENTERA ·
**F3 ABIERTA — F3.1 `app-shell` CONSTRUIDO, VERIFICADO Y REHECHO**, con su fase
0 firmada (Q1–Q4) y el canon `SkipLink` nacido delante de él.

@ -1,5 +1,9 @@
# CONTINUE — visibilidad por breakpoint (`visibleFrom` / `hiddenFrom`) (handoff, act. 2026-08-19)
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
**Estado: F1–F3 HECHAS, AUDITADAS, VERIFICADAS en Chrome real y COMMITEADAS**
(2026-08-19, `uix(box): ocultar por CSS descarga el vídeo igual…`). La auditoría
de cierre encontró tres desviaciones menores, las tres corregidas antes del

@ -1,5 +1,9 @@
# CONTINUE — la dirección deja de ser una convención
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
Handoff para una sesión nueva. **Leer entero antes de tocar nada**: el refactor
es pequeño en líneas y grande en alcance — toca un mecanismo del que cuelga todo
el catálogo.

@ -1,5 +1,9 @@
# CONTINUE — el eje de dirección (RTL/LTR)
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> **Kickoff**: _"Lee `docs/process/CONTINUE-direction.md` y sigue por §8."_
> **Fecha**: 2026-08-03 · Rama `alpha-0.1-dir-prefs` (sale de `alpha-0.1-sec-dom`).
> **§1, §6 y §7 son lo cerrado — no lo rehagas.** Lo abierto está en §2 (lo que

@ -1,5 +1,9 @@
# CONTINUE — reorganización del corpus de documentación
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
Hand-off para retomar en otra sesión. Trabajo iniciado 2026-06-13/14, rama `active-uix`.
## Objetivo

@ -1,5 +1,9 @@
# CONTINUE — normalización de nombres de evento
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> Handoff de [`PLAN-event-name-normalization.md`](./PLAN-event-name-normalization.md).
> **✅ EL EJE ESTÁ CERRADO** (`f44d1486d`) y su aceptación cumplida y medida.
>

@ -1,5 +1,9 @@
# CONTINUE — lectura del corpus doctrinal
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
Registro de lectura. Existe porque la lectura del corpus **no cabe en una sola
ventana de contexto** (~19.000 líneas) y sin este fichero cada sesión la
reempieza o se la salta — que es exactamente cómo se auditó a ciegas el

@ -1,5 +1,9 @@
# CONTINUE — F1.8 `nav-tree` (handoff 2026-07-22) · **CERRADO**
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> **F1.8 HECHA (2026-07-22).** Este handoff queda como registro de la tanda:
> demo, verificación en navegador real, review adversarial (10 hallazgos
> confirmados, todos arreglados) y cierre están completos. El registro

@ -1,5 +1,9 @@
# CONTINUE — opts canónicas: la forma de las opts deja de ser artesanía
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> ## ✅ EJE EJECUTADO Y CERRADO — 2026-08-05
>
> **Este documento es HISTÓRICO. No lo ejecutes: ya está hecho.** Se conserva

@ -1,5 +1,9 @@
# CONTINUE — la superficie perceptual es UNA RANURA
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> **Kickoff**: _«Lee `docs/process/CONTINUE-perceptual-surface.md` y sigue por §0.»_
> **Fecha**: 2026-08-10, actualizado 2026-08-11 (cierre) · Rama
> `alpha-0.1-dir-prefs`, pusheada en `61457baac`.

@ -1,5 +1,9 @@
# CONTINUE — el media-player (nació del hilo RTL, que ya cerró)
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> **Kickoff**: _"Lee `docs/process/CONTINUE-player-rtl.md` y sigue por la cola de §0."_
> **Fecha**: 2026-08-01 · actualizado 2026-08-04 · Rama `alpha-0.1-dir-prefs`
> (sale de `alpha-0.1-sec-dom`).

@ -1,5 +1,9 @@
# CONTINUE — auditoría del sistema semántico y sus arreglos
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> **Kickoff para la sesión siguiente**: _«Lee `docs/process/CONTINUE-sema-audit.md`
> y sigue por la cola de §3, empezando por las 17 reglas.»_
> **Fecha**: 2026-08-06 · Rama `alpha-0.1-dir-prefs` (compartida — otra sesión

@ -1,5 +1,9 @@
# CONTINUE — eje `Sidebar` (handoff, act. 2026-08-19)
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
**Estado: EJE EJECUTADO Y CERRADO.** Las 7 decisiones (más dos que salieron
durante la ejecución) están firmadas, las cinco fases hechas y verificadas en
navegador, y la revisión adversarial pasada con sus cuatro hallazgos arreglados.

@ -1,5 +1,9 @@
# CONTINUE — el hilo del audio: REDISEÑO en curso (`$sound` = orquestador)
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
> **Kickoff para la sesión siguiente**: _"Lee `docs/process/CONTINUE-sound-engine.md`
> y sigue por donde toque."_
> **Fecha**: 2026-07-31 (tercera sesión) · Rama `alpha-0.1-sec-dom`.

@ -1,5 +1,9 @@
# CONTINUE — eje Theming «theme-reach» — **CERRADO 2026-08-25**
> **CONGELADO 2026-09-17** — el cierre del framework congela este handoff: no se
> actualiza. Lo que sigue abierto vive en
> [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md), por id.
## EMPIEZA AQUÍ
**EL EJE ESTÁ CERRADO** (gate de F3 rediseñado y en verde el 2026-08-25;

@ -0,0 +1,203 @@
# LEDGER — cierre del framework, 2026-09
> **Fuente única de lo que queda abierto al cerrar el framework (2026-09-17).**
> Congela las colas: los 20 `CONTINUE-*.md` de este directorio llevan cabecera
> CONGELADO y no se actualizan. Lo que siga vivo se trabaja desde AQUÍ, por id.
## De dónde sale
El plan de cierre (aprobado por el autor el 2026-09-16) tuvo seis fases: F0 árbol
legible, F1 el boot compilado por sitio, F2 un mapa de alias y el contrato de
consumo, F3 la app base (`apps/base`), F4 un lote mínimo de honestidad de API y
F5 el gate completo con el formato de una sola vez. Regla de todas: **ninguna
fase abre filas; lo que aparece viene aquí.**
Las filas L-001…L-125 son el censo de los handoffs vivos hecho por un agente de
exploración antes del plan; las L-126 en adelante las dejaron las fases. La
columna «Bloquea cierre» es la clasificación de aquel censo, no una decisión: el
cierre quedó definido por los siete criterios de abajo.
## Estados
`PENDIENTE` (acción concreta con dueño) · `CONFIRMADO` (medido y cierto, sin
arreglar) · `REFUTADO` (medido y falso) · `DATO` (no es defecto) · `ARREGLADO`
(con hash) · `DIFERIDO` (fuera del cierre, con razón). Hoy: ARREGLADO 16 · CONFIRMADO 14 · DATO 7 · DIFERIDO 120 · PENDIENTE 1 · REFUTADO 2.
## Definición de hecho del cierre
| # | Criterio | Estado |
| --- | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| A.1 | `npm run gate` verde con `lint` dentro | b9369682d: exit 0 — 466/466 ficheros, 5445/5445 tests, check:gate con src/ y scripts/ a cero |
| A.2 | Un solo mapa de alias | 9254bcc15 (`uix.aliases.js`, guardado por `src/uix/aliases.test.ts`) |
| A.3 | Una app consume el framework como fuente y arranca limpia | 834e6c49a (`npm run apps:check`: boot 27/27 · 0 pageerror · 0 console.error · 0 CSP · ar-EG ⇒ rtl/ar) |
| A.4 | Boot reproducible | 29e581c72 (compilación byte-idéntica; la de `apps/base` también) |
| A.5 | Deuda de formato cero | 468a9d113 + b9369682d (`npm run lint` exit 0) |
| A.6 | `package.json` honesto | 29e581c72 (esbuild) · 834e6c49a (workspaces) · e31ac3ce3 (fuera csstype, esm-env, generate:contracts-docs) |
| A.7 | Colas congeladas en este ledger | este commit |
Queda una condición del autor: el push (L-123).
## Filas
| id | Ítem | Fuente | Bloquea cierre (censo) | Coste | Estado | Nota |
| ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | ---------------------- | ---------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| L-001 | `renderUixBootScript` lanza ENOENT en build empaquetado — la receta del boot no funciona en producción | `CONTINUE-audit-p0.md:34-40` | **SÍ** | medio | ARREGLADO | 9ae58c236 — render.ts sin node:fs; pack.test.ts rojo contra el anterior |
| L-002 | La receta documenta `event.locals.nonce`, que Kit nunca rellena ⇒ script bloqueado sin error | `CONTINUE-audit-p0.md:40-44` | **SÍ** | pequeño | ARREGLADO | 9ae58c236 — la guía corrige event.locals.nonce; receta principal por hash |
| L-003 | `html.replace(str)` interpreta `$'`/`$&`/`` $` `` y puede cerrar el script | `CONTINUE-audit-p0.md:44-47` | **SÍ** | trivial | ARREGLADO | 9ae58c236 — reemplazo FUNCIÓN en la receta |
| L-004 | Falta `bin: {uix-boot}` en `package.json` + `esbuild` devDep declarada | `CONTINUE-audit-p0.md:24-25`; `row2-report.md §6.1` | **SÍ** | trivial | ARREGLADO | 29e581c72 — `esbuild` 0.27.4 exacto en devDependencies. `bin: uix-boot` descartado: el framework se consume como fuente en un workspace (decisión del autor, plan de cierre); cada sitio compila su boot con `scripts/generate-boot.ts` |
| L-005 | Firmar el **hash movido** del boot (`5fulJ/…` → `qMFLiy…`) o rechazar la fila 2 | `row2-report.md §3` | **SÍ** | trivial (firma) | ARREGLADO | 29e581c72 — hash movido firmado al aprobar el plan; desde 834e6c49a cada sitio publica el hash de SU artefacto |
| L-006 | Lote boot fila 2 **sin adversarial** (7 puntos de ataque nombrados por el propio constructor) | `row2-report.md §7` | **SÍ** | medio | ARREGLADO | 29e581c72 — adversarial Opus en dos rondas sobre los siete ejes |
| L-007 | Modo **ATTACH sin diseño que lo cierre** (no hay hidratación síncrona del intent) | `CONTINUE-audit-p0.md:26-27` | **SÍ** | grande | DIFERIDO | fuera del cierre: `docs/consuming.md` §4 declara attach sin consumidor y sin boot; la app base es standalone |
| L-008 | **8 guards rojos en `contracts.test.ts`** (barrel soma sin `waveform`, `audio-player`/`skin-media-player` sin morfo, z-index crudo, 8 data-attrs, 4 namespaces) | `CONTINUE-audit-p0.md:803-836` | **SÍ** | medio | REFUTADO | cerrados el 2026-08-26 en 461078138; el handoff viejo quedó sin actualizar |
| L-009 | Hook `pre-push` sin armar; el gate entero nunca ha estado verde a la vez | `CONTINUE-audit-p0.md:843-845` | **SÍ** | pequeño | REFUTADO | hook armado y byte-idéntico a scripts/hooks/pre-push (medido 2026-09-16) |
| L-010 | `lint` fuera del gate: ~2.300 ficheros de deuda de formato; one-shot `npm run format` pendiente | `CONTINUE-audit-p0.md:871-875` | **SÍ** | pequeño (árbol quieto) | ARREGLADO | 468a9d113 (formato de una sola vez, neutralidad medida) + b9369682d (lint el primero en el gate) |
| L-011 | `settings-button`: 1 de 23 partes del morfo de `media-player` declarada sin implementar | `CONTINUE-player-rtl.md:38-44` | **SÍ** | medio | DIFERIDO | fuera del cierre (eje media-player) |
| L-012 | `audio-player` rojo en `eidos/lint.test.ts` — decisión de guard pendiente | `CONTINUE-player-rtl.md:57-63` | **SÍ** | pequeño | DIFERIDO | hoy verde (suite 466/466 en b9369682d); la decisión de guard sigue sin firmar |
| L-013 | Opciones del motor de sonido **descartadas en silencio** (`createActiveUix({events:{sound}})` compila y no hace nada) | `CONTINUE-sema-audit.md:172-176` | **SÍ** | pequeño | ARREGLADO | código ya en HEAD (engine.ts:486-507); pin nuevo desde la raíz en adb680899 (src/uix/active-uix/test/shared-sound-engine-options.test.ts, 5 mutaciones lo tumban) |
| L-014 | `AnnounceFn` vs `uix.announce`: el `announce` no compila y ninguna raíz cablea el canal | `CONTINUE-sema-audit.md:198-203` | **SÍ** | pequeño | ARREGLADO | adb680899 — sema.md §Announce: motor desnudo opt-in / raíces default ON con opt-out por modo; cada frase ejecutada por el adversarial |
| L-015 | `SemaSignatureOverride` con rama `Record<string,DeltaValue>` que anula la comprobación de tipos | `CONTINUE-sema-audit.md:182-184` | **SÍ** | pequeño | DIFERIDO | F4 adb680899: NO retirada — es la entrada de los ops documentados en sema.md:257-263 y el resolver los honra (0.5→0.6); retirarla rompe 0 sitios, no 8. Admite basura (`intesity`, `kind:"buzz"`, `intensity:"loud"` compilan). Arreglo: tipo exacto por hoja `Sig[P] \| DeltaOp` |
| L-016 | `Button` (canon) acepta `ref` en su tipo y **nunca lo reenvía** — A-106 | `CONTINUE-blocks.md:531`; ledger A-106 | **SÍ** | trivial | ARREGLADO | adb680899 — `ref = $bindable(null)` + `bind:ref`; test client (Received: null sin el arreglo); medido con asChild, loading y ButtonGroup |
| L-017 | `Dialog` devuelve el foco al `body` si el disparador se desmontó — A-108 | `CONTINUE-blocks.md:533` | **SÍ** | pequeño | DIFERIDO | a11y real, fuera del lote mínimo de F4 (plan: A-107/108/109 al ledger); ver L-138, el mismo síntoma con el disparador VIVO |
| L-018 | `Banner` estampa DOS landmarks `banner`; `role` tras los rest props — A-109 | `CONTINUE-blocks.md:534` | **SÍ** | trivial | DIFERIDO | a11y real, fuera del lote mínimo de F4 |
| L-019 | `Switch` sin parte de etiqueta en el morfo; todos los consumidores repiten el apaño — A-107 | `CONTINUE-blocks.md:532` | **SÍ** | pequeño | DIFERIDO | a11y real, fuera del lote mínimo de F4 |
| L-020 | `feature-split` sin `.Header`: sección sin nombre accesible — A-110 | `CONTINUE-blocks.md:535` | **SÍ** | trivial | DIFERIDO | a11y real, fuera del lote mínimo de F4 |
| L-021 | `architecture/blocks.md` no declara que la raíz de un block ES un `Section` | `CONTINUE-blocks.md:69-71` | **SÍ** | pequeño | DIFERIDO | doc del tier blocks, fuera del cierre |
| L-022 | Los 19 README de blocks describen el nido viejo y **mienten** | `CONTINUE-blocks.md:66-68` | **SÍ** | medio | DIFERIDO | doc del tier blocks, fuera del cierre |
| L-023 | `architecture/sema.md` narra holds por familia en ~34 sitios contra `sema/holds.ts` — **bloqueado por WIP del autor** | `next-features.md:134-141` | **SÍ** | medio | DIFERIDO | bloqueada por WIP del autor en sema (holds) |
| L-024 | `docs/spec/delegation-contract.md` es `authority: NORMATIVE` con `status: DRAFT` | `docs/spec/delegation-contract.md:4-6` | **SÍ** | pequeño | DIFERIDO | fuera del cierre |
| L-025 | `package.json` declara `generate:contracts-docs` apuntando a un script borrado | `CONTINUE-docs-corpus.md:117` | **SÍ** | trivial | ARREGLADO | e31ac3ce3 |
| L-026 | §18 next-features: eidos escribe 11 nombres públicos contratados + 18 formas sin dueño | `next-features.md:3473-3621` | **SÍ** | grande | DIFERIDO | espera firma §18 (eje theming) |
| L-027 | `grid-list`: la selección de fila **nunca ha pintado** (soma estampa `data-state`) | `CONTINUE-theming.md` §5.5 | **SÍ** | pequeño | DIFERIDO | fuera del cierre |
| L-028 | 4 canónicos sin demo (404): `picker-shell`, `mockup`, `surface`, `audio-player` — el guard miente en verde | `CONTINUE-theming.md` §5.7 | **SÍ** | medio | DIFERIDO | las demos viven en web/routes, congelado |
| L-029 | El plano `overlay` impone tipografía a 20 componentes; `tooltip` computa idénticas sus 3 variantes | `CONTINUE-theming.md` §5.1 | **SÍ** | medio (firma) | DIFERIDO | fuera del cierre |
| L-030 | `morfo:check` falla en `fab` y `menu-dial` (clasifica por prefijo, no por naturaleza) | `CONTINUE-affix.md:160-167` | **SÍ** | pequeño | DIFERIDO | morfo:check valida contra web/routes, congelado (L-125) |
| L-031 | Guard de presencia sin filas para `image`/`skeleton`/`qr-code`/`s-text` (0 de 4) + 3 ejes de `avatar` | `CONTINUE-affix.md:119-142` | **SÍ** | pequeño (firma) | DIFERIDO | espera firma (eje affix) |
| L-032 | §12 next-features: el contrato de cascada del velo — 6 incidencias que son la misma, sin fijar | `next-features.md:356-546` | **SÍ** | medio (firma) | DIFERIDO | fuera del cierre |
| L-033 | S-35: la forma etiqueta regala lo que la estructurada exige (`'commit'` compila siendo required) | `CONTINUE-audit-queue.md:128-136` | **SÍ** | pequeño | DIFERIDO | fuera del cierre |
| L-034 | 91 ficheros de test falsifican `Soma.require()` — esa parte de la batería no ejercita código real | `CONTINUE-direction.md:753-758` | **SÍ** | grande | DIFERIDO | fuera del cierre |
| L-035 | 23 filas `CONFIRMADO` abiertas en el ledger de blocks | `AUDIT-blocks-ledger.md` | No (tier) | grande | DIFERIDO | fuera del plan de cierre |
| L-036 | D13 · D14 `CONFIRMADO` en el ledger docs↔código (7 eventos que nadie emite; foco de chronos) | `AUDIT-docs-code-ledger.md:69-70` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-037 | 1.148 entradas en `theming-census-debt.ts` (sólo mengua) | `scripts/theming-census-debt.ts` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-038 | 40 entradas / ~71 errores en `check-debt.ts` — **100 % `web/routes`** | `scripts/check-debt.ts` | **No (descartado)** | — | DIFERIDO | 100 % web/routes, fuera del plan de cierre (decisión del autor) |
| L-039 | §17 next-features (C-1, corolario 2 sin aguja) — redactado, no ejecutado | `next-features.md:3343` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-040 | Cola de ejecución de theming: C-1 · `palabras`+`timeline` · 7 sitios del absoluto de cascada | `CONTINUE-theming.md:34-36` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-041 | 2 adjudicaciones en `value-channels.test.ts` (`--scrollbar-width`, 7 `--palabras-scheme-*`) | `CONTINUE-theming.md:2295-2303` | No | trivial (firma) | DIFERIDO | fuera del plan de cierre |
| L-042 | `text-effects` acuña 7 claves tipográficas contra el canon; `--font-mono` no existe | `CONTINUE-theming.md` §5.1bis | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-043 | `tree-view`: el velo derrama sobre el subárbol (336px vs 36) | `CONTINUE-theming.md` §5.4 | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-044 | `textarea`: el borde de foco sólo se ve con Tab | `CONTINUE-theming.md` §5.6 | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-045 | `onion-menu.css` y `timeline.css`: `:global(svg)` en CSS plano, el navegador descarta la regla | `CONTINUE-theming.md` §5.9 | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-046 | El harness del sitio tapa `code-block`/`code` (~162 páginas) | `CONTINUE-theming.md` §5.2 | No | medio | DIFERIDO | fuera del plan de cierre |
| L-047 | Extender la clase `system` del censo a las capas compartidas | `CONTINUE-theming.md` §5.8 | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-048 | 3 filas de blocks bloqueadas por firma del autor: A-67, A-47, A-09 | `CONTINUE-blocks.md:511-517` | No | pequeño (firma) | DIFERIDO | fuera del plan de cierre |
| L-049 | 15 filas «trabajo normal» del ledger de blocks (A-11…A-96) | `CONTINUE-blocks.md:539-548` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-050 | 4 filas nuevas del `app-shell`: A-113…A-116 | `CONTINUE-blocks.md:120-128` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-051 | F3 de blocks: 9 blocks sin construir (`error-page`…`kanban`) | `CONTINUE-blocks.md:136-142` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-052 | «Repasar cada bloque» pedido por el autor, sin ficha escrita | `CONTINUE-blocks.md:132-135` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-053 | Familia `commerce`: C0 entera pendiente (26 blocks, 8 huecos de canon, art `$commerce`) | `CONTINUE-blocks-commerce.md:324-338` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-054 | `$commerce` sería el primer art de DOMINIO — aceptar y anotar, o enmendar la doctrina | `CONTINUE-blocks-commerce.md:74-84` | No | trivial (firma) | DIFERIDO | fuera del plan de cierre |
| L-055 | Sidebar T-2: `nav-tree`/`anchor-nav`/`breadcrumb` siguen mudos | `CONTINUE-sidebar.md:78` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-056 | Sidebar T-3/T-4: `Link` sin runtime; la ficha A-62 supone que emite; A-50 a reabrir | `CONTINUE-sidebar.md:79-80` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-057 | Sidebar T-5/T-6: `recipe-css-contract` sólo ve tokens; `--control-height-*` no re-deriva en subárbol | `CONTINUE-sidebar.md:81-82` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-058 | navigation-menu: quedan menubar y enlaces del panel | `MEMORY.md` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-059 | S-19: encender el canal de announce en las raíces (riesgo de 2º par de live regions) | `CONTINUE-audit-queue.md:186-190` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-060 | Vocabulario de etiquetas de sema sin consumidores en producción; `validation.ts:39-46` código muerto | `CONTINUE-audit-queue.md:212-220` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-061 | §3.5 sema: instantánea perceptual (guard aprobado, sin construir) | `CONTINUE-sema-audit.md:205-211` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-062 | §3.7 sema: `contact` ausente en 84 de 91 morfos; `Toolbar.Button` reimplementa su `<button>` | `CONTINUE-sema-audit.md:224-232` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-063 | §3.2 sema: `preload()` se cuelga en `resume()`; fallback de sample mudo; 3 WAV muertos | `CONTINUE-sema-audit.md:170-181` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-064 | S-07: los 14 afinados con `gain` desnudo — NO TOCAR sin reabrir | `CONTINUE-sema-audit.md:234-239` | No | medio (firma) | DIFERIDO | fuera del plan de cierre |
| L-065 | Guard «pre + desmontaje sin Presence»; `dispose()` en vuelo repuebla `active` | `CONTINUE-audit-p0.md:71-73` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-066 | Pintura del cierre de Dialog/Toast sin ver en un Chrome que pinte — **sólo el autor** | `CONTINUE-audit-p0.md:69-70` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-067 | 1.428 B del audit dev viajan a producción sin correr | `CONTINUE-audit-p0.md:22-24` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-068 | ¿Debe el boot SELLAR `dir`? (~6 líneas) | `CONTINUE-audit-p0.md:25-26` | No | trivial (firma) | DIFERIDO | fuera del plan de cierre |
| L-069 | `themeResolver` atado a la instancia no compilable | `CONTINUE-audit-p0.md:27-28` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-070 | El script de boot pesa ~15 KB bloqueantes en `<head>` | `CONTINUE-audit-p0.md:28-29` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-071 | Helper `motionSource` en `ActiveEidos` (5 literales repetidos) | `CONTINUE-audit-p0.md:95-96` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-072 | Asimetría de `prefs.intent`: sanea en silencio mientras `setIntent` lanza | `CONTINUE-audit-p0.md:96`, `:159-161` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-073 | Prosa rancia en `theming-sentinel-exceptions.ts` (3 excepciones «emulando el media») | `CONTINUE-audit-p0.md:135-139` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-074 | Escena lee la fuente de motion en el MONTAJE, no en vivo | `CONTINUE-audit-p0.md:139-141` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-075 | La bolsa `sources` de soma se construye a mano en 96 sitios; 93 harnesses castean `as unknown as Soma` | `CONTINUE-audit-p0.md:146-148` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-076 | P1: ejes muertos de morfo (focus/keyboard/ARIA/`part-present`) | `CONTINUE-audit-p0.md:846-849` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-077 | Logger en `Soma.runtime()` — «una línea que resucita TODO el diagnóstico» | `CONTINUE-audit-p0.md:849-850` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-078 | a11y auditable: axe-core en el proyecto client + pasada AT | `CONTINUE-audit-p0.md:850-851` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-079 | Saneo de `svrs/auth` (adaptadores test, `crypto-web` real, guard de longitudes) | `CONTINUE-audit-p0.md:852-855` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-080 | P2 sema: canales antes de deltas, stack de persistencia, coincident real, `engine.explain` | `CONTINUE-audit-p0.md:864-867` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-081 | Distribución: registry + `llms.txt` + MCP (§9 next-features) | `next-features.md:254-271` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-082 | LangBase + generación de wrappers | `CONTINUE-audit-p0.md:866-867` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-083 | `gradient-builder.track` emite `data-kind` crudo fuera del enum del morfo | `CONTINUE-audit-p0.md:879-882` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-084 | `natural-time-picker` flaky en `morfo:check` | `CONTINUE-audit-p0.md:883-885` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-085 | `textarea-provider:164/191` escribe `style: height` imperativo — excepción abierta a la ley del prewrite | `CONTINUE-audit-p0.md:902-907` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-086 | Puente SSR/prerender de `visibleFrom`/`hiddenFrom`, escrito y no construido | `CONTINUE-breakpoint-visibility.md:83-89` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-087 | `Card`/`Banner`/`ScrollArea`/`Sticky` no heredan `visibleFrom` (raíz propia) | `CONTINUE-breakpoint-visibility.md:90-92` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-088 | La media dentro de `Background.Layer` DESBORDA la capa (hero 567px vs vídeo 714px) | `CONTINUE-breakpoint-visibility.md:75-81` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-089 | `Ambient` honrando la pausa (D-BG.8) — tarea del pack | `CONTINUE-background.md:125-128` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-090 | Puerto de estado para `<video>` (2 consumidores = umbral de extracción) | `CONTINUE-background.md:129-133` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-091 | Huecos `Display`/`Link` bajo `data-on` como candidatos de canon | `CONTINUE-background.md:134-135` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-092 | Cero tests de chart en el repo; `radar-chart` se sale del SVG también en LTR | `CONTINUE-direction.md:696-700`, `:759-760` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-093 | `html lang` no sigue al idioma; `sidebar`/`tree-view` estampan `dir=""` | `CONTINUE-direction.md:761-762` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-094 | `smoke` y `perm:check` sin ejecutar | `CONTINUE-direction.md:763` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-095 | C5 rebanada 3: subir a soma el comportamiento del chip | `CONTINUE-perceptual-surface.md:68-70` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-096 | `handle-drag-progress` (§2.2) y D5…D9 (§2.3) de nombres de evento | `CONTINUE-event-name-normalization.md:120-138` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-097 | Variante `bar` del player se estruja a 720px (time-slider ancho 0) | `CONTINUE-player-rtl.md:52-56` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-098 | Waveform-como-scrubber: 2 precisiones sin decidir | `CONTINUE-player-rtl.md:46-51` | No | medio (firma) | DIFERIDO | fuera del plan de cierre |
| L-099 | Matriz del player 4 variantes × claro/oscuro × RTL sin ver | `CONTINUE-player-rtl.md:65-68` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-100 | F6 del sound-engine + escenario mixto + teclas de medios — exigen los ojos del autor | `CONTINUE-sound-engine.md:24` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-101 | ≈5.355 L de corpus doctrinal sin leer | `CONTINUE-lectura-doctrina.md:43,209` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-102 | Fase 5 docs: decision-log consolidado + walkthrough «construye tu propia capa» | `CONTINUE-docs-corpus.md:105-109` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-103 | Rename físico de RFCs/design (~40 ficheros con citas de provenance) | `CONTINUE-docs-corpus.md:111-113` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-104 | Commitear el libro v2.3 (hoy untracked ⇒ el enlace de `CANON.md` no resuelve en remoto) | `CONTINUE-docs-corpus.md:115` | No | trivial (firma) | DIFERIDO | fuera del plan de cierre |
| L-105 | Migración de idioma es→en de los docs de capa | `CONTINUE-docs-corpus.md:116` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-106 | Fósiles `.md`: mover `src/audit-opus-4-6-26.md`, `THEMING_AUDIT_2026-06-01.md` | `CONTINUE-docs-corpus.md:119-121` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-107 | Adelgazar `CLAUDE.md` (~10 handoffs embebidos) | `CONTINUE-docs-corpus.md:123` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-108 | El vocabulario de `status:` del frontmatter no está cerrado (≥20 valores en prosa) | `docs/authoring.md:94-110` + grep | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-109 | Sólo ~46 de 445 `.md` de `docs/` llevan frontmatter con `status` | grep en `docs/` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-110 | `TODO(api)` de foco imperativo en `knob-provider.svelte.ts:400` | `src/uix/soma/components/knob/knob-provider.svelte.ts:400` | No | trivial | DIFERIDO | fuera del plan de cierre |
| L-111 | $agent: quedan F2 · F4 | `MEMORY.md`; `PLAN-agent.md` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-112 | chat-\*: queda §8 | `MEMORY.md`; `next-features.md:171` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-113 | Palabras multilang: queda F-B (⚠ rama compartida) | `MEMORY.md` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-114 | Clean-room: quedan THM-4 · F4-D | `MEMORY.md` | No | medio | DIFERIDO | fuera del plan de cierre |
| L-115 | Docs recon: queda F7.7 | `MEMORY.md` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-116 | §2 next-features: cascada de contraste por tema (con disparador escrito) | `next-features.md:79-89` | No | pequeño | DIFERIDO | fuera del plan de cierre |
| L-117 | §3 next-features: component audit post-system | `next-features.md:90-133` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-118 | §7 Chat block v2 · §10 Barcode diferido · §11 Background parallax | `next-features.md:171,272,313` | No | grande | DIFERIDO | fuera del plan de cierre |
| L-119 | `src/uix/morfo/source-census.test.ts` sin commitear: acta (c1a) + `lieOf()` + test nuevo, 3 semanas parado | `git diff` | **SÍ** (verificación) | trivial (commitear) | ARREGLADO | 7e8fbf9ad |
| L-120 | `docs/process/CONTINUE-blocks-commerce.md` sin trackear desde 2026-08-10 | `git status` | No | trivial | ARREGLADO | a6bc4ce90 |
| L-121 | 438 `scripts/__*` + 3 `tsconfig.__*.json` sin trackear (2,8 MB) | `git status` | No | trivial | ARREGLADO | 086422e63 — ignorados en .gitignore; los 14 trackeados siguen (autor) |
| L-122 | `tmp/` con 2.458 ficheros / 107 MB (gitignorado) | `find tmp` | No | trivial | ARREGLADO | borrado con autorización del autor (2026-09-16) |
| L-123 | 7 commits sin push, dos de ellos `feat!` | `git log gita/…..HEAD` | **SÍ** | trivial | PENDIENTE | push del autor. 834e6c49a ya está en el remoto; quedan adb680899 y e31ac3ce3…b9369682d. El hook corre el gate entero |
| L-124 | 5 ramas locales sin fusionar (`backup-rollout` + 4 `claude/*`) | `git branch --no-merged` | No | trivial | DIFERIDO | autor 2026-09-17: el one-shot de formato de F5 va SIN fusionar ni borrar nada. Obsoletas sin valor: `backup-rollout` (renderProps, API borrada en P0 C2b), `claude/keen-mcnulty-383812` (demo carrusel + allowlist), `claude/happy-curie-025fbf` (solo web/routes congelado); borrarlas = decisión del autor. Rescatables → L-134, L-135; worktrees sucios → L-136, L-137 |
| L-125 | `morfo-check`/`perm-check`/`component-audit` validan contra `web/routes`, que está congelado | `MEMORY.md` (ley HARD) | **SÍ** | medio | DIFERIDO | web/routes descartado del plan; esos validadores quedan manuales contra el árbol congelado |
| L-126 | ActiveEidos.dispose de la raíz vieja retira data-theme/mode/density/scaling de la raíz nueva (SvelteKit crea el layout nuevo antes de destruir el viejo) | commit 29e581c72 (LO QUE NO CIERRA 1) | — | medio | CONFIRMADO | preexistente; misma clase que el guard de dueño de la proyección de prefs; otra capa |
| L-127 | La propiedad de los atributos proyectados cuelga de la marca de dir: con dir de plantilla, dispose deja lang/data-motion al desmontar sin sustituta | 29e581c72 (2) | — | pequeño | DIFERIDO | benigno |
| L-128 | Sin boot, un script que escribe dir antes de la primera raíz es indistinguible de la plantilla y se adopta | 29e581c72 (3) | — | — | DATO | coherente con el canon §6 |
| L-129 | El vigilante de dev del boot no reacciona a ficheros nuevos ni a inputs fuera del root; en Windows una escritura da dos avisos | 29e581c72 (4) | — | pequeño | DIFERIDO | |
| L-130 | Doble foundation en prerender: index.css + uix-eidos-static inyectado por applyDom | plan F2/F3 | — | medio | CONFIRMADO | medido en apps/base (834e6c49a): CSS enlazado 482 535 B + `style#uix-eidos-static` 425 591 B + `#uix-eidos-theme` 31 780 B; los 5 153 tokens del estático están TODOS en el enlazado |
| L-131 | 14 scripts/\_\_\* siguen trackeados (destrackear = borrado del índice) | F0 | — | trivial | DIFERIDO | decisión del autor |
| L-132 | routes/web/marketing.md suelto en la raíz; scripts worker/worker:daemon apuntan a worker.js gitignorado | exploración | — | trivial | DIFERIDO | decisión del autor |
| L-133 | AGENTS.md conserva prosa caduca fuera de la sección de alias (librerías ling/logr/glob/actx que no existen) | F2 | — | pequeño | DIFERIDO | |
| L-134 | Rama `claude/cranky-cori-b70afe` (`6d5a8a19a`, 2026-07-04, 2 ficheros): aria-valuetext del knob formateado por Intl; HEAD ya tiene `formatValue()` (knob-provider) — puede estar superada | L-124 | — | pequeño | DIFERIDO | F5 formateó sin fusionar ramas (decisión del autor 2026-09-17); rescatar exige resolver espacios contra 468a9d113 |
| L-135 | Rama `claude/strange-thompson-58746c` (`2f43d7eb8`, 2026-08-25, 18 READMEs de theming): 13 filas de adjudicación re-derivadas; HEAD evolucionó esos ficheros después (`ef47f3447`) | L-124 | — | pequeño | DIFERIDO | ídem L-134 |
| L-136 | Worktree `.claude/worktrees/agent-aaaa749f035d12f18` con 9 ficheros SIN COMMITEAR de soma (color-field, color-picker, date-field, date-picker, date-range-picker, picker-shell ×2, time-field, time-picker) | `git -C … status` 2026-09-17 | — | medio | DIFERIDO | decisión del autor: commitear o descartar |
| L-137 | Worktree `.claude/worktrees/cranky-cori-b70afe` (rama `claude/sleepy-heisenberg-6118d4`) con 9 ficheros SIN COMMITEAR: docs/theming changelog+reference, fab (eidos+morfo), menu-dial css+svelte, gradient-builder morfo, color-field y combobox providers | `git -C … status` 2026-09-17 | — | medio | DIFERIDO | ídem L-136 |
| L-138 | **Dialog modal no devuelve el foco al trigger**: tras Escape o Cerrar, `activeElement` = BODY (Chromium, Firefox, WebKit). FocusScope.use (dialog-provider:387) enfoca el trigger mientras HideOthers (:405) aún tiene el inert; drawer-provider mismo orden (supuesto). Los tests de retorno de foco solo comprueban que se llamó a focus() | F3 H1 (834e6c49a) | — | medio | CONFIRMADO | bug de a11y del framework; fuera del cierre por la regla «ninguna fase abre filas» |
| L-139 | La foundation no trae reset ni tipografía en body y las recetas asumen border-box: sin reset el Dialog mide 409 px en 375 | F3 H2/D3 | — | pequeño | DIFERIDO | la app lleva su reset (apps/base/src/lib/reset.css, doctrina vigente F18); si la fundación lo asume, se borra ese fichero y se reescribe consuming §5 |
| L-140 | `Select.Value` muestra el value crudo (`es`) hasta abrir el popup: labelRegistry vacío con los ítems en portal cerrado; select-value.svelte no pinta `children` | F3 H3 | — | pequeño | CONFIRMADO | 3 motores |
| L-141 | Los catálogos de componentes no tienen `ar` (skip link en castellano bajo lang=ar); en producción sin aviso | F3 H4 | — | medio | CONFIRMADO | |
| L-142 | `docs/theming/guide.md` (:326, :531, :621, :634) pone `themeIds: eidos.listThemes()` dentro del hook, donde no hay instancia | F3 H5 | — | trivial | CONFIRMADO | consuming §6 da la forma correcta (listEidosThemes(config)) |
| L-143 | `docs/architecture/active-uix.md` regla 6 y snippet :101-113 caducados: `projectPrefs` es `@default true` | F3 H6 | — | trivial | CONFIRMADO | |
| L-144 | `uix.langs` no lleva el tipo del catálogo de la app: un `t('ruta')` mal escrito compila y se prerenderiza en crudo; producción no emite KEY_NOT_FOUND (solo DEV) | F3 D1 | — | medio | CONFIRMADO | apps/base usa langs.ts(record) tipado con APP_LANGUAGES |
| L-145 | `docs:check` I8 trata todo `docs/**` como voz del framework y prohíbe `$lib` también en código de app (consuming §4 lo lleva comentado) | F3 ronda 2 | — | pequeño | DIFERIDO | |
| L-146 | El HTML prerenderizado lleva el texto en el idioma por defecto aunque el boot ponga lang=ar: el boot corrige atributos, no texto | F3 ronda 2 | — | — | DATO | inherente a prerender de una sola página |
| L-147 | `themeIds` no decide nada con el tema base (solo con ids sin sufijo de modo, theme-id.ts:27-36): ni el audit ni el smoke detectan un themeIds mal puesto en apps/base | F3 eje 3b | — | — | DATO | medido con un tema `plain` en app2: el audit sí nombra data-theme |
| L-148 | WebKit no dispara `securitypolicyviolation` antes de `load` con módulos abortados; solo se ve contando sellos | F3 eje 2 | — | — | DATO | el smoke es Chromium y cuenta sellos |
| L-149 | `node_modules/@vicen/base` es un junction a apps/base: un borrado recursivo que siga junctions borra la app | F3 | — | — | DATO | |
| L-150 | El build de Kit no es reproducible: el hash de su script inline de arranque cambia entre builds idénticos | F3 | — | — | DATO | no afecta al hash del boot |
| L-151 | `docs/consuming.md` incumple Prettier desde HEAD 4f3425783 (`;` del snippet de runas) | F3 H8 | — | trivial | ARREGLADO | 468a9d113 |
| L-152 | El defecto de A-106 en masa: wrappers de eidos pasan `...rest` a una parte de soma con `ref = $bindable` sin `bind:ref` ⇒ `bind:ref` del consumidor recibe null | F4 censo estático (adb680899) | — | medio | CONFIRMADO | 532 ficheros en 99 componentes (top: media-player 24, sidebar 17, color-picker 16); muestra runtime 3/3 (checkbox-group-label, field-required-indicator, proof-of-human); 27 ficheros sin resolver por el censo (chronos, date-range-picker…) |
| L-153 | `applyOverride` (resolver.ts:343-346) clona un DeltaOp LITERAL como firma cuando la familia no tiene slice haptic base (`emerge` + `channels:['haptic']` + `{ intensity: { op: 'add' } }`) ⇒ HapticChannel.handle lanza `TypeError … 'pattern'`, 0 vibraciones | F4 adversarial L-ADV-3 | — | pequeño | CONFIRMADO | bug de runtime de sema; fuera del lote |
| L-154 | «opt-in» sin calificar para announce en `docs/decisions/book-deviations.md:508` y `src/uix/sema/chans/announce.ts:13` (cierto solo para el motor desnudo) | F4 adversarial L-ADV-4 | — | trivial | CONFIRMADO | |
| L-155 | Announce sin pin directo en attach (default ON) ni en motor desnudo (opt-in); la viñeta de attach de sema.md nombra solo `defineEngineSemantic` y omite `defineUixServices({ events: { announce: false } })`, que también sirve | F4 adversarial L-ADV-5/6 | — | pequeño | DIFERIDO | hoy ciertas (medido); solo contracts.test.ts:670-702 pinea standalone |
| L-156 | Siete handoffs de julio en minúscula (`docs/process/continue-*.md`: agente, arts-docs-reconciliation, audit-fixes, cleanroom-fixes, proof-of-human, runed-tabbable-port, with-stumbles-s2-s6) quedaron fuera del censo del plan | F6 | — | — | DATO | no llevan cabecera CONGELADO ni están transcritos aquí: son históricos (varios se declaran cerrados en su cabecera) |
| L-157 | `docs-check` I10 cosecha los identificadores del código LÍNEA A LÍNEA (`identifiersOf`), así que el conjunto de verdad sigue a cómo prettier parte o junta las listas de import/export: 219 de 267 READMEs cambiaron su conjunto (55 crecen, 76 encogen) | F5 medición de guards (8a7a31fb9) | — | pequeño | CONFIRMADO | ceguera LATENTE, no realizada: las 979 filas de prop evaluadas dan el mismo veredicto en ambas revisiones (0 volteos). Cerrarla exige cosechar del AST, no por línea |
| L-158 | `pack-census.test.ts` detecta emisiones con `source.includes("'evento'")`: solo la comilla SIMPLE. Una emisión escrita con comilla doble o backtick produce un falso «nadie lo emite» | F5 medición de guards | — | trivial | CONFIRMADO | medido: dos emisiones de chronos estaban con comilla doble y el formateo las normalizó. Solo puede dar rojo falso, nunca tapar |
| L-159 | `recipe-css-contract.test.ts` delimita el lado derecho de un `export type` con el PRIMER `;`: un infractor repartido en ≥2 miembros de un tipo objeto queda fuera del barrido | F5 medición de guards | — | trivial | CONFIRMADO | hipotético hoy: 0 fugas medidas en el árbol (ningún literal de rol vive en el cuerpo de un `export type` fuera del span) |
| L-160 | `.prettierrc` usa `endOfLine: "auto"`: un CR huérfano en un fichero hace que Prettier lo reescriba ENTERO en CR, y entonces el fichero es UNA sola línea para cualquier guard que parta por saltos de línea | F5 (8a7a31fb9) | — | pequeño | DIFERIDO | pasó en `REVIEW-theming-2026-08-24.md` (normalizado a LF ahí mismo); fijar `endOfLine: "lf"` reescribiría el árbol entero: fila aparte |

@ -14,6 +14,9 @@ doc should read as if it were always true.
## Contents
- [`LEDGER-cierre-2026-09.md`](./LEDGER-cierre-2026-09.md) — **start here.** The
single record of what stays open after the framework closure (2026-09-17):
every `CONTINUE-*.md` is frozen and points to it by row id.
- [`handoffs-2026-05.md`](./handoffs-2026-05.md) — session hand-off blocks that
used to be embedded inline in the layer READMEs and architecture docs. Pulled
out so the reference docs stay timeless.

Loading…
Cancel
Save

Powered by TurnKey Linux.