diff --git a/packages/app/e2e/regression/tabs.spec.ts b/packages/app/e2e/regression/tabs.spec.ts
index d62e8e13e21..01c20b7822f 100644
--- a/packages/app/e2e/regression/tabs.spec.ts
+++ b/packages/app/e2e/regression/tabs.spec.ts
@@ -435,6 +435,34 @@ for (const [screen, href] of [
})
}
+// macOS 26 traffic lights end 74px from the window edge. The collapsed toggle starts 16px past them, as the horizontal
+// titlebar's first control does, and a fullscreen window has no traffic lights to clear.
+for (const [window, fullscreen, start] of [
+ ["windowed", false, 90],
+ ["fullscreen", true, 18],
+] as const) {
+ test(`collapsed sidebar toggle clears the macOS traffic lights (${window})`, async ({ page }) => {
+ await mockWorkspace(page, {
+ name: "Tabs",
+ sessions: [a],
+ seed: { settings: { appearance: { tabLayout: "vertical", sidebarOpen: false } }, tabs: [a.id] },
+ })
+ await page.goto(
+ `/e2e/utils/macos-window.html?${new URLSearchParams({ server: SERVER, route: sessionHref(a.id), fullscreen: String(fullscreen) })}`,
+ )
+ await expectSessionTitle(page, a.title)
+
+ const toggle = await page.locator("main").getByRole("button", { name: "Toggle sidebar", exact: true }).boundingBox()
+ const project = await page.locator('[data-session-title] [data-slot="session-project-trigger"]').boundingBox()
+
+ if (!toggle || !project) throw new Error("collapsed sidebar header has no bounding boxes")
+ expect(toggle.x).toBe(start)
+ // The header's contents follow the toggle on its center line.
+ expect(project.x).toBe(start + 32)
+ expect(project.y + project.height / 2).toBe(toggle.y + toggle.height / 2)
+ })
+}
+
test("vertical tab gaps hover and select the nearest row", async ({ page }) => {
await mockWorkspace(page, {
name: "Tabs",
diff --git a/packages/app/e2e/utils/macos-window.fixture.tsx b/packages/app/e2e/utils/macos-window.fixture.tsx
new file mode 100644
index 00000000000..e96f4c04aa4
--- /dev/null
+++ b/packages/app/e2e/utils/macos-window.fixture.tsx
@@ -0,0 +1,65 @@
+import { MemoryRouter, createMemoryHistory } from "@solidjs/router"
+import { render } from "solid-js/web"
+import type { Bridge } from "@opencode/gui-extensions/sdk/bridge"
+import { AppBaseProviders, AppInterface } from "../../src/app"
+import { PlatformProvider, type Platform } from "../../src/runtime/platform/platform"
+
+// The app in a macOS desktop window at `route`, so its layout leaves room for the native traffic lights. A fullscreen
+// window has none.
+export function mount(input: { server: string; route: string; fullscreen: boolean }) {
+ const root = document.getElementById("root")
+
+ if (!root) throw new Error("Missing fixture root")
+ const history = createMemoryHistory()
+ history.set({ value: input.route })
+ render(() => {
+ const unused = async () => {
+ throw new Error("Unexpected fixture action")
+ }
+
+ // No main-process extensions run in this fixture.
+ const bridge: Bridge = {
+ packaged: false,
+ call: unused,
+ subscribe: async () => ({ available: false }),
+ on: () => () => undefined,
+ embed: () => undefined,
+ capture: async () => undefined,
+ runMenubarItem: () => undefined,
+ configure: () => undefined,
+ manager: {
+ list: async () => [],
+ enable: async () => undefined,
+ disable: async () => undefined,
+ reload: async () => undefined,
+ install: async () => undefined,
+ remove: async () => undefined,
+ source: async () => "",
+ asset: () => "",
+ },
+ }
+
+ const platform: Platform = {
+ platform: "desktop",
+ os: "macos",
+ windowID: "macos-window-test",
+ windowFullscreen: () => input.fullscreen,
+ openExternal: () => undefined,
+ openDirectoryPickerDialog: async () => null,
+ notify: async () => undefined,
+ restart: unused,
+ extensions: bridge,
+ }
+
+ return (
+