En este eje no queda nada: nueve decisiones firmadas, cinco fases ejecutadas y verificadas, y la revisión adversarial pasada con sus cuatro hallazgos arreglados. Lo que queda es de OTROS ejes, y por eso el handoff los lista con nombre y sitio en vez de dejarlos en la cabeza de quien estuvo aquí: T-1 (`navigation-menu` emite `commit-select` al navegar — el antipatrón «success de navegación»), T-2 (nav-tree · anchor-nav · breadcrumb siguen mudos por el contrato que aquí se retiró), T-3 y T-4 (dos fichas del ledger de blocks que suponen lo contrario de lo que ahora hay), T-5 (el guard del bundle sólo ve tokens, no reglas) y T-6 (la densidad y el zoom no bajan a un subárbol, y eso no está escrito en ninguna doc). El handoff también deja por escrito las dos veces que hoy mintió el INSTRUMENTO y no el código: con la pantalla del navegador oculta rAF se congela y `getBoundingClientRect` daba 256px para un panel de 52; y leer `animationName` dentro del callback de un MutationObserver mide el instante anterior al flush, que es como di por viva una animación que moría 3,5 ms después. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>alpha-0.1-background
parent
bae03e55c5
commit
e2754a2b6f
@ -0,0 +1,108 @@
|
||||
# CONTINUE — eje `Sidebar` (handoff, act. 2026-08-19)
|
||||
|
||||
**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.
|
||||
Tres commits en `alpha-0.1-background`:
|
||||
|
||||
| Commit | Qué cerró |
|
||||
| ----------- | ------------------------------------------------------------------------------------------- |
|
||||
| `f6d5fa159` | F1 + F2 — sema: el par del libro en la fila, el flyout con sus `emerge`, el raíl con su contacto |
|
||||
| `63b2de03c` | F3 + F4 — el eje `size` sobre el bundle, el raíl de iconos derivado, docs y demo |
|
||||
| `bae03e55c` | Los 4 hallazgos reales de la revisión adversarial |
|
||||
|
||||
**Por dónde entrar mañana: [§Qué queda](#qué-queda).** En este eje **no queda
|
||||
nada**; lo que queda son **seis deudas de OTROS ejes** que este destapó, y una
|
||||
de ellas (T-1) es la que el autor ya tiene sobre la mesa.
|
||||
|
||||
## ⚠️ LO PRIMERO: la fuente viva es el PLAN, no este fichero
|
||||
|
||||
**[`docs/process/PLAN-sidebar.md`](./PLAN-sidebar.md)** — el veredicto razonado
|
||||
(§0), el inventario de defectos medidos (§1), los dos contratos objetivo (§2
|
||||
sema, §3 talla), las decisiones firmadas **D-SB.1…D-SB.7 + D-SB.1bis +
|
||||
D-SB.5bis** (§4, con §4.1 = la refutación de la lectura `commit.select`), las
|
||||
fases con sus gates (§5), **la deuda transversal T-1…T-6** (§6) y el registro de
|
||||
ejecución con todas las mediciones (§Registro). Este handoff indexa; el plan
|
||||
manda.
|
||||
|
||||
## Qué cambió, en una pantalla
|
||||
|
||||
**Sema.** La fila del sidebar era MUDA. No era doctrina: era una decisión de la
|
||||
fase 1 (2026-07-22) tomada en silencio sobre una premisa falsa —«item = Link
|
||||
puro»—, cuando la fila es `<button>` sin `href`, la acción es un botón pelado y
|
||||
el `MenuItem` posee un flyout. El libro no deja margen (cap. 22 §9 «Link →
|
||||
contact.press seguido de shift.navigate», cap. 27 §8, cap. 22 §12 «Contacto
|
||||
mudo»), así que ahora:
|
||||
|
||||
| Evento | Dónde se sella | Voz |
|
||||
| --------------------------------------- | ------------------------------------- | ---------------------------- |
|
||||
| `contact-activate` | la fila / sub-fila / raíl **anclado** | familia (`touch` + tick) |
|
||||
| `shift-navigate` | el **provider** (lo que cruza) | familia (`slide`) |
|
||||
| `emerge-open-sub` / `emerge-close-sub` | el `menu-sub` (por identidad) | **SILENT** (pack) |
|
||||
| `emerge-expand` / `emerge-collapse` | el `panel` (sin cambios) | `emerge.soft` / `exit.soft` |
|
||||
|
||||
**Por qué el cruce NO va en la fila** (D-SB.1bis, salió al leer F0): «reach for
|
||||
`regime` last». El gesto se sella donde está la mano y el cruce en la superficie
|
||||
que cruza como unidad, así los dos no comparten la única ranura de
|
||||
`data-event-*`. `calendar` ya había movido su `shift-navigate` fuera del botón
|
||||
por esto mismo — su `press-squeeze` no llegaba a pintarse.
|
||||
|
||||
**Talla.** El componente vivía fuera del canon: `--space-8` (escala de ESPACIO)
|
||||
como altura de CONTROL, `font-size` escrito en el recipe donde el guard no lo
|
||||
ve, `sm`/`xs` clavados en las composiciones y la acción con los 13,33px del
|
||||
user-agent. Ahora hay prop `size` (xs..lg, default **md**), `data-size` en el
|
||||
wrapper, tokens por talla apuntando al bundle `--size-{k}-*`, y el raíl de
|
||||
iconos **derivado** en vez de `3rem`.
|
||||
|
||||
Medido end-to-end desde el prop: fila **26/12 · 30/14 · 36/16 · 44/20**, glifo
|
||||
14/16/18/20, rótulo 10/12/14/16, raíl 42/46/52/60, y las composiciones capadas
|
||||
en `md` (a `lg` el trigger y la acción se quedan en 36px; el badge baja un paso
|
||||
por la excepción firmada D-SB.5bis).
|
||||
|
||||
## Qué queda
|
||||
|
||||
### En este eje: NADA
|
||||
|
||||
Los gates quedaron en verde y así se commitearon: `check` con **delta CERO**
|
||||
contra la base medida con stash (72/72) · eidos-lint **49 morfo-backed / 0
|
||||
invalid** · `component:audit --only sidebar` **PASS 0E/0W** · `rtl:check` 0 ·
|
||||
`docs:check` 0/639 · suite nueva del sidebar **8/8** · `vitest src/uix/eidos`
|
||||
434/435 (el rojo es `skin-media-player`, **ajeno** e idéntico en la base).
|
||||
|
||||
### En OTROS ejes: seis deudas, cada una con su firma (§6 del plan)
|
||||
|
||||
| Id | Dónde | Qué |
|
||||
| -------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| **T-1** | `navigation-menu` | Emite `commit-select + affirm` al NAVEGAR: cap. 27 §2 «shift no es commit» y cap. 10 §12 lo nombra antipatrón («success de navegación»). Es lo único que queda vivo de la fila de Gaps del `app-shell`. **Sesión de sema.** |
|
||||
| **T-2** | `nav-tree` · `anchor-nav` · `breadcrumb` | Siguen mudos por el mismo contrato que aquí se retiró. Mismo arreglo, un eje cada uno. `nav-tree.css:17` arrastra además el pin `sm`. |
|
||||
| **T-3** | `Link` (primitivo) | Es `scope: ['eidos']`: sin runtime, no PUEDE emitir. La ficha **A-62** del ledger de blocks supone que sí — corregirla ahí. |
|
||||
| **T-4** | Ledger blocks **A-50** (REFUTADO) | Se apoyaba en «el silencio de `Link` es contrato escrito, no deriva». Bajo el veredicto del autor ese contrato ES el defecto: reabrir. |
|
||||
| **T-5** | `recipe-css-contract` | El guard del bundle sólo ve TOKENS, no reglas CSS. (Al mover el `font-size` al token, sí cazó el único primitivo crudo que escribí.) |
|
||||
| **T-6** | `--control-height-*` en `:root` | Un `data-density` o un `--scaling` en un SUBÁRBOL no re-derivan las alturas: el custom property hereda su valor ya sustituido. Paridad exacta con `Button` (los tres a 36px), pero ninguna doc lo enuncia. |
|
||||
|
||||
## Trampas que costaron tiempo hoy (no repetirlas)
|
||||
|
||||
1. **La pantalla del navegador oculta congela rAF y el layout.**
|
||||
`getBoundingClientRect` devolvía **256px para un panel de 52**, y ni
|
||||
`inline-size: 52px !important` lo movía. No era el CSS: era el instrumento.
|
||||
Toda la verificación se hizo con **Playwright headless**, y el script tiene
|
||||
que vivir en la RAÍZ del repo (`playwright` no resuelve desde el scratchpad).
|
||||
2. **Leer `animationName` dentro del callback de un MutationObserver mide el
|
||||
instante ANTERIOR al flush.** Reporté `dismiss-fade` como viva y estaba
|
||||
muerta 3,5 ms después. Se muestrea en varios instantes
|
||||
(+8/+30/+120/+400/+800 ms) leyendo `display`, `opacity` y `getAnimations()`.
|
||||
3. **`npm run check` puede morir por `tmp/lexical/`** (scratch de otra sesión con
|
||||
un `svelte.config.js` que importa un paquete ausente). Si el log no llega a
|
||||
`COMPLETED`, es eso: volver a lanzarlo.
|
||||
4. **La rama es COMPARTIDA.** Otra sesión commiteó `23667277c` mientras esta
|
||||
trabajaba. Nada de `amend`, y mirar `git log` antes de tocar historia.
|
||||
|
||||
## Fuentes
|
||||
|
||||
- Plan y decisiones: [`PLAN-sidebar.md`](./PLAN-sidebar.md).
|
||||
- Registro del tier: [`PLAN-blocks.md`](./PLAN-blocks.md) §F1.7 (última línea).
|
||||
- Contrato publicado: [`src/uix/soma/components/sidebar/README.md`](../../src/uix/soma/components/sidebar/README.md)
|
||||
§Sema events · [`src/uix/eidos/components/sidebar/README.md`](../../src/uix/eidos/components/sidebar/README.md)
|
||||
§Talla + §Sema events.
|
||||
- Suite: `src/uix/soma/components/sidebar/sidebar-provider.svelte.test.ts` (8
|
||||
contratos: dónde aterriza cada ocurrencia y cuándo NO se dice nada).
|
||||
Loading…
Reference in new issue