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

7.8 KiB

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. En este eje no queda nada; lo que queda son seis deudas de OTROS ejes que este destapó — y T-1 ya está cerrada (2026-08-19, navigation-menu habla ahora el mismo par que la fila). Quedan vivas T-2…T-6.

⚠️ LO PRIMERO: la fuente viva es el PLAN, no este fichero

docs/process/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 ✅ CERRADA 2026-08-19. Ya no emite commit-select + affirm al navegar: declara el mismo par que la fila del sidebar — contact-activate anclado en el enlace + shift-navigate en el <nav>. Cierra la fila de Gaps del app-shell por los dos lados y enmienda D.6 (PROJECT_CANON). La cita del antipatrón es TABLA 9.3, no cap. 10 §12.
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

Powered by TurnKey Linux.