From e73f8dfa0f49246aa651fc0f2c5a85615d088aab Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Sat, 5 Sep 2026 23:50:30 -0700 Subject: [PATCH] test: await board pointer readiness before marquee selection (#19029) --- ...orkspace-board-lane-virtualization.spec.ts | 53 ++++++++++--------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/tests/e2e/workspace-board-lane-virtualization.spec.ts b/tests/e2e/workspace-board-lane-virtualization.spec.ts index 69a18e06937..36da44dd357 100644 --- a/tests/e2e/workspace-board-lane-virtualization.spec.ts +++ b/tests/e2e/workspace-board-lane-virtualization.spec.ts @@ -307,7 +307,6 @@ test.describe('Workspace board lane virtualization', () => { }) test('selects the full lane across a single large marquee scroll jump', async ({ orcaPage }) => { - test.skip(true, 'Quarantined by https://github.com/stablyai/orca/issues/12415') const statusId = 'virtual-marquee' const emptyStatusId = 'virtual-marquee-start' await orcaPage.evaluate( @@ -380,32 +379,36 @@ test.describe('Workspace board lane virtualization', () => { } // Why: CI can overlay individual lane pixels, so choose a live board-owned point. - const startPoint = await emptyLaneScroll.evaluate((element) => { - const ignored = [ - '[data-workspace-board-card-id]', - 'a', - 'button', - 'input', - 'select', - 'textarea', - '[role="button"]', - '[role="menu"]', - '[role="menuitem"]' - ].join(',') - const rect = element.getBoundingClientRect() - for (let y = Math.ceil(rect.top) + 6; y <= Math.floor(rect.top) + 40; y += 6) { - for (let x = Math.ceil(rect.left) + 8; x <= Math.floor(rect.right) - 8; x += 8) { - const target = document.elementFromPoint(x, y) - if ( - target?.closest('[data-workspace-board-selection-surface]') && - !target.closest(ignored) - ) { - return { x, y } + const findStartPoint = () => + emptyLaneScroll.evaluate((element) => { + const ignored = [ + '[data-workspace-board-card-id]', + 'a', + 'button', + 'input', + 'select', + 'textarea', + '[role="button"]', + '[role="menu"]', + '[role="menuitem"]' + ].join(',') + const rect = element.getBoundingClientRect() + for (let y = Math.ceil(rect.top) + 6; y <= Math.floor(rect.top) + 40; y += 6) { + for (let x = Math.ceil(rect.left) + 8; x <= Math.floor(rect.right) - 8; x += 8) { + const target = document.elementFromPoint(x, y) + if ( + target?.closest('[data-workspace-board-selection-surface]') && + !target.closest(ignored) + ) { + return { x, y } + } } } - } - return null - }) + return null + }) + // The board's clip animation can expose cards before the empty lane accepts pointer hits. + await expect.poll(findStartPoint).not.toBeNull() + const startPoint = await findStartPoint() expect(startPoint, 'the empty start lane must expose board-owned space').not.toBeNull() if (!startPoint) { throw new Error('Expected empty board space for the marquee start')