T-1 de PLAN-sidebar.md §6. El `Link` emitía `commit-select + affirm` al navegar.
El libro lo nombra: TABLA 9.3, «Success de navegación — cambio de contexto con
logro», corregido como «shift + commit.fulfill si procede»; cap. 27 §2 «shift no
es commit… ir a otra pantalla no implica que la operación haya terminado»; y la
apertura de cap. 10, «una navegación no es exitosa por cambiar de pantalla».
Nada queda fijado al pulsar un enlace del nav: `aria-current="page"` es la huella
que deja el router DESPUÉS, no un estado que la parte fije.
Ahora habla el par de cap. 22 §9 —«Link → contact.press seguido de shift.navigate:
la presión no es la navegación»—, el mismo que la fila del Sidebar declaró ayer:
- `contact-activate` ANCLADO en el enlace pulsado (parte repetida → `partInstance`).
- `shift-navigate` en el `provider`, sin anclar: `data-event-*` es UNA ranura por
elemento, y el sujeto del cruce es el `<nav>` que cruza como unidad, no el
control que lo inicia. Sólo si el `<a>` tiene `href` — aquí no es un opt, viaja
en restProps, así que se lee del elemento que la parte ya tenía atado.
Esto REABRE la decisión del 2026-08-05 (ledger A-54), no la pisa: mover el evento
fuera del marco estaba bien; la familia era el defecto.
El pack estuvo a punto de borrarse, y esa habría sido la equivocación de la
sesión. Al quitarle la regla del commit se quedaba con dos selectores vacíos y
propuse retirarlo como ruido. El autor paró y pidió releer: la pregunta no era
qué escribe el fichero, sino qué debe decir la aparición del megamenú. Se abre
por HOVER, y medido con el default de familia un barrido del puntero por dos
triggers y salir de la barra emitía `open` · `open` · `close` — tres sonidos, 6
osciladores, sin un solo clic. Cap. 17 §3 («emerge — normalmente no necesita
sonido»), cap. 26 §7, cap. 32 §10-§11, cap. 5 §11. Así que `emerge-open` y
`emerge-close` son SILENT, la postura que `tooltip` y el flyout del `sidebar`
(D-SB.3) ya tienen para el mismo gesto. El pack DIFIERE del default y vuelve a
ser un pack.
Enmienda D.6 de book-deviations.md (PROJECT_CANON): `navigation-menu` sale del
alcance del `commit.subtle`, y quedan corregidas tres cláusulas suyas caducadas
— el `emerge-open/close` declarado desde el 2026-08-05, el `commit.subtle` que
murió en 86fa9a1b7 sin sustituto, y el `emerge.soft` (0.08) que el catálogo
absorbió (la base `open` es 0.09). `menubar` tiene la misma clase de defecto en
su trigger y NO se toca: otro componente, otra sesión.
Medido en Chromium headless (la pantalla oculta congela rAF; sonda desde la raíz):
- clic en enlace → `contact-activate` (familia contact, sin intent) sobre el
`[data-navigation-menu-link]` con `press-squeeze` corriendo EN el enlace a +8 y
+30 ms y retirado a +120 · `shift-navigate` sobre `[data-navigation-menu]` ·
4 osciladores · cero estampados de familia `commit`.
- Enter sobre el enlace enfocado: idéntico (`handleListKeydown` no intercepta
Enter; el ancla nativa dispara el click). Sin `href`: sólo contacto, 2 osc.
- RTL: mismo par, sin `data-event-direction` — un `href` no tiene sentido propio.
- El SILENT demostrado por diferencial con la MISMA maquinaria: el barrido sigue
estampando `emerge-open`/`emerge-close` y baja de 6 osciladores a 0.
- Enlace pulsado con el panel abierto: cuatro ocurrencias en tres nodos distintos
(open@trigger · contact@link · shift@nav · close@trigger), 4 osciladores — las
dos silenciosas no compiten con el par del enlace.
La demo clavaba las cuatro previsualizaciones en el `<li>`: con eventos en tres
partes, el ▶ del contacto habría encogido el item entero. Ahora resuelve la parte
del contrato compilado (mismo arreglo que la revisión adversarial del sidebar).
Medido: contacto→link, shift→nav, emerge→trigger.
El README de soma describía el estado ANTERIOR al 2026-08-05 (target `item`,
emisión en `openNow`, cascada por `closest()`): reescrito entero.
Gates: check 72 errores con CERO en los ficheros tocados (el de nav-menu que
queda vive en eidos/navigation-menu-content.svelte, `sideOffset`, intacto) ·
suite nav 8/8, cuatro contratos nuevos · sema 327/327 · morfo:check exit 0 ·
morfo:vocabulary 0 (el WARN es de cropper) · component:audit --only
navigation-menu PASS · eidos-lint 32 morfo-backed / 0 invalid · docs:check 0/640
· rtl:check 0 · blocks:check 0/19.
Queda ABIERTO y no es de este eje: `emerge-open` estampa en el TRIGGER y le
corre `present-rise` encima —el botón «aparece» como si fuera él la superficie—,
y la receta pinta abierto/seleccionado con `background` plano sobre un radio
fijo. Los dos son anteriores a este commit y piden su propio eje (la doctrina ya
tiene la forma: `targetFallback`, resolución por estado de montaje).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>