Photos: ArrowRight can be lost when Quick Look opens #1357

Closed
opened 2026-10-07 13:53:49 +00:00 by kayg · 7 comments
Owner

Steps:

  1. Open Photos with at least two photos in the timeline.
  2. Open the first photo from the grid.
  3. Press ArrowRight as soon as Quick Look appears.

Expected: Quick Look advances to the next photo. The title, counter and deep link update.

Actual: Quick Look stays on the first photo (1 of 45). The production Playwright flow waited 60 seconds for the title to change and timed out.

Evidence: artifacts/bash-files/photos/photos-arrow-navigation-actual.png.

Severity: major.

Steps: 1. Open Photos with at least two photos in the timeline. 2. Open the first photo from the grid. 3. Press ArrowRight as soon as Quick Look appears. Expected: Quick Look advances to the next photo. The title, counter and deep link update. Actual: Quick Look stays on the first photo (`1 of 45`). The production Playwright flow waited 60 seconds for the title to change and timed out. Evidence: `artifacts/bash-files/photos/photos-arrow-navigation-actual.png`. Severity: major.
Author
Owner

Reproduced and fixed #1357 in 8771611a6 on job/photoopen-1367.

Cause: while Quick Look opened, focus stayed on the source tile. PhotoTimeline.onKeyDown consumed ArrowRight and called preventDefault(), so PhotosView.onWindowKey returned before it could advance the viewer. While Quick Look is open, the timeline now yields arrow keys and PhotosView routes them to the viewer before its default-prevented guard, provided the active modal owns Quick Look.

Added a Photos end-to-end regression: click the first tile, immediately press ArrowRight, then assert that Quick Look and its stable /p/<id> link advance to item 2. A real production-browser probe with macOS emulation reported opening ArrowRight accepted=true on a three-Photo fixture. The full focused benchmark is still running through its other profile checks.

Reproduced and fixed #1357 in `8771611a6` on `job/photoopen-1367`. Cause: while Quick Look opened, focus stayed on the source tile. `PhotoTimeline.onKeyDown` consumed ArrowRight and called `preventDefault()`, so `PhotosView.onWindowKey` returned before it could advance the viewer. While Quick Look is open, the timeline now yields arrow keys and `PhotosView` routes them to the viewer before its default-prevented guard, provided the active modal owns Quick Look. Added a Photos end-to-end regression: click the first tile, immediately press ArrowRight, then assert that Quick Look and its stable `/p/<id>` link advance to item 2. A real production-browser probe with macOS emulation reported `opening ArrowRight accepted=true` on a three-Photo fixture. The full focused benchmark is still running through its other profile checks.
Author
Owner

Reproduced on the 5,000-Photo production profile: origin/dev reported ; this branch reported . The probe now sends ArrowRight immediately after the tile click, before waiting for the viewer. The browser regression in apps/web/e2e/photos.mjs checks the next Photo URL and counter. Current head: 3fa6cb8cc.

Reproduced on the 5,000-Photo production profile: origin/dev reported ; this branch reported . The probe now sends ArrowRight immediately after the tile click, before waiting for the viewer. The browser regression in apps/web/e2e/photos.mjs checks the next Photo URL and counter. Current head: 3fa6cb8cc.
Author
Owner

Finding: the 5,000-Photo production profile reproduced #1357. Origin/dev: opening ArrowRight accepted=false. This branch: opening ArrowRight accepted=true. The probe sends ArrowRight immediately after the tile click, before waiting for the viewer. The browser regression in apps/web/e2e/photos.mjs checks the next Photo URL and counter. Current head: 3fa6cb8cc.

Finding: the 5,000-Photo production profile reproduced #1357. Origin/dev: opening ArrowRight accepted=false. This branch: opening ArrowRight accepted=true. The probe sends ArrowRight immediately after the tile click, before waiting for the viewer. The browser regression in apps/web/e2e/photos.mjs checks the next Photo URL and counter. Current head: 3fa6cb8cc.
Author
Owner

Reproduced and fixed in job/photoopen-1367.

On the origin/dev production build (d395b6e25da20d8c67b8b9fc1a593b813939c8a7), ArrowRight immediately after opening Quick Look left the first Photo selected and its deep link unchanged. The same real-browser profile on this branch advances the title, counter and deep link immediately. The strict reproduction is in bench/photoopen-1367.mjs, and apps/web/e2e/photos.mjs now asserts the immediate key handoff.

The broad CALTERNAL_E2E_MAC=1 bun e2e/photos.mjs attempt timed out earlier in setup while waiting for all five uploaded burst thumbnails; it did not reach this regression assertion. The focused real-browser profile did execute and pass the ArrowRight case.

Reproduced and fixed in `job/photoopen-1367`. On the origin/dev production build (`d395b6e25da20d8c67b8b9fc1a593b813939c8a7`), ArrowRight immediately after opening Quick Look left the first Photo selected and its deep link unchanged. The same real-browser profile on this branch advances the title, counter and deep link immediately. The strict reproduction is in `bench/photoopen-1367.mjs`, and `apps/web/e2e/photos.mjs` now asserts the immediate key handoff. The broad `CALTERNAL_E2E_MAC=1 bun e2e/photos.mjs` attempt timed out earlier in setup while waiting for all five uploaded burst thumbnails; it did not reach this regression assertion. The focused real-browser profile did execute and pass the ArrowRight case.
Author
Owner

Round 3 reproduction on merged origin/dev d395b6e: the real production Photos flow opens the first tile and sends ArrowRight before waiting for Quick Look. The title and route did not advance; the run timed out after 60 s. Fixture: 45 groups across 11 days, seeded as files in the test User Home before indexing. Screenshot: artifacts/bash3-filesphotos/photos-arrowright-failure.png. The same handoff failure is present in this snapshot; I am porting the existing Photos-local fix and adding an immediate-key regression.

Round 3 reproduction on merged origin/dev d395b6e: the real production Photos flow opens the first tile and sends ArrowRight before waiting for Quick Look. The title and route did not advance; the run timed out after 60 s. Fixture: 45 groups across 11 days, seeded as files in the test User Home before indexing. Screenshot: artifacts/bash3-filesphotos/photos-arrowright-failure.png. The same handoff failure is present in this snapshot; I am porting the existing Photos-local fix and adding an immediate-key regression.
Author
Owner

Reproduced and fixed on job/bash3-filesphotos in commit 809a1e18a.

The production browser flow opens the first photo and sends ArrowRight immediately after Quick Look mounts. The viewer now advances to the next photo, updates the title and position, and keeps the photo deep link in sync. The regression test covers the opening-key event path.

This is the same finding as this issue; no duplicate issue was filed. The failing pre-fix capture remains at artifacts/bash3-filesphotos/photos-arrowright-failure.png.

Reproduced and fixed on `job/bash3-filesphotos` in commit `809a1e18a`. The production browser flow opens the first photo and sends ArrowRight immediately after Quick Look mounts. The viewer now advances to the next photo, updates the title and position, and keeps the photo deep link in sync. The regression test covers the opening-key event path. This is the same finding as this issue; no duplicate issue was filed. The failing pre-fix capture remains at `artifacts/bash3-filesphotos/photos-arrowright-failure.png`.
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:42:09 +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#1357
No description provided.