Skip to content

test(e2e): harden workspace collaboration coverage #17069

test(e2e): harden workspace collaboration coverage

test(e2e): harden workspace collaboration coverage #17069

Triggered via pull request August 2, 2026 10:49
Status Failure
Total duration 23m 28s
Artifacts 8

ci.yml

on: pull_request
Resolve runner profiles
13s
Resolve runner profiles
Detect validation scopes
12s
Detect validation scopes
Static gate
13s
Static gate
Matrix: playwright_critical
Matrix: playwright_visual
Matrix: ui_p0
Preflight
3m 43s
Preflight
Workspace unit tests
1m 7s
Workspace unit tests
Windows tools-pack payload tests
0s
Windows tools-pack payload tests
Web workspace tests
0s
Web workspace tests
E2E Vitest
6m 17s
E2E Vitest
Validate workspace
4s
Validate workspace
Runtime summary
4s
Runtime summary
Fit to window
Zoom out
Zoom in

Annotations

18 errors, 4 warnings, and 7 notices
E2E Vitest
Process completed with exit code 1.
tests/collab/workspace-switch-and-billing.test.ts > workspace switching and scoped billing > clears a stale team pin and recovers to the personal workspace after membership removal: e2e/lib/vitest/http.ts#L18
Error: HTTP 400 /api/workspace/active: {"error":"missing_workspace_member_id"} ❯ requestJson lib/vitest/http.ts:18:11 ❯ tests/collab/workspace-switch-and-billing.test.ts:242:11 ❯ runToolsDevSuite lib/vitest/suite.ts:276:5 ❯ tests/collab/workspace-switch-and-billing.test.ts:237:7
tests/collab/workspace-switch-and-billing.test.ts > workspace switching and scoped billing > switches the local workspace and never authorizes personal or foreign billing scopes: e2e/lib/vitest/http.ts#L18
Error: HTTP 400 /api/workspace/active: {"error":"missing_workspace_member_id"} ❯ requestJson lib/vitest/http.ts:18:11 ❯ tests/collab/workspace-switch-and-billing.test.ts:148:28 ❯ runToolsDevSuite lib/vitest/suite.ts:276:5 ❯ tests/collab/workspace-switch-and-billing.test.ts:139:7
tests/collab/workspace-skill-resource-isolation.test.ts > workspace-scoped skill resources > [P0] import, mutation, team share, and unshare stay inside the owning workspace: e2e/tests/collab/workspace-skill-resource-isolation.test.ts#L244
AssertionError: expected 404 to be 403 // Object.is equality - Expected + Received - 403 + 404 ❯ tests/collab/workspace-skill-resource-isolation.test.ts:244:13 ❯ runToolsDevSuite lib/vitest/suite.ts:276:5 ❯ tests/collab/workspace-skill-resource-isolation.test.ts:193:7
tests/collab/workspace-invite-flow.test.ts > workspace invite create and acceptance handoff > creates invites with workspace scope, preserves partial outcomes, and consumes the accepted continuation: e2e/lib/vitest/http.ts#L18
Error: HTTP 403 /api/workspace/context: {"error":"WORKSPACE_ACCESS_DENIED","message":"the requested workspace is not available to this member"} ❯ requestJson lib/vitest/http.ts:18:11 ❯ tests/collab/workspace-invite-flow.test.ts:219:38 ❯ runToolsDevSuite lib/vitest/suite.ts:276:5 ❯ tests/collab/workspace-invite-flow.test.ts:202:11 ❯ runToolsDevSuite lib/vitest/suite.ts:276:5 ❯ tests/collab/workspace-invite-flow.test.ts:152:7
UI P0 (project-workspace)
Process completed with exit code 1.
[chromium] β€Ί ui/workspace-multi-client-collab.test.ts:36:1 β€Ί [P0] two isolated clients converge live content: e2e/ui/workspace-multi-client-collab.test.ts#L557
1) [chromium] β€Ί ui/workspace-multi-client-collab.test.ts:36:1 β€Ί [P0] two isolated clients converge live content, presence, and owner unshare Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: {"error":"missing_workspace_member_id"} expect(received).toBeTruthy() Received: false 555 | timeout: 15_000, 556 | }); > 557 | expect(response.ok(), await response.text()).toBeTruthy(); | ^ 558 | await page.reload({ waitUntil: 'domcontentloaded' }); 559 | await expect(page.getByText('Loading Open Design…')).toHaveCount(0, { 560 | timeout: 60_000, at openHomeAndPinWorkspace (/home/runner/work/open-design/open-design/e2e/ui/workspace-multi-client-collab.test.ts:557:48) at /home/runner/work/open-design/open-design/e2e/ui/workspace-multi-client-collab.test.ts:72:5
[chromium] β€Ί ui/workspace-multi-client-collab.test.ts:36:1 β€Ί [P0] two isolated clients converge live content: e2e/ui/workspace-multi-client-collab.test.ts#L557
1) [chromium] β€Ί ui/workspace-multi-client-collab.test.ts:36:1 β€Ί [P0] two isolated clients converge live content, presence, and owner unshare Error: {"error":"missing_workspace_member_id"} expect(received).toBeTruthy() Received: false 555 | timeout: 15_000, 556 | }); > 557 | expect(response.ok(), await response.text()).toBeTruthy(); | ^ 558 | await page.reload({ waitUntil: 'domcontentloaded' }); 559 | await expect(page.getByText('Loading Open Design…')).toHaveCount(0, { 560 | timeout: 60_000, at openHomeAndPinWorkspace (/home/runner/work/open-design/open-design/e2e/ui/workspace-multi-client-collab.test.ts:557:48) at /home/runner/work/open-design/open-design/e2e/ui/workspace-multi-client-collab.test.ts:72:5
UI P0 (entry-settings)
Process completed with exit code 1.
[chromium] β€Ί ui/workspace-team-interactions.test.ts:939:1 β€Ί [P0] inbound shared-project transfer shows syncing instead of a false empty project: e2e/ui/workspace-team-interactions.test.ts#L1021
3) [chromium] β€Ί ui/workspace-team-interactions.test.ts:939:1 β€Ί [P0] inbound shared-project transfer shows syncing instead of a false empty project Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: getByTestId('design-files-syncing') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for getByTestId('design-files-syncing') 1019 | await expect(page.getByTestId('file-workspace')).toBeVisible({ timeout: T.long }); 1020 | await page.getByTestId('design-files-tab').click(); > 1021 | await expect(page.getByTestId('design-files-syncing')).toBeVisible(); | ^ 1022 | await expect(page.getByTestId('design-files-empty')).toHaveCount(0); 1023 | await expect(page.getByText('New sketch', { exact: true })).toHaveCount(0); 1024 | await expect.poll(() => pullAttempts).toBeGreaterThan(0); at /home/runner/work/open-design/open-design/e2e/ui/workspace-team-interactions.test.ts:1021:58
[chromium] β€Ί ui/workspace-team-interactions.test.ts:939:1 β€Ί [P0] inbound shared-project transfer shows syncing instead of a false empty project: e2e/ui/workspace-team-interactions.test.ts#L1021
3) [chromium] β€Ί ui/workspace-team-interactions.test.ts:939:1 β€Ί [P0] inbound shared-project transfer shows syncing instead of a false empty project Error: expect(locator).toBeVisible() failed Locator: getByTestId('design-files-syncing') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for getByTestId('design-files-syncing') 1019 | await expect(page.getByTestId('file-workspace')).toBeVisible({ timeout: T.long }); 1020 | await page.getByTestId('design-files-tab').click(); > 1021 | await expect(page.getByTestId('design-files-syncing')).toBeVisible(); | ^ 1022 | await expect(page.getByTestId('design-files-empty')).toHaveCount(0); 1023 | await expect(page.getByText('New sketch', { exact: true })).toHaveCount(0); 1024 | await expect.poll(() => pullAttempts).toBeGreaterThan(0); at /home/runner/work/open-design/open-design/e2e/ui/workspace-team-interactions.test.ts:1021:58
[chromium] β€Ί ui/workspace-team-interactions.test.ts:615:1 β€Ί [P0] an already-open move flow fails closed when the workspace locks before commit: e2e/ui/workspace-team-interactions.test.ts#L655
2) [chromium] β€Ί ui/workspace-team-interactions.test.ts:615:1 β€Ί [P0] an already-open move flow fails closed when the workspace locks before commit Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: locator.click: Test timeout of 120000ms exceeded. Call log: - waiting for locator('.recent-projects__card[data-project-id="ui-team-draft"]:visible').getByRole('button', { name: 'More actions' }) 653 | }); 654 | await expect(page.getByTestId('workspace-switcher')).toContainText('Locked Atlas Team'); > 655 | await card.getByRole('button', { name: 'More actions' }).click(); | ^ 656 | await expect(card.getByRole('menu')).toHaveCount(0); 657 | }); 658 | at /home/runner/work/open-design/open-design/e2e/ui/workspace-team-interactions.test.ts:655:60
[chromium] β€Ί ui/workspace-team-interactions.test.ts:615:1 β€Ί [P0] an already-open move flow fails closed when the workspace locks before commit: e2e/ui/workspace-team-interactions.test.ts#L0
2) [chromium] β€Ί ui/workspace-team-interactions.test.ts:615:1 β€Ί [P0] an already-open move flow fails closed when the workspace locks before commit Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Test timeout of 120000ms exceeded.
[chromium] β€Ί ui/workspace-team-interactions.test.ts:615:1 β€Ί [P0] an already-open move flow fails closed when the workspace locks before commit: e2e/ui/workspace-team-interactions.test.ts#L655
2) [chromium] β€Ί ui/workspace-team-interactions.test.ts:615:1 β€Ί [P0] an already-open move flow fails closed when the workspace locks before commit Error: locator.click: Test timeout of 120000ms exceeded. Call log: - waiting for locator('.recent-projects__card[data-project-id="ui-team-draft"]:visible').getByRole('button', { name: 'More actions' }) 653 | }); 654 | await expect(page.getByTestId('workspace-switcher')).toContainText('Locked Atlas Team'); > 655 | await card.getByRole('button', { name: 'More actions' }).click(); | ^ 656 | await expect(card.getByRole('menu')).toHaveCount(0); 657 | }); 658 | at /home/runner/work/open-design/open-design/e2e/ui/workspace-team-interactions.test.ts:655:60
[chromium] β€Ί ui/workspace-team-interactions.test.ts:615:1 β€Ί [P0] an already-open move flow fails closed when the workspace locks before commit: e2e/ui/workspace-team-interactions.test.ts#L0
2) [chromium] β€Ί ui/workspace-team-interactions.test.ts:615:1 β€Ί [P0] an already-open move flow fails closed when the workspace locks before commit Test timeout of 120000ms exceeded.
[chromium] β€Ί ui/workspace-team-interactions.test.ts:148:1 β€Ί [P0] workspace switcher changes identity: e2e/ui/workspace-team-interactions.test.ts#L170
1) [chromium] β€Ί ui/workspace-team-interactions.test.ts:148:1 β€Ί [P0] workspace switcher changes identity, returns Home, and exposes team navigation Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(received).toEqual(expected) // deep equality - Expected - 0 + Received + 1 Array [ Object { "workspaceId": "ui-ws-team", + "workspaceMemberId": "ui-wm-owner", }, ] Call Log: - Timeout 10000ms exceeded while waiting on the predicate 168 | await menu.getByRole('menuitem', { name: 'Atlas Team' }).click(); 169 | > 170 | await expect.poll(() => mocks.activeBodies).toEqual([ | ^ 171 | { workspaceId: TEAM_OWNER.workspaceId }, 172 | ]); 173 | await expect(page.getByTestId('workspace-switcher')).toContainText('Atlas Team'); at /home/runner/work/open-design/open-design/e2e/ui/workspace-team-interactions.test.ts:170:47
[chromium] β€Ί ui/workspace-team-interactions.test.ts:148:1 β€Ί [P0] workspace switcher changes identity: e2e/ui/workspace-team-interactions.test.ts#L170
1) [chromium] β€Ί ui/workspace-team-interactions.test.ts:148:1 β€Ί [P0] workspace switcher changes identity, returns Home, and exposes team navigation Error: expect(received).toEqual(expected) // deep equality - Expected - 0 + Received + 1 Array [ Object { "workspaceId": "ui-ws-team", + "workspaceMemberId": "ui-wm-owner", }, ] Call Log: - Timeout 10000ms exceeded while waiting on the predicate 168 | await menu.getByRole('menuitem', { name: 'Atlas Team' }).click(); 169 | > 170 | await expect.poll(() => mocks.activeBodies).toEqual([ | ^ 171 | { workspaceId: TEAM_OWNER.workspaceId }, 172 | ]); 173 | await expect(page.getByTestId('workspace-switcher')).toContainText('Atlas Team'); at /home/runner/work/open-design/open-design/e2e/ui/workspace-team-interactions.test.ts:170:47
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/
E2E Vitest
merge_group changed-file resolution failed; falling back to the full plan: Error: merge_group compare result reached GitHub's 300-file ceiling
E2E Vitest
merge_group changed-file resolution failed; falling back to the full plan: Error: Command failed: /opt/hostedtoolcache/node/24.18.0/x64/bin/node /tmp/scopes-test-ecPOJC/gh-stub.mjs api repos/nexu-io/open-design/compare/1111111111111111111111111111111111111111...2222222222222222222222222222222222222222
Slow Test: e2e/[chromium] β€Ί ui/amr-onboarding.test.ts#L0
e2e/[chromium] β€Ί ui/amr-onboarding.test.ts took 5.4m
🎭 Playwright Run Summary
3 skipped 17 passed (3.2m)
🎭 Playwright Run Summary
18 passed (4.5m)
🎭 Playwright Run Summary
4 passed (1.5m)
🎭 Playwright Run Summary
22 passed (4.1m)
🎭 Playwright Run Summary
29 passed (7.5m)
🎭 Playwright Run Summary
1 failed [chromium] β€Ί ui/workspace-multi-client-collab.test.ts:36:1 β€Ί [P0] two isolated clients converge live content, presence, and owner unshare 36 passed (10.3m)
🎭 Playwright Run Summary
3 failed [chromium] β€Ί ui/workspace-team-interactions.test.ts:148:1 β€Ί [P0] workspace switcher changes identity, returns Home, and exposes team navigation [chromium] β€Ί ui/workspace-team-interactions.test.ts:615:1 β€Ί [P0] an already-open move flow fails closed when the workspace locks before commit [chromium] β€Ί ui/workspace-team-interactions.test.ts:939:1 β€Ί [P0] inbound shared-project transfer shows syncing instead of a false empty project 1 skipped 67 passed (20.6m)

