From e6576890eec6283c2f8f57fc7e99f85475ed8149 Mon Sep 17 00:00:00 2001 From: Stefanie Jane Date: Sat, 25 Jul 2026 23:14:05 -0700 Subject: [PATCH 1/2] test(e2e): retire the simulator UI journey wave 8 deleted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The displays-page E2E test drove the simulator create/edit/delete UI that d753a927 removed by explicit call when Studio became the only nav. E2E only executes on main pushes, and main had been red since before that commit landed, so the suite never got to fail against the new IA until the earlier lanes were fixed. The daemon simulator API keeps its coverage in display_api_tests and the API E2E spec; the UI surface this test exercised no longer exists, so the test goes with it, exactly as wave 8 did for the inline unit tests. The global-setup simulator seed stays — it exercises the create API on every run and gives display-dependent tests a device. Not verified locally: the E2E harness builds the full Linux stack. CI is the verifier. Co-Authored-By: Nova (Claude Opus 5) --- e2e/tests/ui.spec.mjs | 37 +------------------------------------ 1 file changed, 1 insertion(+), 36 deletions(-) diff --git a/e2e/tests/ui.spec.mjs b/e2e/tests/ui.spec.mjs index b1aab89ae..4bf1dcf08 100644 --- a/e2e/tests/ui.spec.mjs +++ b/e2e/tests/ui.spec.mjs @@ -1,6 +1,6 @@ import { test, expect } from "@playwright/test"; -import { createApi, findRunnableEffect, getStack, readEnvelope, uniqueName } from "./helpers.mjs"; +import { createApi, findRunnableEffect, getStack, readEnvelope } from "./helpers.mjs"; test("dashboard loads against the live stack", async ({ page }) => { const stack = getStack(); @@ -38,38 +38,3 @@ test("effects page can activate an effect through the live UI", async ({ page, p } }); -test("displays page can create, edit, and delete a simulator", async ({ page }) => { - const stack = getStack(); - const simulatorName = uniqueName("E2E Simulator"); - const updatedSimulatorName = `${simulatorName} Updated`; - - await page.goto(`${stack.appOrigin}/displays`, { waitUntil: "networkidle" }); - await expect(page.getByRole("heading", { name: "Displays" })).toBeVisible(); - - await page - .locator("li") - .filter({ hasText: stack.seededDisplay.name }) - .getByTitle("Edit simulator") - .click(); - await page.getByRole("button", { name: /delete simulator/i }).click(); - await expect(page.locator("li").filter({ hasText: stack.seededDisplay.name })).toHaveCount(0); - - await page.getByRole("button", { name: /create simulator/i }).click(); - await page.getByLabel("Name").fill(simulatorName); - await page.getByLabel("Width").fill("320"); - await page.getByLabel("Height").fill("320"); - await page.getByRole("button", { name: /create simulator/i }).last().click(); - - await expect(page.getByText(simulatorName)).toBeVisible(); - - await page.locator("li").filter({ hasText: simulatorName }).getByTitle("Edit simulator").click(); - await page.getByLabel("Name").fill(updatedSimulatorName); - await page.getByRole("button", { name: /save simulator/i }).click(); - - await expect(page.getByText(updatedSimulatorName)).toBeVisible(); - - await page.locator("li").filter({ hasText: updatedSimulatorName }).getByTitle("Edit simulator").click(); - await page.getByRole("button", { name: /delete simulator/i }).click(); - - await expect(page.getByText(updatedSimulatorName)).toHaveCount(0); -}); From da3f0643197e09e709aafc9479470e9fea2e9897 Mon Sep 17 00:00:00 2001 From: Stefanie Jane Date: Sat, 25 Jul 2026 23:14:05 -0700 Subject: [PATCH 2/2] chore(python): regenerate the WebSocket protocol constants Second half of the generated-artifact drift from the spec-71 input work: the WS protocol gained the input-event surface while CI was red, so the checked-in constants never got a green regeneration. just python-ws-protocol-check passes after this. Co-Authored-By: Nova (Claude Opus 5) --- python/src/hypercolor/ws_protocol.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/src/hypercolor/ws_protocol.py b/python/src/hypercolor/ws_protocol.py index 1f6f0da4c..5fe2a8831 100644 --- a/python/src/hypercolor/ws_protocol.py +++ b/python/src/hypercolor/ws_protocol.py @@ -23,6 +23,7 @@ "device_metrics", "sensors", "display_preview", + "input_events", ) WS_CAPABILITIES: Final = ( "frames", @@ -38,6 +39,7 @@ "device_metrics", "sensors", "display_preview", + "input_events", "commands", "canvas_format_jpeg", )