Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit 595337e5bbdc6dbc802f7ac09198d97b5103ab45
parent 3cb978a43d48624477d83e26e93abcc831120688
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Tue, 22 Sep 2026 16:09:59 -0400

editor: the relocate spec's Preview is exact, because the panel has two now

getByRole's `name` is a case-insensitive SUBSTRING match by default, so the
clip-window card's "Preview eviction" button made the bare "Preview" resolve to
two elements — and a strict-mode violation reads as "the button vanished", not
as "there are two". Three call sites, all the relocation preview.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Diffstat:
Meditor/e2e/channel-storage.spec.ts | 18+++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/editor/e2e/channel-storage.spec.ts b/editor/e2e/channel-storage.spec.ts @@ -106,7 +106,11 @@ test("relocate a channel's media to another root, and move it back", async ({ ).toBeVisible(); await expect(moveButton).toBeDisabled(); - await page.getByRole("button", { name: "Preview" }).click(); + // EXACT. The panel has a second preview since the clip-window card joined it + // ("Preview eviction"), and getByRole's name match is a case-insensitive + // SUBSTRING by default — so the bare name resolves to two buttons and the + // strict-mode violation reads as "the button vanished". + await page.getByRole("button", { name: "Preview", exact: true }).click(); const preview = page.getByLabel("relocation preview"); await expect(preview).toBeVisible({ timeout: 15_000 }); // The fixture is two files in one video dir. @@ -510,7 +514,11 @@ test("the Storage panel moves to a location picked by name", async ({ await destination.selectOption("cold"); const target = join(cold, SLUG, "data"); - await page.getByRole("button", { name: "Preview" }).click(); + // EXACT. The panel has a second preview since the clip-window card joined it + // ("Preview eviction"), and getByRole's name match is a case-insensitive + // SUBSTRING by default — so the bare name resolves to two buttons and the + // strict-mode violation reads as "the button vanished". + await page.getByRole("button", { name: "Preview", exact: true }).click(); const preview = page.getByLabel("relocation preview"); await expect(preview).toBeVisible({ timeout: 15_000 }); // The preview names the target the SERVER resolved from the id. @@ -658,7 +666,11 @@ test("a move to an unmounted root refuses before it creates anything", async ({ // shape an operator actually meets — and it is the shape that carries the // location id into the refusal. await page.getByLabel("destination location").selectOption("cold"); - await page.getByRole("button", { name: "Preview" }).click(); + // EXACT. The panel has a second preview since the clip-window card joined it + // ("Preview eviction"), and getByRole's name match is a case-insensitive + // SUBSTRING by default — so the bare name resolves to two buttons and the + // strict-mode violation reads as "the button vanished". + await page.getByRole("button", { name: "Preview", exact: true }).click(); // FILTERED, because Next ships its own `role="alert"` route announcer on // every page and a bare getByRole("alert") is a strict-mode violation that // reads as "the message never appeared".