|
|
# 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.
|