Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Dashboard tile gestures: mixed drag/resize concurrency has no cross-gesture guard

Abierto
#606 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Necesita aclaración
Estado de actividad
Tranquilo
Stack tecnológico
typescript
Área
frontend, testing

Línea de trabajo

Comienza con src/ui/dashboard-tile-gestures.ts, especialmente con createTileGestureController, dragActive, installedGestureCancel y los listeners de pointer de window. Lee la caracterización de la concurrencia en tests/unit/dashboard.test.ts y las pruebas del controlador en tests/unit/dashboard-tile-gestures.test.ts. Primero resuelve si los gestos deben ser mutuamente excluyentes o intencionadamente concurrentes; se considera terminado cuando el comportamiento elegido está implementado y cubierto por pruebas, incluida la eliminación y el manejo de pointer.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

inbox

src/ui/dashboard-tile-gestures.ts's createTileGestureController has no cross-gesture mutual exclusion, despite the natural reading of "one gesture at a time":

  • dragActive (declared line 191, guard at line 386 if (dragActive) return;) blocks only a second concurrent drag — a resize (wireGridResize) never checks it, so a resize can start and run while a drag is active, and vice versa.
  • The single "currently cancellable gesture" slot, installedGestureCancel (declared line 200), is last-writer-wins and self-clearing: whichever gesture (re)installs it last (drag at line 659, resize at line 307) owns it; each gesture's own cleanup only nulls the slot if it is still the one holding it (drag clears at line 623, resize at line 280) — so an older gesture's cleanup never stomps a newer one's slot, but a dispose()/rerender only ever cancels whichever gesture currently holds the slot, leaving the other orphaned against soon-to-be-replaced DOM.
  • Neither gesture filters its window pointermove/pointerup listeners by pointerId (module doc comment, lines 42-44) — a pointer other than the one that started the gesture still moves/ends it, and two concurrent resizes both terminate off one shared pointerup.

This is pinned by the "tile gesture concurrency characterization (#589 wave 2, CURRENT BEHAVIOR — not a guarantee, see inbox)" describe block in tests/unit/dashboard.test.ts and exercised at the controller-unit level across tests/unit/dashboard-tile-gestures.test.ts.

It is a pre-existing defect predating #589 (#593 refactor umbrella) — the extraction in wave 2 preserved it verbatim rather than introducing it. Fixing it is out of scope for a pure structural extraction; filing so a deliberate design decision (mutual exclusion vs. documented-intentional concurrency) can be made separately.

Lenguaje dominante
TypeScript
Estrellas
8
Forks
2
Merge medio
1 h 34 min
PR fusionados (30 d)
6

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Altinity/altinity-sql-browser

Todos los issues de Altinity/altinity-sql-browser

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.