Archilyzer · Source

archilyzer

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

commit fe29a92f0c60e32256e08dc506d52a218ecbeb97
parent 29aeebab6909f948f82f7ed0d8ef83715b943fea
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Thu, 17 Sep 2026 13:40:53 -0400

e2e: the Advanced menu of a paused row has to take the click

One assertion in the spec that already opens Advanced: pause slow-a so its
row is dimmed, reload, open Advanced and set the first override. The click is
the proof — a later row painted over the popover fails the action with
"intercepts pointer events", which is what the stacking context on the <tr>
produced.

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

Diffstat:
Meditor/e2e/channel-priority.spec.ts | 36++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+), 0 deletions(-)

diff --git a/editor/e2e/channel-priority.spec.ts b/editor/e2e/channel-priority.spec.ts @@ -145,6 +145,42 @@ test("the Sync only preset is paused everywhere with sync pinned back", async ({ } }); +// THE ADVANCED MENU HAS TO ESCAPE ITS OWN ROW. +// +// A row is dimmed when it is excluded from the build or its base tier is +// Paused, and the dim used to sit on the `<tr>` as `opacity-60`. Opacity below +// 1 creates a stacking context, which confines the popover's `absolute z-30` to +// the row: every row below it painted over the menu and ate its clicks +// (operator report 2026-09-17). The dim is per cell now, with the Tier cell +// left alone. The click is what proves it — Playwright hit-tests the point, so +// a row painted on top fails the action with "intercepts pointer events". +test("a paused row's Advanced menu draws above the rows below it", async ({ + page, +}) => { + await resetData("two-slow-channels"); + await page.goto(ALL); + + await page + .getByLabel("tier for slow-a", { exact: true }) + .selectOption("paused"); + await expect + .poll(async () => (await settings()).channelPriority?.channels["slow-a"]) + .toEqual({ tier: "paused" }); + // Reloaded, so the row renders dimmed from the server's own tier rather than + // from the control's optimistic state. + await page.reload(); + + await page.getByLabel("advanced priority for slow-a").click(); + // `sync` is the first row of the popover, the part that hangs over slow-b. + const override = page.getByLabel("sync override for slow-a"); + await expect(override).toBeInViewport(); + await override.selectOption("normal"); + + await expect + .poll(async () => (await settings()).channelPriority?.channels["slow-a"]) + .toEqual({ tier: "paused", overrides: { sync: "normal" } }); +}); + // MOVED HERE FROM channel-sync-toggle.spec.ts, which this slice deletes with the // control it drove. The assertion is the same one — a pool sweep skips the // excluded channel and names it in the tooltip — restated against the tier the