feat(workspace-team): team workspaces, shared resources, workspace-scoped billing, and the #5517 redesign #16698
ci.yml
on: pull_request
Resolve runner profiles
11s
Matrix: playwright_critical
Matrix: playwright_visual
Matrix: ui_p0
Preflight
3m 31s
Workspace unit tests
1m 45s
Windows tools-pack payload tests
2m 19s
Web workspace tests
7m 35s
E2E Vitest
4m 28s
Runtime summary
4s
Annotations
22 errors, 3 warnings, and 2 notices
|
Web workspace tests
Canceling since a higher priority waiting request for ci-6142 exists
|
|
Web workspace tests
The operation was canceled.
|
|
UI P0 (workspace-restoration)
Canceling since a higher priority waiting request for ci-6142 exists
|
|
UI P0 (workspace-restoration)
The operation was canceled.
|
|
[chromium] βΊ ui/app-restoration.test.ts:203:1 βΊ [P0] switching between projects restores each project workspace to its last active file tab:
e2e/ui/app-restoration.test.ts#L242
1) [chromium] βΊ ui/app-restoration.test.ts:203:1 βΊ [P0] switching between projects restores each project workspace to its last active file tab
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: locator('.ws-tab[role="tab"]').filter({ has: locator('.ws-tab-label').filter({ hasText: 'alpha-primary.png' }) }).first()
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for locator('.ws-tab[role="tab"]').filter({ has: locator('.ws-tab-label').filter({ hasText: 'alpha-primary.png' }) }).first()
240 | });
241 | await expect((await alphaPrimaryUpload).ok()).toBeTruthy();
> 242 | await expect(tabBySuffix(page, 'alpha-primary.png')).toBeVisible();
| ^
243 | const alphaSecondaryUpload = page.waitForResponse(
244 | (resp: Response) => resp.url().includes('/upload') && resp.request().method() === 'POST',
245 | { timeout: 5000 },
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:242:56
|
|
[chromium] βΊ ui/app-restoration.test.ts:203:1 βΊ [P0] switching between projects restores each project workspace to its last active file tab:
e2e/ui/app-restoration.test.ts#L242
1) [chromium] βΊ ui/app-restoration.test.ts:203:1 βΊ [P0] switching between projects restores each project workspace to its last active file tab
Error: expect(locator).toBeVisible() failed
Locator: locator('.ws-tab[role="tab"]').filter({ has: locator('.ws-tab-label').filter({ hasText: 'alpha-primary.png' }) }).first()
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for locator('.ws-tab[role="tab"]').filter({ has: locator('.ws-tab-label').filter({ hasText: 'alpha-primary.png' }) }).first()
240 | });
241 | await expect((await alphaPrimaryUpload).ok()).toBeTruthy();
> 242 | await expect(tabBySuffix(page, 'alpha-primary.png')).toBeVisible();
| ^
243 | const alphaSecondaryUpload = page.waitForResponse(
244 | (resp: Response) => resp.url().includes('/upload') && resp.request().method() === 'POST',
245 | { timeout: 5000 },
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:242:56
|
|
UI P0 (project-workspace)
Canceling since a higher priority waiting request for ci-6142 exists
|
|
UI P0 (project-workspace)
The operation was canceled.
|
|
[chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-delete: Design Files panel deletes an uploaded file and clears its tab:
e2e/ui/app-design-files.test.ts#L487
2) [chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-delete: Design Files panel deletes an uploaded file and clears its tab
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: getByRole('tab', { name: /keep-me\.png/i })
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for getByRole('tab', { name: /keep-me\.png/i })
485 | buffer: pngBytes,
486 | });
> 487 | await expect(page.getByRole('tab', { name: /keep-me\.png/i })).toBeVisible();
| ^
488 |
489 | await page.getByTestId('design-files-upload-input').setInputFiles({
490 | name: 'trash-me.png',
at runDesignFilesDeleteFlow (/home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:487:66)
at /home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:96:7
|
|
[chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-delete: Design Files panel deletes an uploaded file and clears its tab:
e2e/ui/app-design-files.test.ts#L487
2) [chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-delete: Design Files panel deletes an uploaded file and clears its tab
Error: expect(locator).toBeVisible() failed
Locator: getByRole('tab', { name: /keep-me\.png/i })
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for getByRole('tab', { name: /keep-me\.png/i })
485 | buffer: pngBytes,
486 | });
> 487 | await expect(page.getByRole('tab', { name: /keep-me\.png/i })).toBeVisible();
| ^
488 |
489 | await page.getByTestId('design-files-upload-input').setInputFiles({
490 | name: 'trash-me.png',
at runDesignFilesDeleteFlow (/home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:487:66)
at /home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:96:7
|
|
[chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-upload: Design Files panel uploads an image and opens it in the workspace:
e2e/ui/app-design-files.test.ts#L450
1) [chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-upload: Design Files panel uploads an image and opens it in the workspace
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: getByRole('tab', { name: /moodboard\.png/i })
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for getByRole('tab', { name: /moodboard\.png/i })
448 | });
449 |
> 450 | await expect(page.getByRole('tab', { name: /moodboard\.png/i })).toBeVisible();
| ^
451 | await openAllProjectFiles(page);
452 | // #5517 deleted the preview pane that used to spell out kind / size /
453 | // download for the picked file. The panel's category tab bar is what states
at runDesignFilesUploadFlow (/home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:450:68)
at /home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:92:7
|
|
[chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-upload: Design Files panel uploads an image and opens it in the workspace:
e2e/ui/app-design-files.test.ts#L450
1) [chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-upload: Design Files panel uploads an image and opens it in the workspace
Error: expect(locator).toBeVisible() failed
Locator: getByRole('tab', { name: /moodboard\.png/i })
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for getByRole('tab', { name: /moodboard\.png/i })
448 | });
449 |
> 450 | await expect(page.getByRole('tab', { name: /moodboard\.png/i })).toBeVisible();
| ^
451 | await openAllProjectFiles(page);
452 | // #5517 deleted the preview pane that used to spell out kind / size /
453 | // download for the picked file. The panel's category tab bar is what states
at runDesignFilesUploadFlow (/home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:450:68)
at /home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:92:7
|
|
UI P0 (entry-settings)
Canceling since a higher priority waiting request for ci-6142 exists
|
|
UI P0 (entry-settings)
The operation was canceled.
|
|
[chromium] βΊ ui/entry-chrome-flows.test.ts:2147:1 βΊ [P0] @critical home composer routes free-form prompts through the design router by default:
e2e/ui/entry-chrome-flows.test.ts#L2150
2) [chromium] βΊ ui/entry-chrome-flows.test.ts:2147:1 βΊ [P0] @critical home composer routes free-form prompts through the design router by default
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toHaveAttribute(expected) failed
Locator: getByTestId('composer-mode-trigger')
Expected: "Choose a mode"
Received: "Mode: Design"
Timeout: 10000ms
Call log:
- Expect "toHaveAttribute" with timeout 10000ms
- waiting for getByTestId('composer-mode-trigger')
22 Γ locator resolved to <button type="button" title="Design" aria-haspopup="menu" aria-expanded="false" aria-label="Mode: Design" data-testid="composer-mode-trigger" class="composer-mode__trigger is-selected">β¦</button>
- unexpected value "Mode: Design"
2148 | await gotoEntryHome(page);
2149 |
> 2150 | await expect(page.getByTestId('composer-mode-trigger')).toHaveAttribute('aria-label', 'Choose a mode');
| ^
2151 |
2152 | const input = page.getByTestId('home-hero-input');
2153 | const prompt =
at /home/runner/work/open-design/open-design/e2e/ui/entry-chrome-flows.test.ts:2150:59
|
|
[chromium] βΊ ui/entry-chrome-flows.test.ts:2147:1 βΊ [P0] @critical home composer routes free-form prompts through the design router by default:
e2e/ui/entry-chrome-flows.test.ts#L2150
2) [chromium] βΊ ui/entry-chrome-flows.test.ts:2147:1 βΊ [P0] @critical home composer routes free-form prompts through the design router by default
Error: expect(locator).toHaveAttribute(expected) failed
Locator: getByTestId('composer-mode-trigger')
Expected: "Choose a mode"
Received: "Mode: Design"
Timeout: 10000ms
Call log:
- Expect "toHaveAttribute" with timeout 10000ms
- waiting for getByTestId('composer-mode-trigger')
16 Γ locator resolved to <button type="button" title="Design" aria-haspopup="menu" aria-expanded="false" aria-label="Mode: Design" data-testid="composer-mode-trigger" class="composer-mode__trigger is-selected">β¦</button>
- unexpected value "Mode: Design"
2148 | await gotoEntryHome(page);
2149 |
> 2150 | await expect(page.getByTestId('composer-mode-trigger')).toHaveAttribute('aria-label', 'Choose a mode');
| ^
2151 |
2152 | const input = page.getByTestId('home-hero-input');
2153 | const prompt =
at /home/runner/work/open-design/open-design/e2e/ui/entry-chrome-flows.test.ts:2150:59
|
|
[chromium] βΊ ui/amr-onboarding.test.ts:38:1 βΊ [P0] @critical onboarding lets AMR Cloud sign in and complete setup after the login poll succeeds:
e2e/ui/amr-onboarding.test.ts#L1123
1) [chromium] βΊ ui/amr-onboarding.test.ts:38:1 βΊ [P0] @critical onboarding lets AMR Cloud sign in and complete setup after the login poll succeeds
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /What will you design with your agent today/i })
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for getByRole('heading', { name: /What will you design with your agent today/i })
1121 | await expect(page).not.toHaveURL(/\/onboarding$/);
1122 | await dismissPrivacyDialog(page);
> 1123 | await expect(page.getByRole('heading', { name: /What will you design with your agent today/i })).toBeVisible();
| ^
1124 | }
1125 |
1126 | async function expectFinalDesignSystemStep(page: Page) {
at expectOnboardingFinished (/home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:1123:100)
at /home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:65:3
|
|
[chromium] βΊ ui/amr-onboarding.test.ts:38:1 βΊ [P0] @critical onboarding lets AMR Cloud sign in and complete setup after the login poll succeeds:
e2e/ui/amr-onboarding.test.ts#L1123
1) [chromium] βΊ ui/amr-onboarding.test.ts:38:1 βΊ [P0] @critical onboarding lets AMR Cloud sign in and complete setup after the login poll succeeds
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /What will you design with your agent today/i })
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for getByRole('heading', { name: /What will you design with your agent today/i })
1121 | await expect(page).not.toHaveURL(/\/onboarding$/);
1122 | await dismissPrivacyDialog(page);
> 1123 | await expect(page.getByRole('heading', { name: /What will you design with your agent today/i })).toBeVisible();
| ^
1124 | }
1125 |
1126 | async function expectFinalDesignSystemStep(page: Page) {
at expectOnboardingFinished (/home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:1123:100)
at /home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:65:3
|
|
UI P0 (project-runtime)
Canceling since a higher priority waiting request for ci-6142 exists
|
|
UI P0 (project-runtime)
The operation was canceled.
|
|
Validate workspace
Process completed with exit code 1.
|
|
ci
Canceling since a higher priority waiting request for ci-6142 exists
|
|
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-IWQSag/gh-stub.mjs api --paginate repos/nexu-io/open-design/compare/1111111111111111111111111111111111111111...2222222222222222222222222222222222222222 --jq (.files // [])[] | .filename
|
|
π Playwright Run Summary
3 skipped
17 passed (3.1m)
|
|
π Playwright Run Summary
18 passed (4.4m)
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
handoff-report-visual-pr
Expired
|
437 Bytes |
sha256:d0371978e40250ce44f054632c56b505ed37c2c36f14ebd655ed3bb4c727638b
|
|
|
ui-p0-ci-30376869936-entry-settings
Expired
|
11.6 MB |
sha256:55cbf0597d1f532763c4b6c8ed3eb5ee7e5e5b1db450189cab821543b544e9af
|
|
|
ui-p0-ci-30376869936-project-workspace
Expired
|
9.3 MB |
sha256:cd4f7d8dc96ef96b28cfc7cb22f63d38410f8757c7e68655f43ec83ef5641892
|
|
|
ui-p0-ci-30376869936-workspace-restoration
Expired
|
4.72 MB |
sha256:157f72c1ca5e1c8474012bccd0188d6436955fe713339cc5cb77c79099f22769
|
|
|
visual-pr-capture-6142-30376869936-entry-navigation
Expired
|
4.36 MB |
sha256:929387f948484242db9cae12614111b2704c8cfe2631779cd89c1d9153ea9c43
|
|
|
visual-pr-capture-6142-30376869936-settings-workspace
Expired
|
3.16 MB |
sha256:9ba3bc9a9a82ca9076ba82cee5bfa143bf23f1bcdc5e52d3901db9bf7f19e139
|
|