Calendar Tab: Event pointer drag leaves ghost without saving #1323

Closed
opened 2026-10-07 05:48:09 +00:00 by kayg · 5 comments
Owner

Steps

  1. Run apps/web/e2e/calendar-drag-1015.mjs with a real production build and the local server.
  2. Create the writable CalDAV Event fixture Drag Event on 2026-08-10.
  3. Open its Day view, drag the Event by 30 minutes, and release.

Expected

The Event drag commits through the Calendar API, the Event stays at the dropped time, and the standard Undo action appears.

Actual

At 1440 x 1000, pointerdown and movement reach the Event. The .block.plan.moving ghost appears. At pointerup, the document sees a DIV target instead of the Event; no Event GET or PUT request follows, and the ghost remains without a commit. The committed regression runner times out waiting for the Event API response.

Evidence

Screenshot: artifacts/bash-calendar/round2-drag-debug/event-drag-timeout.png
Pointer and request summary: artifacts/bash-calendar/round2-drag-debug/event-drag-diagnostic.txt

Severity: major.

This appears to be in the shared TimeGrid pointer handling (packages/ui), outside the Calendar Tab job's allowed files. Please route it to the shared UI owner.

## Steps 1. Run `apps/web/e2e/calendar-drag-1015.mjs` with a real production build and the local server. 2. Create the writable CalDAV Event fixture `Drag Event` on 2026-08-10. 3. Open its Day view, drag the Event by 30 minutes, and release. ## Expected The Event drag commits through the Calendar API, the Event stays at the dropped time, and the standard Undo action appears. ## Actual At 1440 x 1000, pointerdown and movement reach the Event. The `.block.plan.moving` ghost appears. At pointerup, the document sees a `DIV` target instead of the Event; no Event GET or PUT request follows, and the ghost remains without a commit. The committed regression runner times out waiting for the Event API response. ## Evidence Screenshot: `artifacts/bash-calendar/round2-drag-debug/event-drag-timeout.png` Pointer and request summary: `artifacts/bash-calendar/round2-drag-debug/event-drag-diagnostic.txt` Severity: major. This appears to be in the shared TimeGrid pointer handling (`packages/ui`), outside the Calendar Tab job's allowed files. Please route it to the shared UI owner.
Author
Owner

Round 2 also isolated the pointer resize edge on the same real production Event fixture. Dragging the Event's bottom edge changed its optimistic geometry (height 47.9 px → 48.7 px) and left the card lifted, but no PUT reached /api/v1/calendar/events/ within 30 seconds. The card did not settle or persist. Pointer trace: artifacts/bash-calendar/round2-pointer-resize/; diagnostic output was captured by the runner before its response timeout. This shares the TimeGrid pointer path and the same file ownership boundary as the move symptom.

Round 2 also isolated the pointer resize edge on the same real production Event fixture. Dragging the Event's bottom edge changed its optimistic geometry (`height` 47.9 px → 48.7 px) and left the card lifted, but no PUT reached `/api/v1/calendar/events/` within 30 seconds. The card did not settle or persist. Pointer trace: `artifacts/bash-calendar/round2-pointer-resize/`; diagnostic output was captured by the runner before its response timeout. This shares the TimeGrid pointer path and the same file ownership boundary as the move symptom.
Author
Owner

Correction: the runner preserved artifacts/bash-calendar/round2-pointer-resize/event-drag-timeout.png and printed the pointer/geometry diagnostic to its stdout. It did not save a separate trace or diagnostic file before the 30-second response timeout.

Correction: the runner preserved `artifacts/bash-calendar/round2-pointer-resize/event-drag-timeout.png` and printed the pointer/geometry diagnostic to its stdout. It did not save a separate trace or diagnostic file before the 30-second response timeout.
Author
Owner

Start: branch job/ghost-1323 from dev d395b6e25

Start: branch job/ghost-1323 from dev d395b6e25
Author
Owner

Fixed on job/ghost-1323, head 71fe5922c. Root cause: pullDown (packages/ui/src/gestures.ts) on #route-content claimed the mouse pointer mid-drag at scroll-top and stole the capture from the dragged block, so the block never got pointerup (ghost, no save). It now yields when a descendant holds the capture. Also: dropped Event blocks skip the height spring (one snap-back frame); the drag runner returned to Month before its Log touch proof. Regression: gestures.svelte.test.ts (fails before, passes after) and apps/web/e2e/calendar-drag-1015.mjs passes end to end (mouse, Month touch, keyboard, same-day, cross-day Week, refused write rollback). bun run check rc=0, bun run test 297 files / 2117 tests passed. Screenshots in artifacts/ghost-1323/after (not committed).

Fixed on job/ghost-1323, head 71fe5922c. Root cause: pullDown (packages/ui/src/gestures.ts) on #route-content claimed the mouse pointer mid-drag at scroll-top and stole the capture from the dragged block, so the block never got pointerup (ghost, no save). It now yields when a descendant holds the capture. Also: dropped Event blocks skip the height spring (one snap-back frame); the drag runner returned to Month before its Log touch proof. Regression: gestures.svelte.test.ts (fails before, passes after) and apps/web/e2e/calendar-drag-1015.mjs passes end to end (mouse, Month touch, keyboard, same-day, cross-day Week, refused write rollback). bun run check rc=0, bun run test 297 files / 2117 tests passed. Screenshots in artifacts/ghost-1323/after (not committed).
kayg referenced this issue from a commit 2026-10-08 10:41:40 +00:00
Author
Owner

Deployed to calternal.cloud in merge round 35a (build cc1af3c12, live 2026-10-09 00:12 IST). Closing.

Deployed to calternal.cloud in merge round 35a (build cc1af3c12, live 2026-10-09 00:12 IST). Closing.
kayg closed this issue 2026-10-08 18:41:52 +00:00
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal-v0#1323
No description provided.