Artifacts

Produced during runtime
Name Size Digest
handoff-report-visual-pr
438 Bytes
sha256:1426358fcb2129e1da1e93070a2c2542e0768c8d890533c337cbe0d1c802b60d
ui-p0-ci-30744499723-entry-settings
62 MB
sha256:0888793b810362084d798f41f067b45c79a15cb5d7c7c4a8ae85af96eb888a1c
ui-p0-ci-30744499723-project-runtime
268 KB
sha256:98f1fc203c0e5bf588e49d558f16b76cb85a8691bf2b6e87d6ecfc12906d0260
ui-p0-ci-30744499723-project-runtime-domain
322 KB
sha256:5b488c0b8576272b496d439482ca0f10dbf4faa0a6c3d8121621a926c2691587
ui-p0-ci-30744499723-project-workspace
10.9 MB
sha256:15d8891444d81c8b434fd6207a2055276c13102b411b12b1a8b890e88d2be040
ui-p0-ci-30744499723-workspace-restoration
363 KB
sha256:2cb210b707019fd3ef3ed03bf421297b7f8be2830fbabe5b55935736bbde7308
visual-pr-capture-6312-30744499723-entry-navigation
5.48 MB
sha256:b4c2c2b3b69d3dde917f0d3f370b3136ac0013320023f181fe080a0974dd5f8d
visual-pr-capture-6312-30744499723-settings-workspace
3.16 MB
sha256:a18f338a3d64c2720e15c452b6778216205a5b12b4ffa9e1298ee163f30088ca