Dashboard tile gestures: mixed drag/resize concurrency has no cross-gesture guard
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
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
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 386if (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 adispose()/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/pointeruplisteners bypointerId(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 sharedpointerup.
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
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Altinity/altinity-sql-browser
-
inbox
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Altinity/altinity-sql-browser#605 ·
-
inbox
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Altinity/altinity-sql-browser#509 ·
-
inbox
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Altinity/altinity-sql-browser#489 ·
-
flamegraph Abiertoenhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Altinity/altinity-sql-browser#684 ·
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 68/100
Altinity/altinity-sql-browser#680 · 2 comentarios ·
Todos los issues de Altinity/altinity-sql-browser
Issues similares
-
VerificationGate: ATTRIBUTION quote guard never matches a normal quotation (\b around the quote) Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
danielmiessler/LifeOS#2234 ·
-
T: Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
-
Mend: dependency security vulnerability untriaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100