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-event-name-normali...

176 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# CONTINUE — normalización de nombres de evento
> Handoff de [`PLAN-event-name-normalization.md`](./PLAN-event-name-normalization.md).
> **✅ EL EJE ESTÁ CERRADO** (`f44d1486d`) y su aceptación cumplida y medida.
>
> ⛔ **Lo que sigue NO es este eje, y no se ejecuta desde aquí.** Son cosas que el
> barrido destapó; cada una necesita su propia iniciativa y su propia puerta.
> Esta sección existe para que no se pierdan, **no para que se hagan a goteo**.
>
> El 2026-08-12 se hizo exactamente eso y salió caro: la jornada se cerró a las
> 03:52, y de 13:59 a 20:43 la sesión siguió trabajando el ledger como si fuera
> el plan — `months` en cuatro calendarios, `defaultElement` en 28 partes,
> Home/End en tres componentes, y al final el borrado de la librería de sonido,
> que el autor revirtió (`0d10b983e`). Ninguno de esos pasos parece un salto; el
> desvío es que **un handoff se leyó como backlog**. El trabajo salió bien y
> verificado — no es el punto. El punto es que nadie decidió cambiar el objetivo.
## 0 · Estado en una línea
`{familia}-{verbo}[-{matiz}]` es ley: **256 eventos declarados, 256 con prefijo,
0 ambiguos**, y la puerta está cerrada con un guard en `validateMorfo` más un
barrido que se lo pasa a los **172 morfos** del repo (`components` + `internal` +
fixtures). Visto fallar antes de darlo por bueno.
Commits: `6f42eebfe` (el eje) · `f4e414e2e` (D1·D3·D4) · `f44d1486d` (cierre:
las dos mitades que el troceado por hunks dejó al otro lado del corte, y el
barrido de catálogo).
Rama compartida `alpha-0.1-dir-prefs`: **hay trabajo de otra sesión sin
commitear en el árbol** (A-85, `consumerWins`, `aria-label` en el bag). No lo
barras.
## 1 · Lo que NO se toca desde aquí
Cada punto de esta sección pertenece a otra iniciativa o a una decisión del
autor. **Ninguno se ejecuta sin abrir la suya**, con su plan y su puerta — y el
que toque el eje de sonido empieza por
[`CONTINUE-sound-engine.md`](./CONTINUE-sound-engine.md), que es lo que no se
hizo el 2026-08-12.
| Punto | Dueño |
| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |
| **D10** · los 3 resolvers de gesto | ~~el eje de SONIDO~~ **CERRADO 2026-08-12**: retirada firmada y ejecutada desde el eje (ledger §D10) |
| **D13** · `tooltip` 3 de 3 mudo | `CONTINUE-sema-audit.md`, que ya lo tipificó como contrato muerto |
| **D13** · `virtual-list`/`grid` `handle-scroll*` | vocabulario de MORFO: falta un `emission: 'app'` que declare «lo emite la app». No es cableado |
| **D13** · `gradient-picker.commit-reset` | `CONTINUE-sema-audit.md` §S-14 (1 de 6 verbos delegados) |
| **D14** · el foco del teclado de chronos | chronos. Es de foco, no de firma, y pide medición en navegador real |
| **§1.2** · `present-rise` sobre el trigger | decisión de diseño del autor |
| **§2.2** · `handle-drag-progress` | decisión de vocabulario contra `docs/CANON.md` §verbos |
### 1.1 · Los 3 resolvers de gesto — `D10`
Ficha completa en [`AUDIT-docs-code-ledger.md`](./AUDIT-docs-code-ledger.md) §D10.
Resumen: el cambio del 2026-08-06 dejó `resolveHandleDragSound` /
`resolveSliderDragSound` / `resolveSplitterDragSound` sin llamador, y cinco
documentos siguen describiéndolos como vigentes — incluido `PLAN-sound-engine.md`
§4, donde son la columna «sema conserva» de la **línea de corte** con `$sound`.
**¿Se retiran o se recablean?** La tabla de corte hay que actualizarla en los dos
casos. De esta decisión cuelgan también el homónimo `SoundContour` (5 sitios,
propuesto `GestureContour`) y los dos comentarios rancios del splitter.
**Firmada (2026-08-12): SE RETIRAN** — ficha §D10 del ledger, que fija además un
sexto sitio a adjudicar (`sema.md` §per-emit payload, que aún describía el
payload de la era resolver). **Y EJECUTADA el mismo día desde el eje** (su
handoff leído primero); el ledger §D10 lleva el detalle y los 8 sitios
adjudicados.
### 1.2 · `present-rise` sobre el TRIGGER
Regresión medida durante F4, **no arreglada**. El sello de apertura de select /
combobox / navigation-menu queda anclado al trigger con `fill: forwards`. La
causa está diagnosticada: el dialecto partido (`open` pelado contra
`emerge-open`) actuaba **accidentalmente como filtro**, y al unificar los nombres
la firma alcanza sitios que antes se le escapaban. El eje de superficie
perceptual ([`CONTINUE-perceptual-surface.md`](./CONTINUE-perceptual-surface.md))
tiene el contexto: un sello anclado al trigger es un vestigio de la era `pre` —
mídelo antes de razonarlo.
Lo que hay que decidir: ¿la firma de `present` se mueve al contenido, o el
trigger se excluye por selector? Es la misma pregunta que resolvió `shift` al
mover su sello del BOTÓN al `grid`.
**Disposición firmada (2026-08-12): medir primero en navegador.** Lo esperable
es la receta F4 otra vez (open `pre` cuyo content no ha montado, aterrizando en
el trigger — select/combobox están en la cola de F3 justo como «leer
providers»), pero la medida decide, no el razonamiento.
**MEDIDO Y ARREGLADO para select/combobox (2026-08-13).** La medida matizó la
expectativa: el open YA era `post` — el vestigio era el `targetOverride` al
trigger del provider, LEGALIZADO por un `allowedTargets` del 2026-08-10 (el eje
equivocado). ANTES: open/close sobre TRIGGER y `present-rise` corriendo sobre
el botón; DESPUÉS: open/close sobre CONTENT, present fuera del trigger.
Receta aplicada: fuera el override y el `allowedTargets` del open; el close
declara `targetFallback` ([trigger] / [trigger, input]); la selección ancla por
`partInstance` al item elegido. **Queda navigation-menu** (mismo síntoma
declarado aquí; su sitio vive en la cola de colecciones de F3).
## 2 · Abierto, sin bloquear
### 2.1 · `grid` es una parte REPETIDA — **CERRADO** `e5811e422`
El sello de `shift-navigate` se movió del botón al `grid` en los cuatro
calendarios; con `numberOfMonths=2` había **dos** `grid` y sólo se sellaba uno
(medido: junio cambiaba de fechas quieto y julio cruzaba). El arreglo no
administra el sello: declara la parte que ES el sujeto — `months`, la vista
paginada, arquetipo `viewport`, con `targetFallback: [grid]`. Medido después:
los dos grids se desplazan 10 px a los 40 ms, y −10 px en RTL.
Se legalizaron de paso dos partes clandestinas (`months`, `month-panel`) que los
cuatro demos fabricaban a mano y que la receta estilizaba igualmente.
La ley general quedó escrita en `docs/architecture/morfo.md`
§_A repeated part cannot be the subject of one occurrence_: si el destino es una
parte repetida, hay que preguntar si la ocurrencia tiene **un** sujeto (→
anclarla, como hace `table` con su fila) o **todos** (→ el sujeto es el
contenedor, y tiene que existir). 50 de los 252 destinos del catálogo son partes
repetibles; todos los demás son del primer tipo.
### 2.2 · `handle-drag-progress`
El nombre quedó así por inercia del renombrado. `progress` no es un verbo del
canon; el canon para la emisión continua de un arrastre está sin decidir.
Revisar contra `docs/CANON.md` §verbos antes de tocarlo.
**Disposición firmada (2026-08-12): revisar, no renombrar por uniformidad.** El
nombre es legal bajo la ley (`handle`-`drag`-`progress` = familia + verbo +
matiz) y el matiz del drawer puede ser deliberado — progreso hacia el umbral de
dismissal, no el drag de valor del slider. Sólo se toca si la decisión de canon
para la emisión continua aterriza en otro nombre.
### 2.3 · D5 · D6 · D7 · D8 · D9
Cuatro defectos confirmados y uno con un defecto más hondo debajo (D5: el modal
promete un buffer que no existe). Fichas y evidencia en
[`AUDIT-docs-code-ledger.md`](./AUDIT-docs-code-ledger.md). Ninguno se toca sin
que lo pidas: son código obsoleto contra documentación correcta.
## 3 · Lo que este eje enseñó, y hay que no repetir
1. **Un nombre partido en dos dialectos no rompe ningún test.** Un preset de
movimiento engancha el nombre con `^=`; el dialecto pelado no casaba con
ninguna firma y simplemente no animaba. Tres auditorías lo vieron, ninguna lo
cerró. La invariante es la puerta — por eso el guard, y por eso verlo fallar.
2. **Un validador sin ejecutor vigila a nadie.** `validateMorfo` no lo llamaba
nada sobre el catálogo real (`registerMorfo` llama a `compileMorfo`), así que
todas sus invariantes se comprobaban contra fixtures escritas a mano. Debajo
había dos fixtures ilegales, verdes.
3. **Trocear un commit por hunks parte cambios lógicos por la mitad**, y los
`check` que corres son de TU árbol, no del que firmas. Dos commits seguidos
salieron rotos con «tests en verde» en el mensaje. Se arregla materializando
el árbol INDEXADO en un worktree y midiendo allí.
4. **«No lo referencia nadie» es una observación, no un veredicto.** Ver la
regla 4 del ledger, y `D10`, que nació de saltársela.
4b. **Un handoff no es un backlog.** Es la lección más cara de esta jornada y no
es técnica. El ledger se creó a las 03:55 para que una sesión futura tomara
los defectos con su propia puerta, y a las 13:59 esta misma sesión lo empezó a
consumir como lista de trabajo. Nadie decidió cambiar el objetivo: se cambió
solo, un «arregla esto» cada vez, porque cada arreglo destapaba dos hallazgos
y se iban anexando filas (D11…D14) en vez de leer la lista creciente como la
señal de parar que era. Terminó en el borrado de una librería de otro eje.
**Cuando el trabajo deje de responder al plan que lo abrió, se cierra el plan
y se abre otro** — no se sigue tirando del hilo.
5. **Una parte declarada sin registro en runtime es un destino inalcanzable** y
no chilla: el emit se rechaza en silencio (salió arreglando D3).
## 4 · Cómo verificar que sigue en pie
```bash
npx vitest run src/uix/morfo/schema.test.ts
```
82 tests. Los dos que importan: el barrido encuentra >150 morfos (un glob que
deje de casar convertiría al siguiente en un no-op que reporta éxito) y los 172
pasan `validateMorfo` entero.

Powered by TurnKey Linux.