|
|
|
|
@ -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 |
|