Skip to content

Team collaboration (3/3): web β€” team workspace surfaces #14584

Team collaboration (3/3): web β€” team workspace surfaces

Team collaboration (3/3): web β€” team workspace surfaces #14584

Triggered via pull request July 9, 2026 04:37
Status Failure
Total duration 9m 28s
Artifacts 8

ci.yml

on: pull_request
Resolve runner profiles
8s
Resolve runner profiles
Detect validation scopes
15s
Detect validation scopes
Static gate
13s
Static gate
Matrix: playwright_critical
Matrix: playwright_visual
Matrix: ui_p0
Validate Nix flake
Validate Nix flake
Preflight
2m 33s
Preflight
Workspace unit tests
1m 13s
Workspace unit tests
Windows tools-pack payload tests
Windows tools-pack payload tests
Web workspace tests
3m 23s
Web workspace tests
E2E Vitest
2m 35s
E2E Vitest
UI P0 smoke
1m 52s
UI P0 smoke
Docker image build
Docker image build
Validate workspace
5s
Validate workspace
Runtime summary
6s
Runtime summary
Fit to window
Zoom out
Zoom in

Annotations

26 errors, 1 warning, and 7 notices
Web workspace tests
Process completed with exit code 1.
tests/components/EntryShell.onboarding.test.tsx > EntryShell new project rail > opens the new project modal from the Projects tab button: apps/web/tests/components/EntryShell.onboarding.test.tsx#L479
TestingLibraryElementError: Unable to find an element by: [data-testid="entry-nav-projects"] Ignored nodes: comments, script, style <body style="" > <div> <div class="entry-shell entry-shell--no-header" > <div class="entry entry--rail-open" style="--entry-rail-width: 236px;" > <nav aria-label="Primary" class="entry-nav-rail is-open" > <div class="entry-nav-rail__group" > <div class="entry-nav-rail__brand" > <button aria-label="Open Design" class="entry-nav-rail__logo" data-testid="entry-nav-logo" type="button" > <img alt="" class="entry-nav-rail__logo-img" draggable="false" src="/app-icon.svg" /> </button> <button aria-label="Collapse sidebar" class="entry-nav-rail__collapse" data-testid="entry-nav-collapse" title="Collapse sidebar" type="button" > <svg aria-hidden="true" fill="none" focusable="false" height="20" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6" viewBox="0 0 24 24" width="20" > <rect height="18" rx="2" width="18" x="3" y="3" /> <line x1="9" x2="9" y1="3" y2="21" /> </svg> </button> </div> <div aria-hidden="true" class="entry-nav-rail__logo-divider" role="separator" /> <div aria-hidden="true" class="_search_02e606" > <svg aria-hidden="true" fill="none" focusable="false" height="14" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6" viewBox="0 0 24 24" width="14" > <circle cx="11" cy="11" r="7" /> <path d="m21 21-4.3-4.3" /> </svg> <input placeholder="Search" readonly="" tabindex="-1" type="text" /> </div> <button aria-label="New project" class="entry-nav-rail__btn" data-testid="entry-nav-new-project" data-tooltip="New project" type="button" > <span aria-hidden="true" class="entry-nav-rail__btn-icon" > <svg aria-hidden="true" fill="none" focusable="false" height="18" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.6" viewBox="0 0 24 24" width="18" > <path d="M12 5v14" /> <path d="M5 12h14" /> </svg> </span> <span class="entry-nav-rail__btn-label" >
Playwright visual (entry-navigation)
Process completed with exit code 1.
ui/visual-navigation.test.ts:117:1 β€Ί [P2] captures the integrations MCP surface: e2e/ui/visual-navigation.test.ts#L122
5) ui/visual-navigation.test.ts:117:1 β€Ί [P2] captures the integrations MCP surface ─────────────── Error: locator.click: Test timeout of 60000ms exceeded. Call log: - waiting for getByTestId('entry-nav-integrations') 120 | 121 | await ensureRailOpen(page); > 122 | await page.getByTestId('entry-nav-integrations').click(); | ^ 123 | await page.getByTestId('integrations-tab-mcp').click(); 124 | await expect(page.getByTestId('integrations-tab-mcp')).toHaveAttribute('aria-selected', 'true'); 125 | await expect(page.getByText(/MCP/i).first()).toBeVisible(); at /home/runner/_work/open-design/open-design/e2e/ui/visual-navigation.test.ts:122:52
ui/visual-navigation.test.ts:117:1 β€Ί [P2] captures the integrations MCP surface: e2e/ui/visual-navigation.test.ts#L0
5) ui/visual-navigation.test.ts:117:1 β€Ί [P2] captures the integrations MCP surface ─────────────── Test timeout of 60000ms exceeded.
ui/visual-navigation.test.ts:103:1 β€Ί [P2] captures the integrations use everywhere surface: e2e/ui/visual-navigation.test.ts#L108
4) ui/visual-navigation.test.ts:103:1 β€Ί [P2] captures the integrations use everywhere surface ──── Error: locator.click: Test timeout of 60000ms exceeded. Call log: - waiting for getByTestId('entry-nav-integrations') 106 | 107 | await ensureRailOpen(page); > 108 | await page.getByTestId('entry-nav-integrations').click(); | ^ 109 | await page.getByTestId('integrations-tab-use-everywhere').click(); 110 | await expect(page.getByTestId('integrations-tab-use-everywhere')).toHaveAttribute('aria-selected', 'true'); 111 | await expect(page.getByText('CLI, HTTP, MCP').first()).toBeVisible(); at /home/runner/_work/open-design/open-design/e2e/ui/visual-navigation.test.ts:108:52
ui/visual-navigation.test.ts:103:1 β€Ί [P2] captures the integrations use everywhere surface: e2e/ui/visual-navigation.test.ts#L0
4) ui/visual-navigation.test.ts:103:1 β€Ί [P2] captures the integrations use everywhere surface ──── Test timeout of 60000ms exceeded.
ui/visual-navigation.test.ts:89:1 β€Ί [P2] captures the integrations page surface: e2e/ui/visual-navigation.test.ts#L94
3) ui/visual-navigation.test.ts:89:1 β€Ί [P2] captures the integrations page surface ─────────────── Error: locator.click: Test timeout of 60000ms exceeded. Call log: - waiting for getByTestId('entry-nav-integrations') 92 | 93 | await ensureRailOpen(page); > 94 | await page.getByTestId('entry-nav-integrations').click(); | ^ 95 | await expect(page).toHaveURL(/\/integrations$/); 96 | await expect(page.getByRole('heading', { name: 'Integrations' })).toBeVisible(); 97 | await expect(page.getByTestId('integrations-tab-connectors')).toBeVisible(); at /home/runner/_work/open-design/open-design/e2e/ui/visual-navigation.test.ts:94:52
ui/visual-navigation.test.ts:89:1 β€Ί [P2] captures the integrations page surface: e2e/ui/visual-navigation.test.ts#L0
3) ui/visual-navigation.test.ts:89:1 β€Ί [P2] captures the integrations page surface ─────────────── Test timeout of 60000ms exceeded.
ui/visual-navigation.test.ts:25:1 β€Ί [P2] captures the projects kanban surface: e2e/ui/visual-navigation.test.ts#L30
2) ui/visual-navigation.test.ts:25:1 β€Ί [P2] captures the projects kanban surface ───────────────── Error: locator.click: Test timeout of 60000ms exceeded. Call log: - waiting for getByTestId('entry-nav-projects') 28 | 29 | await ensureRailOpen(page); > 30 | await page.getByTestId('entry-nav-projects').click(); | ^ 31 | const projects = page.getByTestId('entry-view-projects'); 32 | await projects.getByTestId('designs-view-kanban').click(); 33 | await expect(projects.getByTestId('designs-view-kanban')).toHaveAttribute('aria-pressed', 'true'); at /home/runner/_work/open-design/open-design/e2e/ui/visual-navigation.test.ts:30:48
ui/visual-navigation.test.ts:25:1 β€Ί [P2] captures the projects kanban surface: e2e/ui/visual-navigation.test.ts#L0
2) ui/visual-navigation.test.ts:25:1 β€Ί [P2] captures the projects kanban surface ───────────────── Test timeout of 60000ms exceeded.
ui/visual-navigation.test.ts:10:1 β€Ί [P2] captures the projects page surface: e2e/ui/visual-navigation.test.ts#L15
1) ui/visual-navigation.test.ts:10:1 β€Ί [P2] captures the projects page surface ─────────────────── Error: locator.click: Test timeout of 60000ms exceeded. Call log: - waiting for getByTestId('entry-nav-projects') 13 | 14 | await ensureRailOpen(page); > 15 | await page.getByTestId('entry-nav-projects').click(); | ^ 16 | await expect(page).toHaveURL(/\/projects$/); 17 | const projects = page.getByTestId('entry-view-projects'); 18 | await expect(projects.getByRole('heading', { name: 'Projects' })).toBeVisible(); at /home/runner/_work/open-design/open-design/e2e/ui/visual-navigation.test.ts:15:48
ui/visual-navigation.test.ts:10:1 β€Ί [P2] captures the projects page surface: e2e/ui/visual-navigation.test.ts#L0
1) ui/visual-navigation.test.ts:10:1 β€Ί [P2] captures the projects page surface ─────────────────── Test timeout of 60000ms exceeded.
UI P0 (workspace-restoration)
Process completed with exit code 1.
[chromium] β€Ί ui/app-restoration.test.ts:170:1 β€Ί [P0] switching between projects restores each project workspace to its last active file tab: e2e/ui/app-restoration.test.ts#L4026
1) [chromium] β€Ί ui/app-restoration.test.ts:170:1 β€Ί [P0] switching between projects restores each project workspace to its last active file tab Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: locator.click: Test timeout of 90000ms exceeded. Call log: - waiting for getByTestId('entry-nav-projects') 4024 | if (!(await page.locator('.tab-panel-toolbar').isVisible().catch(() => false))) { 4025 | await ensureRailOpen(page); > 4026 | await page.getByTestId('entry-nav-projects').click(); | ^ 4027 | } 4028 | await expect(page.locator('.tab-panel-toolbar')).toBeVisible(); 4029 | } at expectProjectsView (/home/runner/_work/open-design/open-design/e2e/ui/app-restoration.test.ts:4026:50) at /home/runner/_work/open-design/open-design/e2e/ui/app-restoration.test.ts:229:3
[chromium] β€Ί ui/app-restoration.test.ts:170:1 β€Ί [P0] switching between projects restores each project workspace to its last active file tab: e2e/ui/app-restoration.test.ts#L0
1) [chromium] β€Ί ui/app-restoration.test.ts:170:1 β€Ί [P0] switching between projects restores each project workspace to its last active file tab Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Test timeout of 90000ms exceeded.
[chromium] β€Ί ui/app-restoration.test.ts:170:1 β€Ί [P0] switching between projects restores each project workspace to its last active file tab: e2e/ui/app-restoration.test.ts#L4026
1) [chromium] β€Ί ui/app-restoration.test.ts:170:1 β€Ί [P0] switching between projects restores each project workspace to its last active file tab Error: locator.click: Test timeout of 90000ms exceeded. Call log: - waiting for getByTestId('entry-nav-projects') 4024 | if (!(await page.locator('.tab-panel-toolbar').isVisible().catch(() => false))) { 4025 | await ensureRailOpen(page); > 4026 | await page.getByTestId('entry-nav-projects').click(); | ^ 4027 | } 4028 | await expect(page.locator('.tab-panel-toolbar')).toBeVisible(); 4029 | } at expectProjectsView (/home/runner/_work/open-design/open-design/e2e/ui/app-restoration.test.ts:4026:50) at /home/runner/_work/open-design/open-design/e2e/ui/app-restoration.test.ts:229:3
[chromium] β€Ί ui/app-restoration.test.ts:170:1 β€Ί [P0] switching between projects restores each project workspace to its last active file tab: e2e/ui/app-restoration.test.ts#L0
1) [chromium] β€Ί ui/app-restoration.test.ts:170:1 β€Ί [P0] switching between projects restores each project workspace to its last active file tab Test timeout of 90000ms exceeded.
UI P0 (entry-settings)
Process completed with exit code 1.
[chromium] β€Ί ui/entry-configuration-flows.test.ts:229:1 β€Ί [P0] saving a Composio key from Integrations unlocks the connectors gate immediately: e2e/ui/entry-configuration-flows.test.ts#L374
2) [chromium] β€Ί ui/entry-configuration-flows.test.ts:229:1 β€Ί [P0] saving a Composio key from Integrations unlocks the connectors gate immediately Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: locator.click: Test timeout of 120000ms exceeded. Call log: - waiting for getByTestId('entry-nav-integrations') 372 | async function openIntegrationsConnectors(page: Page): Promise<Locator> { 373 | await ensureRailOpen(page); > 374 | await page.getByTestId('entry-nav-integrations').click(); | ^ 375 | await expect(page).toHaveURL(/\/integrations$/); 376 | await expect(page.getByRole('heading', { name: 'Integrations' })).toBeVisible(); 377 | await page.getByTestId('integrations-tab-connectors').click(); at openIntegrationsConnectors (/home/runner/_work/open-design/open-design/e2e/ui/entry-configuration-flows.test.ts:374:52) at /home/runner/_work/open-design/open-design/e2e/ui/entry-configuration-flows.test.ts:258:26
[chromium] β€Ί ui/entry-configuration-flows.test.ts:229:1 β€Ί [P0] saving a Composio key from Integrations unlocks the connectors gate immediately: e2e/ui/entry-configuration-flows.test.ts#L0
2) [chromium] β€Ί ui/entry-configuration-flows.test.ts:229:1 β€Ί [P0] saving a Composio key from Integrations unlocks the connectors gate immediately Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Test timeout of 120000ms exceeded.
[chromium] β€Ί ui/entry-configuration-flows.test.ts:229:1 β€Ί [P0] saving a Composio key from Integrations unlocks the connectors gate immediately: e2e/ui/entry-configuration-flows.test.ts#L374
2) [chromium] β€Ί ui/entry-configuration-flows.test.ts:229:1 β€Ί [P0] saving a Composio key from Integrations unlocks the connectors gate immediately Error: locator.click: Test timeout of 120000ms exceeded. Call log: - waiting for getByTestId('entry-nav-integrations') 372 | async function openIntegrationsConnectors(page: Page): Promise<Locator> { 373 | await ensureRailOpen(page); > 374 | await page.getByTestId('entry-nav-integrations').click(); | ^ 375 | await expect(page).toHaveURL(/\/integrations$/); 376 | await expect(page.getByRole('heading', { name: 'Integrations' })).toBeVisible(); 377 | await page.getByTestId('integrations-tab-connectors').click(); at openIntegrationsConnectors (/home/runner/_work/open-design/open-design/e2e/ui/entry-configuration-flows.test.ts:374:52) at /home/runner/_work/open-design/open-design/e2e/ui/entry-configuration-flows.test.ts:258:26
[chromium] β€Ί ui/entry-configuration-flows.test.ts:229:1 β€Ί [P0] saving a Composio key from Integrations unlocks the connectors gate immediately: e2e/ui/entry-configuration-flows.test.ts#L0
2) [chromium] β€Ί ui/entry-configuration-flows.test.ts:229:1 β€Ί [P0] saving a Composio key from Integrations unlocks the connectors gate immediately Test timeout of 120000ms exceeded.
[chromium] β€Ί ui/entry-chrome-flows.test.ts:217:1 β€Ί [P0] @critical recent projects strip opens a project card and view all routes to the projects index: e2e/ui/entry-chrome-flows.test.ts#L229
1) [chromium] β€Ί ui/entry-chrome-flows.test.ts:217:1 β€Ί [P0] @critical recent projects strip opens a project card and view all routes to the projects index Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toHaveAttribute(expected) failed Locator: getByTestId('entry-nav-projects') Expected: "page" Timeout: 10000ms Error: element(s) not found Call log: - Expect "toHaveAttribute" with timeout 10000ms - waiting for getByTestId('entry-nav-projects') 227 | await page.getByTestId('recent-projects-view-all').click(); 228 | await expect(page).toHaveURL(/\/projects$/); > 229 | await expect(page.getByTestId('entry-nav-projects')).toHaveAttribute('aria-current', 'page'); | ^ 230 | }); 231 | 232 | test('[P1] design systems page is reachable from entry nav and supports search, preview, and default selection', async ({ page }) => { at /home/runner/_work/open-design/open-design/e2e/ui/entry-chrome-flows.test.ts:229:56
[chromium] β€Ί ui/entry-chrome-flows.test.ts:217:1 β€Ί [P0] @critical recent projects strip opens a project card and view all routes to the projects index: e2e/ui/entry-chrome-flows.test.ts#L229
1) [chromium] β€Ί ui/entry-chrome-flows.test.ts:217:1 β€Ί [P0] @critical recent projects strip opens a project card and view all routes to the projects index Error: expect(locator).toHaveAttribute(expected) failed Locator: getByTestId('entry-nav-projects') Expected: "page" Timeout: 10000ms Error: element(s) not found Call log: - Expect "toHaveAttribute" with timeout 10000ms - waiting for getByTestId('entry-nav-projects') 227 | await page.getByTestId('recent-projects-view-all').click(); 228 | await expect(page).toHaveURL(/\/projects$/); > 229 | await expect(page.getByTestId('entry-nav-projects')).toHaveAttribute('aria-current', 'page'); | ^ 230 | }); 231 | 232 | test('[P1] design systems page is reachable from entry nav and supports search, preview, and default selection', async ({ page }) => { at /home/runner/_work/open-design/open-design/e2e/ui/entry-chrome-flows.test.ts:229:56
Validate workspace
Process completed with exit code 1.
Detect validation scopes
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
🎭 Playwright Run Summary
3 passed (39.4s)
🎭 Playwright Run Summary
19 passed (2.3m)
🎭 Playwright Run Summary
37 passed (3.7m)
🎭 Playwright Run Summary
21 passed (3.9m)
🎭 Playwright Run Summary
6 failed ui/visual-navigation.test.ts:10:1 β€Ί [P2] captures the projects page surface ──────────────────── ui/visual-navigation.test.ts:25:1 β€Ί [P2] captures the projects kanban surface ────────────────── ui/visual-navigation.test.ts:89:1 β€Ί [P2] captures the integrations page surface ──────────────── ui/visual-navigation.test.ts:103:1 β€Ί [P2] captures the integrations use everywhere surface ───── ui/visual-navigation.test.ts:117:1 β€Ί [P2] captures the integrations MCP surface ──────────────── ui/visual-navigation.test.ts:131:1 β€Ί [P2] captures the tasks page surface ────────────────────── 14 passed (5.8m)
🎭 Playwright Run Summary
1 failed [chromium] β€Ί ui/app-restoration.test.ts:170:1 β€Ί [P0] switching between projects restores each project workspace to its last active file tab 25 passed (6.3m)
🎭 Playwright Run Summary
2 failed [chromium] β€Ί ui/entry-chrome-flows.test.ts:217:1 β€Ί [P0] @critical recent projects strip opens a project card and view all routes to the projects index [chromium] β€Ί ui/entry-configuration-flows.test.ts:229:1 β€Ί [P0] saving a Composio key from Integrations unlocks the connectors gate immediately 59 passed (7.0m)

Artifacts

Produced during runtime
Name Size Digest
handoff-report-visual-pr Expired
437 Bytes
sha256:b052b4c0c549e233380654d39914cf7ba2efdb95ed6539069f291cdc71da22a4
ui-p0-ci-28994399442-entry-settings Expired
52.3 MB
sha256:32b7bdc88544252647ffb23c6bfc1397c81a720da8c5e97b554234a5fe60584f
ui-p0-ci-28994399442-project-runtime Expired
348 KB
sha256:66e25afecab7bfbda2c4a747dab194b79c38587def19b72f3e791ebec790379f
ui-p0-ci-28994399442-project-workspace Expired
365 KB
sha256:e924ad281ed74ab0192f66c9d930fbbf5ae806c69da112225f0094e65d31682a
ui-p0-ci-28994399442-smoke Expired
276 KB
sha256:08b0fb294de794d0932325947e6080352f6d45fd49f9c9f268852e68cd87a5fe
ui-p0-ci-28994399442-workspace-restoration Expired
21.4 MB
sha256:faf93385a3aac472a9913f5dbaa987c5fa63bffeba4782f30669e92456214e54
visual-pr-capture-5284-28994399442-entry-navigation Expired
1.37 MB
sha256:6bb199af9ea3b551f8b1be06a0f03ef68f9eb7d4e2a21e519df30f0bd8f2b6ed
visual-pr-capture-5284-28994399442-settings-workspace Expired
2.85 MB
sha256:7c68f0b078570821d5c68d69269060a4ff531ee1c94399b4202dca6b84b920b3