Skip to content

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

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

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

Triggered via pull request July 9, 2026 05:24
Status Failure
Total duration 10m 30s
Artifacts 8

ci.yml

on: pull_request
Resolve runner profiles
10s
Resolve runner profiles
Detect validation scopes
15s
Detect validation scopes
Static gate
22s
Static gate
Matrix: playwright_critical
Matrix: playwright_visual
Matrix: ui_p0
Validate Nix flake
0s
Validate Nix flake
Preflight
3m 21s
Preflight
Workspace unit tests
1m 6s
Workspace unit tests
Windows tools-pack payload tests
0s
Windows tools-pack payload tests
Web workspace tests
3m 26s
Web workspace tests
E2E Vitest
2m 54s
E2E Vitest
UI P0 smoke
1m 35s
UI P0 smoke
Docker image build
0s
Docker image build
Validate workspace
6s
Validate workspace
Runtime summary
8s
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 (32.2s)
🎭 Playwright Run Summary
19 passed (2.2m)
🎭 Playwright Run Summary
21 passed (3.5m)
🎭 Playwright Run Summary
37 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.4m)
🎭 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:2bb549ef68820fc1b84d3e3b5a86a1de02c13aa269b37762808d498f594cc8eb
ui-p0-ci-28996166841-entry-settings Expired
51.2 MB
sha256:19389086cdbecb9c55d093c0b3b9b768c9f6cee588f69439af4c2349d1f56b31
ui-p0-ci-28996166841-project-runtime Expired
347 KB
sha256:4a5250ce2d119ed978c7e1fc8542defee314f381d223a9021d7b9f4fa345ce0b
ui-p0-ci-28996166841-project-workspace Expired
363 KB
sha256:b7e88f66334c4766e421ecdcaf4e5123ab5413e629ac9fa529c639567e0ecc80
ui-p0-ci-28996166841-smoke Expired
275 KB
sha256:6301c77cf5b04ee3638463ad958811e37a13c5805e22b2e8d25e09498d6a27bb
ui-p0-ci-28996166841-workspace-restoration Expired
22.2 MB
sha256:8ab1b025214cfe371b15fa3541a7bf9365bfeb95ba4cbb8f2dcdc54b4a501f74
visual-pr-capture-5284-28996166841-entry-navigation Expired
1.37 MB
sha256:fea00ad61ced2f2a4d396381478d6b2f33e2d31906da246509d15152d42628ec
visual-pr-capture-5284-28996166841-settings-workspace Expired
2.85 MB
sha256:7b634b49491df589787209c6012f4065fdd96cc94b558b7578ac6ecbd847dd07