Skip to content

feat(workspace-team): team workspaces, shared resources, workspace-scoped billing, and the #5517 redesign #17110

feat(workspace-team): team workspaces, shared resources, workspace-scoped billing, and the #5517 redesign

feat(workspace-team): team workspaces, shared resources, workspace-scoped billing, and the #5517 redesign #17110

Triggered via pull request August 2, 2026 20:14
Status Failure
Total duration 15m 42s
Artifacts 8

ci.yml

on: pull_request
Resolve runner profiles
13s
Resolve runner profiles
Detect validation scopes
19s
Detect validation scopes
Static gate
23s
Static gate
Matrix: playwright_critical
Matrix: playwright_visual
Matrix: ui_p0
Preflight
3m 34s
Preflight
Workspace unit tests
1m 48s
Workspace unit tests
Windows tools-pack payload tests
2m 21s
Windows tools-pack payload tests
Web workspace tests
8m 39s
Web workspace tests
E2E Vitest
6m 11s
E2E Vitest
Validate workspace
4s
Validate workspace
Runtime summary
6s
Runtime summary
Fit to window
Zoom out
Zoom in

Annotations

12 errors, 4 warnings, and 7 notices
Web workspace tests
Process completed with exit code 1.
tests/components/App.project-create-race.test.tsx > App project creation routing > does not open a project bound to another workspace through a non-hint path: apps/web/tests/components/App.project-create-race.test.tsx#L1856
AssertionError: expected "vi.fn()" to be called with arguments: [ 'project-bound-a', …(1) ] Received: 1st vi.fn() call: @@ -24,8 +24,9 @@ "seatLimit": 5, "usedSeats": 1, }, "workspaceId": "ws-b", "workspaceMemberId": "member-ws-b", + "workspaceName": "ws-b", "workspaceType": "team", }, ] Number of calls: 1 Ignored nodes: comments, script, style <html data-od-app-mounted="1" data-theme="light" style="--accent: #353535; --accent-strong: color-mix(in srgb, #353535 82%, var(--text-strong)); --accent-soft: color-mix(in srgb, #353535 12%, var(--bg-subtle)); --accent-tint: color-mix(in srgb, #353535 6%, var(--bg-panel)); --accent-hover: color-mix(in srgb, #353535 86%, var(--text-strong));" > <head /> <body> <div> <div data-reduced-motion="user" data-testid="motion-config" > <div class="workspace-shell workspace-shell--web" data-client-type="web" > <span data-testid="workspace-tabs-active-project-workspace" > unresolved </span> <div class="workspace-shell__body" > <main> <div data-testid="entry-home-surface" /> <div data-testid="amr-login-status" > null </div> <button type="button" > Create project </button> <button type="button" > Create prompted project </button> <button type="button" > Create plugin share project </button> <button type="button" > Create project with working dir </button> <button type="button" > Create project with context dirs </button> <button type="button" > Host import folder </button> <button type="button" > Refresh agents </button> <button type="button" > Open settings from home </button> <button type="button" > Open missing project </button> <button type="button" > Open catalog project </button> <button type="button" > Open updated catalog project </button> <button type="button" > Open own unbound project </button> <button type="button" > Open workspace A project </button> <button type="button" > Open stale own workspace A project </button> <div data-testid="entry-agent-list" /> <div data-testid="entry-project-project-bound-a" > <span> Workspace A local </span> <button type="button" > Open Workspace A local </button> <button type="button" > Delete Workspace A local </button> </div> </main> </div> </div> <div aria-live="assertive" class="od-toast tone-error placement-bottom" role="alert" > <div
tests/components/App.project-create-race.test.tsx > App project creation routing > uses a title hint only after loading the workspace-bound local row: apps/web/tests/components/App.project-create-race.test.tsx#L1683
AssertionError: expected "vi.fn()" to be called with arguments: [ 'project-shared', …(1) ] Received: 1st vi.fn() call: @@ -24,8 +24,9 @@ "seatLimit": 5, "usedSeats": 1, }, "workspaceId": "ws-1", "workspaceMemberId": "wm-1", + "workspaceName": "ws-1", "workspaceType": "team", }, ] Number of calls: 1 ❯ tests/components/App.project-create-race.test.tsx:1683:30
tests/components/App.project-create-race.test.tsx > App project creation routing > switches to the picked working dir before uploading staged Home attachments: apps/web/tests/components/App.project-create-race.test.tsx#L1552
AssertionError: expected "vi.fn()" to be called with arguments: [ 'project-new', …(3) ] Received: 1st vi.fn() call: @@ -26,8 +26,9 @@ "seatLimit": 5, "usedSeats": 1, }, "workspaceId": "ws-create", "workspaceMemberId": "wm-create", + "workspaceName": "ws-create", "workspaceType": "team", }, ] Number of calls: 1 ❯ tests/components/App.project-create-race.test.tsx:1552:44
tests/useWorkspaceContext.sign-in-refresh.test.tsx > useWorkspaceContext sign-in refresh > keeps showing a resolved workspace while an identity refresh re-reads: apps/web/tests/useWorkspaceContext.sign-in-refresh.test.tsx#L141
AssertionError: expected { workspaceType: 'team', …(12) } to deeply equal { workspaceType: 'team', …(11) } Ignored nodes: comments, script, style <html> <head /> <body> <div /> </body> </html> - Expected + Received @@ -22,7 +22,8 @@ "usedSeats": 2, }, "teamName": "Acme", "workspaceId": "ws-1", "workspaceMemberId": "member-1", + "workspaceName": "Acme", "workspaceType": "team", } ❯ tests/useWorkspaceContext.sign-in-refresh.test.tsx:141:56 ❯ runWithExpensiveErrorDiagnosticsDisabled ../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/config.js:47:12 ❯ checkCallback ../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:124:77 ❯ Timeout.checkRealTimersCallback ../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:118:16
tests/useWorkspaceContext.sign-in-refresh.test.tsx > useWorkspaceContext sign-in refresh > stops reporting signed-out while an explicit post-sign-in re-read is in flight: apps/web/tests/useWorkspaceContext.sign-in-refresh.test.tsx#L111
AssertionError: expected { workspaceType: 'team', …(12) } to deeply equal { workspaceType: 'team', …(11) } Ignored nodes: comments, script, style <html> <head /> <body> <div /> </body> </html> - Expected + Received @@ -22,7 +22,8 @@ "usedSeats": 2, }, "teamName": "Acme", "workspaceId": "ws-1", "workspaceMemberId": "member-1", + "workspaceName": "Acme", "workspaceType": "team", } ❯ tests/useWorkspaceContext.sign-in-refresh.test.tsx:111:56 ❯ runWithExpensiveErrorDiagnosticsDisabled ../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/config.js:47:12 ❯ checkCallback ../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:124:77 ❯ Timeout.checkRealTimersCallback ../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:118:16
tests/use-project-collab.context-seed.test.tsx > useProjectCollab workspace-context seeding > marks a catalog-named teammate project as shared non-owner before status names them: apps/web/tests/use-project-collab.context-seed.test.tsx#L281
AssertionError: expected false to be true // Object.is equality - Expected + Received - true + false ❯ tests/use-project-collab.context-seed.test.tsx:281:53
tests/use-project-collab.context-seed.test.tsx > useProjectCollab workspace-context seeding > treats catalog-named owners as effective owners while status omits ownerMemberId: apps/web/tests/use-project-collab.context-seed.test.tsx#L235
AssertionError: expected false to be true // Object.is equality - Expected + Received - true + false ❯ tests/use-project-collab.context-seed.test.tsx:235:53
tests/use-project-collab.context-seed.test.tsx > useProjectCollab workspace-context seeding > does not fail closed for a shared project the viewer owns: apps/web/tests/use-project-collab.context-seed.test.tsx#L193
AssertionError: expected true to be false // Object.is equality - Expected + Received - false + true ❯ tests/use-project-collab.context-seed.test.tsx:193:47
tests/use-project-collab.context-seed.test.tsx > useProjectCollab workspace-context seeding > does not fail closed for a project the hub catalog does not list: apps/web/tests/use-project-collab.context-seed.test.tsx#L156
AssertionError: expected true to be false // Object.is equality Ignored nodes: comments, script, style <html> <head /> <body> <div /> <div /> <div /> </body> </html> - Expected + Received - false + true ❯ tests/use-project-collab.context-seed.test.tsx:156:49 ❯ runWithExpensiveErrorDiagnosticsDisabled ../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/config.js:47:12 ❯ checkCallback ../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:124:77 ❯ Timeout.checkRealTimersCallback ../../node_modules/.pnpm/@testing-library+dom@10.4.1/node_modules/@testing-library/dom/dist/wait-for.js:118:16
[chromium] › ui/app-restoration.test.ts:1217:1 › [P0] @critical daemon error details persist between failed sends: e2e/lib/playwright/workspace.ts#L16
1) [chromium] › ui/app-restoration.test.ts:1217:1 › [P0] @critical daemon error details persist between failed sends Error: expect(locator).toHaveAttribute(expected) failed Locator: getByTestId('design-files-tab') Expected: "true" Received: "false" Timeout: 10000ms Call log: - Expect "toHaveAttribute" with timeout 10000ms - waiting for getByTestId('design-files-tab') 22 × locator resolved to <button role="tab" tabindex="0" type="button" title="Design Files" aria-selected="false" aria-label="Design Files" data-testid="design-files-tab" class="ws-tab design-files-tab ">…</button> - unexpected value "false" at ../lib/playwright/workspace.ts:16 14 | 15 | export async function expectAllProjectFilesActive(page: Page): Promise<void> { > 16 | await expect(page.getByTestId('design-files-tab')).toHaveAttribute('aria-selected', 'true'); | ^ 17 | } 18 | 19 | export async function expectAllProjectFilesInactive(page: Page): Promise<void> { at expectAllProjectFilesActive (/home/runner/work/open-design/open-design/e2e/lib/playwright/workspace.ts:16:54) at openAllProjectFiles (/home/runner/work/open-design/open-design/e2e/lib/playwright/workspace.ts:12:9) at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:1250:3
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-AhQnKi/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.3m
🎭 Playwright Run Summary
3 skipped 17 passed (3.2m)
🎭 Playwright Run Summary
18 passed (4.3m)
🎭 Playwright Run Summary
4 passed (1.9m)
🎭 Playwright Run Summary
22 passed (5.1m)
🎭 Playwright Run Summary
1 flaky [chromium] › ui/app-restoration.test.ts:1217:1 › [P0] @critical daemon error details persist between failed sends 28 passed (8.6m)
🎭 Playwright Run Summary
1 skipped 70 passed (10.9m)
🎭 Playwright Run Summary
37 passed (12.2m)

Artifacts

Produced during runtime
Name Size Digest
handoff-report-visual-pr
438 Bytes
sha256:beaab0c216723f04157109a1dd21fc5d434ed07300a77c65aabfd89229d2bb35
ui-p0-ci-30765155248-entry-settings
389 KB
sha256:278c2deeb5c317cf04141c8be6561666da37f636fbdc7f0b4ebc01681c81405a
ui-p0-ci-30765155248-project-runtime
287 KB
sha256:ac2dbcc54ae9bd9e21354a8177ac24fc47f8cd79001a3dcb068c1099efc0c824
ui-p0-ci-30765155248-project-runtime-domain
340 KB
sha256:60b93ad19cfebaed38b7a0c5e26bc0336b4a0db487a180e70433b398fe2b5ee2
ui-p0-ci-30765155248-project-workspace
406 KB
sha256:b621f5c8855d8f071c3d7728c21ade6b6c3733df750462223c61566ef1cc94fb
ui-p0-ci-30765155248-workspace-restoration
13.5 MB
sha256:0dcfcd78809b4b3fd7baedc1adb96c098110ecf1c8c69b2e0809fc2ea2591a60
visual-pr-capture-6142-30765155248-entry-navigation
5.49 MB
sha256:5f9228e903588ebb2595e12c778bc61518f0d90d528591b59409ba7a715ebdda
visual-pr-capture-6142-30765155248-settings-workspace
3.13 MB
sha256:36920bdb9c40812c9afb71ed963c09a492a6e290e6a9939e518adac132af7b26