Skip to content

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

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

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

Triggered via pull request July 9, 2026 03:01
Status Failure
Total duration 9m 56s
Artifacts 8

ci.yml

on: pull_request
Resolve runner profiles
9s
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
3m 3s
Preflight
Workspace unit tests
1m 10s
Workspace unit tests
Windows tools-pack payload tests
Windows tools-pack payload tests
Web workspace tests
3m 29s
Web workspace tests
E2E Vitest
2m 51s
E2E Vitest
UI P0 smoke
1m 55s
UI P0 smoke
Docker image build
Docker image build
Validate workspace
6s
Validate workspace
Runtime summary
6s
Runtime summary
Fit to window
Zoom out
Zoom in

Annotations

27 errors, 1 warning, and 7 notices
Static gate
Process completed with exit code 1.
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 (46.0s)
🎭 Playwright Run Summary
19 passed (2.4m)
🎭 Playwright Run Summary
21 passed (3.0m)
🎭 Playwright Run Summary
37 passed (3.4m)
🎭 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.9m)
🎭 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.9m)
🎭 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.6m)

Artifacts

Produced during runtime
Name Size Digest
handoff-report-visual-pr Expired
437 Bytes
sha256:2a31c281f6726145dfaca3233c1a2e7345b90f545ec82177fb653e240c65bebb
ui-p0-ci-28990954096-entry-settings Expired
50.9 MB
sha256:5c5812d90a133bd94a7f83d5e6abf609d99a00cce19d507aa0d138c107a32c4d
ui-p0-ci-28990954096-project-runtime Expired
348 KB
sha256:f95c899e5552112045af1d3d4766b2c7646c2c01a72b61257ca19a05dd85bf0b
ui-p0-ci-28990954096-project-workspace Expired
364 KB
sha256:a06a0eaf774e4140e1ed6361b974a3f515c820b913f09f70ccf5bc7c70b409d4
ui-p0-ci-28990954096-smoke Expired
276 KB
sha256:f593d5c981858f72d7f6d0f000df42da988517243e00433269922568e43cdb7e
ui-p0-ci-28990954096-workspace-restoration Expired
21.4 MB
sha256:b1581aafe74187e07d20955404580f27bfb010b9000f8c1aaa93616da3d7c5e4
visual-pr-capture-5284-28990954096-entry-navigation Expired
1.37 MB
sha256:193154236818bb51ad9d3e6720f663eaa1b93d5dc7d03b322539ccc381a2e72d
visual-pr-capture-5284-28990954096-settings-workspace Expired
2.85 MB
sha256:5257ff814616ec457b9b34273d8dfb4fcdcda250df01b4b65fc9c0bc90acd6fc