From 560cd453dedc454f5ad4438cba87970b840d007e Mon Sep 17 00:00:00 2001 From: ManuelStaggl <17688572+ManuelStaggl@users.noreply.github.com> Date: Thu, 12 Nov 2026 17:34:59 +0100 Subject: [PATCH 1/2] test(desktop): the text pick test sets the top view again before each click Two contract runs on unrelated branches failed here with every click missing the text although the clicks arrived within milliseconds. Co-Authored-By: Claude Fable 5.2 --- apps/desktop/e2e/solidcraft.contract.spec.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/desktop/e2e/solidcraft.contract.spec.ts b/apps/desktop/e2e/solidcraft.contract.spec.ts index f694bb2..58dd2ff 100644 --- a/apps/desktop/e2e/solidcraft.contract.spec.ts +++ b/apps/desktop/e2e/solidcraft.contract.spec.ts @@ -2976,6 +2976,9 @@ test('a built text is picked as a whole and changed afterwards: words, height an await expect(async () => { const [x, y] = spots[spot++ % spots.length] ?? [0.5, 0.5]; await page.keyboard.press('Escape'); + // Again each time: the first key 7 is lost when the view was not ready for it, and every click then misses. + await page.keyboard.press('7'); + await page.waitForTimeout(700); await page.mouse.click(box.x + box.width * x, box.y + box.height * y); await expect(page.getByTestId('logo-text')).toBeVisible({ timeout: 3000 }); }, 'the built text under a click').toPass({ timeout: 60_000, intervals: [500] }); @@ -3001,6 +3004,9 @@ test('a built text is picked as a whole and changed afterwards: words, height an await expect(async () => { const [x, y] = spots[spot++ % spots.length] ?? [0.5, 0.5]; await page.keyboard.press('Escape'); + // Again each time: the first key 7 is lost when the view was not ready for it, and every click then misses. + await page.keyboard.press('7'); + await page.waitForTimeout(700); await page.mouse.click(box.x + box.width * x, box.y + box.height * y); await expect(page.getByTestId('logo-words').getByRole('textbox')).toHaveValue('AB', { timeout: 3000 }); }, 'the changed text under a click').toPass({ timeout: 60_000, intervals: [500] }); From 8df84a893b5e3ecacf8208773da71e6463e7a100 Mon Sep 17 00:00:00 2001 From: ManuelStaggl <17688572+ManuelStaggl@users.noreply.github.com> Date: Thu, 12 Nov 2026 18:27:21 +0100 Subject: [PATCH 2/2] test(desktop): the joint tests read the revision once no trial is rebuilding Co-Authored-By: Claude Fable 5.2 --- apps/desktop/e2e/solidcraft.contract.spec.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/desktop/e2e/solidcraft.contract.spec.ts b/apps/desktop/e2e/solidcraft.contract.spec.ts index 58dd2ff..819d98b 100644 --- a/apps/desktop/e2e/solidcraft.contract.spec.ts +++ b/apps/desktop/e2e/solidcraft.contract.spec.ts @@ -3125,6 +3125,8 @@ test('a hinge the assistant joined moves with its slider and goes back to as des return count; }); expect(await turned()).toBe(0); + // Not while a trial still shows "rebuilding": the revision that stands is what the test compares with. + await expect(page.getByTestId('connection-status')).toHaveText(/Revision \d+/, { timeout: 30_000 }); const revision = await page.getByTestId('connection-status').textContent(); const track = await page.getByTestId('joint-value').locator('.relative').first().boundingBox(); if (!track) throw new Error('the slider has no track'); @@ -3195,6 +3197,8 @@ test('a hinge plays in the view, stops where SolidCraft found the parts touching await page.keyboard.press('Escape'); await expect(findings).toBeHidden({ timeout: 1000 }); }).toPass({ timeout: 15_000 }); + // Not while a trial still shows "rebuilding": the revision that stands is what the test compares with. + await expect(page.getByTestId('connection-status')).toHaveText(/Revision \d+/, { timeout: 30_000 }); const revision = await page.getByTestId('connection-status').textContent(); // One click plays it: down to its limit first (the longer way), then up until the parts touch. await page.getByTestId('joints-play').click();