Dashboard tile gestures: mixed drag/resize concurrency has no cross-gesture guard
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Tranquilla
- Stack tecnologico
- typescript
Direzione di ricerca
Inizia da src/ui/dashboard-tile-gestures.ts, in particolare da createTileGestureController, dragActive, installedGestureCancel e dai listener di pointer di window. Leggi la caratterizzazione della concorrenza in tests/unit/dashboard.test.ts e i test del controller in tests/unit/dashboard-tile-gestures.test.ts. Per prima cosa stabilisci se i gesti debbano essere mutuamente esclusivi o intenzionalmente concorrenti; il lavoro è completato quando il comportamento scelto è implementato e coperto dai test, inclusi lo smaltimento e la gestione di pointer.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- TypeScript
- Stelle
- 8
- Fork
- 2
- Merge medio
- 1h 34m
- PR unite (30g)
- 6
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Altinity/altinity-sql-browser
-
inbox
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Altinity/altinity-sql-browser#605 ·
-
inbox
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
Altinity/altinity-sql-browser#509 ·
-
inbox
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
Altinity/altinity-sql-browser#489 ·
-
flamegraph Apertaenhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
Altinity/altinity-sql-browser#684 ·
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 68/100
Altinity/altinity-sql-browser#680 · 2 commenti ·
Tutte le issue di Altinity/altinity-sql-browser
Issue simili
-
Type/Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
OpenNSW/nsw-srilanka#497 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
0xMiden/bridge-portal#132 ·
-
react-doctor severity:warning tech-debt
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
digidem/comapeo-cloud-app#403 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100