fix(workspace): preserve scoped projects after main sync #17041
ci.yml
on: pull_request
Resolve runner profiles
12s
Matrix: playwright_critical
Matrix: playwright_visual
Matrix: ui_p0
Preflight
3m 37s
Workspace unit tests
1m 53s
Windows tools-pack payload tests
2m 10s
Web workspace tests
8m 40s
E2E Vitest
4m 38s
Runtime summary
3s
Annotations
55 errors, 3 warnings, and 5 notices
|
E2E Vitest
Process completed with exit code 1.
|
|
tests/collab/headerless-mutation.test.ts > a headerless caller can mutate a project the daemon itself owns > signed out, a client keeps write access to exactly the projects it can see:
e2e/lib/vitest/http.ts#L18
Error: HTTP 400 /api/workspace/context: {"error":"WORKSPACE_CONTEXT_REQUIRED","message":"an explicit workspace context is required"}
β― requestJson lib/vitest/http.ts:18:11
β― tests/collab/headerless-mutation.test.ts:327:14
β― runToolsDevSuite lib/vitest/suite.ts:276:5
β― tests/collab/headerless-mutation.test.ts:324:7
|
|
tests/collab/headerless-mutation.test.ts > a headerless caller can mutate a project the daemon itself owns > create then duplicate with no workspace headers β the od CLI shape:
e2e/tests/collab/headerless-mutation.test.ts#L226
AssertionError: precondition: #6201 binds a headerless create to the daemon workspace: expected null to be 'ws-hdl-personal' // Object.is equality
- Expected:
"ws-hdl-personal"
+ Received:
null
β― tests/collab/headerless-mutation.test.ts:226:13
β― runToolsDevSuite lib/vitest/suite.ts:276:5
β― tests/collab/headerless-mutation.test.ts:214:7
|
|
tests/collab/created-project-binding.test.ts > a created project is bound to the workspace the daemon is signed in to > headerless creates bind to the ambient workspace; signed-out stays unbound and still works:
e2e/tests/collab/created-project-binding.test.ts#L198
AssertionError: a headerless create must still bind to the workspace the daemon knows it is in: expected 'unbound' not to be 'unbound' // Object.is equality
β― tests/collab/created-project-binding.test.ts:198:17
β― runToolsDevSuite lib/vitest/suite.ts:276:5
β― tests/collab/created-project-binding.test.ts:186:7
|
|
tests/amr/turn.test.ts > AMR chat-run end-to-end > drives /api/runs against vela ACP and the assistant message captures the fake stream:
e2e/lib/vitest/http.ts#L18
Error: HTTP 409 /api/runs: {"error":{"code":"AMR_WORKSPACE_SCOPE_REQUIRED","message":"open the project from your Personal Workspace before running AMR Cloud"}}
β― requestJson lib/vitest/http.ts:18:11
β― startRun lib/vitest/runs.ts:38:10
β― tests/amr/turn.test.ts:258:19
β― runToolsDevSuite lib/vitest/suite.ts:276:5
β― tests/amr/turn.test.ts:191:5
|
|
tests/amr/relogin-required.test.ts > AMR relogin-required run failures > uses daemon AMR runtime credentials for pre-run login status:
e2e/lib/vitest/http.ts#L18
Error: HTTP 409 /api/runs: {"error":{"code":"AMR_WORKSPACE_SCOPE_REQUIRED","message":"open the project from your Personal Workspace before running AMR Cloud"}}
β― requestJson lib/vitest/http.ts:18:11
β― startRun lib/vitest/runs.ts:38:10
β― tests/amr/relogin-required.test.ts:127:23
β― runToolsDevSuite lib/vitest/suite.ts:276:5
β― tests/amr/relogin-required.test.ts:109:9
β― Object.withEnv [as env] lib/vitest/suite.ts:213:12
β― tests/amr/relogin-required.test.ts:102:5
|
|
tests/amr/relogin-required.test.ts > AMR relogin-required run failures > uses configured AMR profile env for pre-run login status:
e2e/lib/vitest/http.ts#L18
Error: HTTP 409 /api/runs: {"error":{"code":"AMR_WORKSPACE_SCOPE_REQUIRED","message":"open the project from your Personal Workspace before running AMR Cloud"}}
β― requestJson lib/vitest/http.ts:18:11
β― startRun lib/vitest/runs.ts:38:10
β― tests/amr/relogin-required.test.ts:80:21
β― runToolsDevSuite lib/vitest/suite.ts:276:5
β― tests/amr/relogin-required.test.ts:63:7
β― Object.withEnv [as env] lib/vitest/suite.ts:213:12
β― tests/amr/relogin-required.test.ts:61:5
|
|
tests/amr/logout-state-persistence.test.ts > AMR logout state persistence > a previously working AMR session stops working after local logout and requires re-login:
e2e/lib/vitest/http.ts#L18
Error: HTTP 409 /api/runs: {"error":{"code":"AMR_WORKSPACE_SCOPE_REQUIRED","message":"open the project from your Personal Workspace before running AMR Cloud"}}
β― requestJson lib/vitest/http.ts:18:11
β― startRun lib/vitest/runs.ts:38:10
β― tests/amr/logout-state-persistence.test.ts:45:26
β― runToolsDevSuite lib/vitest/suite.ts:276:5
β― tests/amr/logout-state-persistence.test.ts:19:7
β― Object.withEnv [as env] lib/vitest/suite.ts:213:12
β― tests/amr/logout-state-persistence.test.ts:18:5
|
|
tests/amr/insufficient-balance.test.ts > AMR insufficient balance run failures > fails the run with a recharge-facing AMR error when fake vela reports insufficient balance:
e2e/lib/vitest/http.ts#L18
Error: HTTP 409 /api/runs: {"error":{"code":"AMR_WORKSPACE_SCOPE_REQUIRED","message":"open the project from your Personal Workspace before running AMR Cloud"}}
β― requestJson lib/vitest/http.ts:18:11
β― startRun lib/vitest/runs.ts:38:10
β― tests/amr/insufficient-balance.test.ts:37:19
β― runToolsDevSuite lib/vitest/suite.ts:276:5
β― tests/amr/insufficient-balance.test.ts:17:5
|
|
tests/amr/auth-error-convergence.test.ts > AMR auth error convergence > marks the run and assistant message as failed when fake vela returns an auth error during prompt:
e2e/lib/vitest/http.ts#L18
Error: HTTP 409 /api/runs: {"error":{"code":"AMR_WORKSPACE_SCOPE_REQUIRED","message":"open the project from your Personal Workspace before running AMR Cloud"}}
β― requestJson lib/vitest/http.ts:18:11
β― startRun lib/vitest/runs.ts:38:10
β― tests/amr/auth-error-convergence.test.ts:38:19
β― runToolsDevSuite lib/vitest/suite.ts:276:5
β― tests/amr/auth-error-convergence.test.ts:17:5
|
|
Playwright visual (settings-workspace)
Process completed with exit code 1.
|
|
Playwright visual (settings-workspace)
Process completed with exit code 1.
|
|
ui/visual-settings.test.ts:82:1 βΊ [P1] captures the settings Open Design account balance surface:
e2e/ui/visual-settings.test.ts#L115
1) ui/visual-settings.test.ts:82:1 βΊ [P1] captures the settings Open Design account balance surface
Error: expect(locator).toBeVisible() failed
Locator: locator('.modal-settings').first().getByTestId('settings-agent-card-amr-upgrade')
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for locator('.modal-settings').first().getByTestId('settings-agent-card-amr-upgrade')
113 | await expect(amrCard).toContainText('plus');
114 | await expect(amrCard).toContainText('$247.51');
> 115 | await expect(dialog.getByTestId('settings-agent-card-amr-upgrade')).toBeVisible();
| ^
116 | await waitForVisualFonts(page);
117 |
118 | await captureVisual(page, 'visual-settings-open-design-account');
at /home/runner/work/open-design/open-design/e2e/ui/visual-settings.test.ts:115:71
|
|
[chromium] βΊ ui/app-restoration.test.ts:925:1 βΊ [P0] opening an uploaded file route keeps the older conversation present in history:
e2e/ui/app-restoration.test.ts#L957
6) [chromium] βΊ ui/app-restoration.test.ts:925:1 βΊ [P0] opening an uploaded file route keeps the older conversation present in history
Error: expect(locator).toBeVisible() failed
Locator: locator('.ws-tab[role="tab"]').filter({ has: locator('.ws-tab-label').filter({ hasText: 'conversation-surface-reference.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: 'conversation-surface-reference.png' }) }).first()
955 | });
956 | const uploadedFileTab = tabBySuffix(page, 'conversation-surface-reference.png');
> 957 | await expect(uploadedFileTab).toBeVisible();
| ^
958 | const uploadedName = await uploadedFileTab.getAttribute('title');
959 | expect(uploadedName).toBeTruthy();
960 |
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:957:33
|
|
[chromium] βΊ ui/app-restoration.test.ts:822:1 βΊ [P0] returning from workspace surfaces keeps the older conversation reachable from history:
e2e/ui/app-restoration.test.ts#L853
5) [chromium] βΊ ui/app-restoration.test.ts:822:1 βΊ [P0] returning from workspace surfaces keeps the older conversation reachable from history
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: locator('.ws-tab[role="tab"]').filter({ has: locator('.ws-tab-label').filter({ hasText: 'surface-restore.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: 'surface-restore.png' }) }).first()
851 | ),
852 | });
> 853 | await expect(tabBySuffix(page, 'surface-restore.png')).toBeVisible();
| ^
854 |
855 | await page.getByTestId('conversation-history-trigger').click();
856 | const historyList = page.getByTestId('conversation-list');
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:853:58
|
|
[chromium] βΊ ui/app-restoration.test.ts:822:1 βΊ [P0] returning from workspace surfaces keeps the older conversation reachable from history:
e2e/ui/app-restoration.test.ts#L853
5) [chromium] βΊ ui/app-restoration.test.ts:822:1 βΊ [P0] returning from workspace surfaces keeps the older conversation reachable from history
Error: expect(locator).toBeVisible() failed
Locator: locator('.ws-tab[role="tab"]').filter({ has: locator('.ws-tab-label').filter({ hasText: 'surface-restore.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: 'surface-restore.png' }) }).first()
851 | ),
852 | });
> 853 | await expect(tabBySuffix(page, 'surface-restore.png')).toBeVisible();
| ^
854 |
855 | await page.getByTestId('conversation-history-trigger').click();
856 | const historyList = page.getByTestId('conversation-list');
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:853:58
|
|
[chromium] βΊ ui/app-restoration.test.ts:389:1 βΊ [P0] returning from an uploaded design file route to the project root keeps the uploaded file tab active:
e2e/ui/app-restoration.test.ts#L417
4) [chromium] βΊ ui/app-restoration.test.ts:389:1 βΊ [P0] returning from an uploaded design file route to the project root keeps the uploaded file tab active
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: locator('[data-testid^="design-file-row-"]').filter({ hasText: 'root-design-reference.png' })
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for locator('[data-testid^="design-file-row-"]').filter({ hasText: 'root-design-reference.png' })
415 | hasText: 'root-design-reference.png',
416 | });
> 417 | await expect(fileRow).toBeVisible();
| ^
418 | await fileRow.getByRole('button').first().click();
419 | await expect(page.getByTestId('design-file-preview')).toBeVisible();
420 |
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:417:25
|
|
[chromium] βΊ ui/app-restoration.test.ts:389:1 βΊ [P0] returning from an uploaded design file route to the project root keeps the uploaded file tab active:
e2e/ui/app-restoration.test.ts#L409
4) [chromium] βΊ ui/app-restoration.test.ts:389:1 βΊ [P0] returning from an uploaded design file route to the project root keeps the uploaded file tab active
Error: expect(locator).toBeVisible() failed
Locator: locator('.ws-tab[role="tab"]').filter({ has: locator('.ws-tab-label').filter({ hasText: 'root-design-reference.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: 'root-design-reference.png' }) }).first()
407 | await expect((await uploadResponse).ok()).toBeTruthy();
408 | const fileTab = tabBySuffix(page, 'root-design-reference.png');
> 409 | await expect(fileTab).toBeVisible();
| ^
410 | const uploadedName = await fileTab.getAttribute('title');
411 | expect(uploadedName).toBeTruthy();
412 |
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:409:25
|
|
[chromium] βΊ ui/app-restoration.test.ts:348:1 βΊ [P0] @critical visiting an uploaded design file route restores its tab and file workspace surface:
e2e/ui/app-restoration.test.ts#L364
3) [chromium] βΊ ui/app-restoration.test.ts:348:1 βΊ [P0] @critical visiting an uploaded design file route restores its tab and file workspace surface
Error: expect(locator).toBeVisible() failed
Locator: locator('.ws-tab[role="tab"]').filter({ has: locator('.ws-tab-label').filter({ hasText: 'deep-linked-reference.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: 'deep-linked-reference.png' }) }).first()
362 | });
363 | const fileTab = tabBySuffix(page, 'deep-linked-reference.png');
> 364 | await expect(fileTab).toBeVisible();
| ^
365 | const uploadedName = await fileTab.getAttribute('title');
366 | expect(uploadedName).toBeTruthy();
367 |
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:364:25
|
|
[chromium] βΊ ui/app-restoration.test.ts:155:1 βΊ [P0] @critical workspace restores the last manually selected file tab after reload instead of jumping back to the generated artifact:
e2e/ui/app-restoration.test.ts#L3062
2) [chromium] βΊ ui/app-restoration.test.ts:155:1 βΊ [P0] @critical workspace restores the last manually selected file tab after reload instead of jumping back to the generated artifact
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(received).toBe(expected) // Object.is equality
Expected: true
Received: false
Call Log:
- Timeout 20000ms exceeded while waiting on the predicate
3060 | );
3061 | }, { timeout: T.medium })
> 3062 | .toBe(true);
| ^
3063 | }
3064 |
3065 | async function expectProjectFilesToIncludeSuffixes(
at expectPersistedArtifactMessage (/home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:3062:6)
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:200:9
|
|
[chromium] βΊ ui/app-restoration.test.ts:155:1 βΊ [P0] @critical workspace restores the last manually selected file tab after reload instead of jumping back to the generated artifact:
e2e/ui/app-restoration.test.ts#L3062
2) [chromium] βΊ ui/app-restoration.test.ts:155:1 βΊ [P0] @critical workspace restores the last manually selected file tab after reload instead of jumping back to the generated artifact
Error: expect(received).toBe(expected) // Object.is equality
Expected: true
Received: false
Call Log:
- Timeout 20000ms exceeded while waiting on the predicate
3060 | );
3061 | }, { timeout: T.medium })
> 3062 | .toBe(true);
| ^
3063 | }
3064 |
3065 | async function expectProjectFilesToIncludeSuffixes(
at expectPersistedArtifactMessage (/home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:3062:6)
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:200:9
|
|
[chromium] βΊ ui/app-restoration.test.ts:257:1 βΊ [P0] switching between projects restores each project workspace to its last active file tab:
e2e/ui/app-restoration.test.ts#L2485
1) [chromium] βΊ ui/app-restoration.test.ts:257:1 βΊ [P0] switching between projects restores each project workspace to its last active file tab
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: locator('[data-testid^="design-file-row-"][data-testid$="alpha-secondary.png"]').first()
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for locator('[data-testid^="design-file-row-"][data-testid$="alpha-secondary.png"]').first()
2483 | // the row by test id β image cards render no filename text to match on.
2484 | const row = rowBySuffix(page, fileName);
> 2485 | await expect(row).toBeVisible();
| ^
2486 | await row.getByRole('button').first().click();
2487 | await expect(tab).toHaveAttribute('aria-selected', 'true');
2488 | }
at openDesignFile (/home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:2485:21)
at ensureFileTabOpen (/home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:2607:3)
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:294:29
|
|
[chromium] βΊ ui/app-restoration.test.ts:257:1 βΊ [P0] switching between projects restores each project workspace to its last active file tab:
e2e/ui/app-restoration.test.ts#L2485
1) [chromium] βΊ ui/app-restoration.test.ts:257:1 βΊ [P0] switching between projects restores each project workspace to its last active file tab
Error: expect(locator).toBeVisible() failed
Locator: locator('[data-testid^="design-file-row-"][data-testid$="alpha-secondary.png"]').first()
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for locator('[data-testid^="design-file-row-"][data-testid$="alpha-secondary.png"]').first()
2483 | // the row by test id β image cards render no filename text to match on.
2484 | const row = rowBySuffix(page, fileName);
> 2485 | await expect(row).toBeVisible();
| ^
2486 | await row.getByRole('button').first().click();
2487 | await expect(tab).toHaveAttribute('aria-selected', 'true');
2488 | }
at openDesignFile (/home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:2485:21)
at ensureFileTabOpen (/home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:2607:3)
at /home/runner/work/open-design/open-design/e2e/ui/app-restoration.test.ts:294:29
|
|
[chromium] βΊ ui/app-manual-edit.test.ts:326:1 βΊ [P0] @critical preview toolbar keeps share:
e2e/ui/app-manual-edit.test.ts#L334
5) [chromium] βΊ ui/app-manual-edit.test.ts:326:1 βΊ [P0] @critical preview toolbar keeps share, download, comment, and zoom actions reachable
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toHaveCount(expected) failed
Locator: getByRole('tablist', { name: 'View mode' })
Expected: 0
Received: 1
Timeout: 10000ms
Call log:
- Expect "toHaveCount" with timeout 10000ms
- waiting for getByRole('tablist', { name: 'View mode' })
24 Γ locator resolved to 1 element
- unexpected value "1"
332 |
333 | await expect(page.getByTestId('artifact-preview-frame')).toBeVisible();
> 334 | await expect(page.getByRole('tablist', { name: 'View mode' })).toHaveCount(0);
| ^
335 |
336 | await page.getByRole('button', { name: /^Share$/ }).click();
337 | const shareMenu = page.locator('.share-menu-popover[role="menu"]');
at /home/runner/work/open-design/open-design/e2e/ui/app-manual-edit.test.ts:334:66
|
|
[chromium] βΊ ui/app-manual-edit.test.ts:326:1 βΊ [P0] @critical preview toolbar keeps share:
e2e/ui/app-manual-edit.test.ts#L334
5) [chromium] βΊ ui/app-manual-edit.test.ts:326:1 βΊ [P0] @critical preview toolbar keeps share, download, comment, and zoom actions reachable
Error: expect(locator).toHaveCount(expected) failed
Locator: getByRole('tablist', { name: 'View mode' })
Expected: 0
Received: 1
Timeout: 10000ms
Call log:
- Expect "toHaveCount" with timeout 10000ms
- waiting for getByRole('tablist', { name: 'View mode' })
23 Γ locator resolved to 1 element
- unexpected value "1"
332 |
333 | await expect(page.getByTestId('artifact-preview-frame')).toBeVisible();
> 334 | await expect(page.getByRole('tablist', { name: 'View mode' })).toHaveCount(0);
| ^
335 |
336 | await page.getByRole('button', { name: /^Share$/ }).click();
337 | const shareMenu = page.locator('.share-menu-popover[role="menu"]');
at /home/runner/work/open-design/open-design/e2e/ui/app-manual-edit.test.ts:334:66
|
|
[chromium] βΊ ui/app-manual-edit.test.ts:62:1 βΊ [P0] manual edit inspector previews and persists page and selected element styles:
e2e/ui/app-manual-edit.test.ts#L323
4) [chromium] βΊ ui/app-manual-edit.test.ts:62:1 βΊ [P0] manual edit inspector previews and persists page and selected element styles
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toContainText(expected) failed
Locator: locator('.manual-edit-modal')
Expected substring: "TYPOGRAPHY"
Received string: "Hero titleCONTENTTextOriginal HeroParametersText colorBackgroundOpacityβ+FontinheritSpace GroteskInterTimesArialRobotoHelveticaGeorgiamonospaceβΎFont sizeβ+Weight700100200300400500600700800900βΎLine heightβ+Letter spacingβ+Radiusβ+Border colorBorder widthβ+Border styleβSolidDashedDottedDoubleNoneβΎWidthβ+Heightβ+PaddingβΎTopβ+Rightβ+Bottomβ+Leftβ+MarginβΎTopβ+Rightβ+Bottomβ+Leftβ+DirectionβHorizontalHorizontal reverseVerticalVertical reverseβΎDistributionnormalβStartCenterEndSpace betweenSpace aroundSpace evenlyβΎGapβ+AlignstartβAlign leftAlign centerAlign rightβΎLayout controls are available for flex or grid containers.CancelSave"
Timeout: 10000ms
Call log:
- Expect "toContainText" with timeout 10000ms
- waiting for locator('.manual-edit-modal')
23 Γ locator resolved to <section class="manual-edit-modal cc-panel">β¦</section>
- unexpected value "Hero titleCONTENTTextOriginal HeroParametersText colorBackgroundOpacityβ+FontinheritSpace GroteskInterTimesArialRobotoHelveticaGeorgiamonospaceβΎFont sizeβ+Weight700100200300400500600700800900βΎLine heightβ+Letter spacingβ+Radiusβ+Border colorBorder widthβ+Border styleβSolidDashedDottedDoubleNoneβΎWidthβ+Heightβ+PaddingβΎTopβ+Rightβ+Bottomβ+Leftβ+MarginβΎTopβ+Rightβ+Bottomβ+Leftβ+DirectionβHorizontalHorizontal reverseVerticalVertical reverseβΎDistributionnormalβStartCenterEndSpace betweenSpace aroundSpace evenlyβΎGapβ+AlignstartβAlign leftAlign centerAlign rightβΎLayout controls are available for flex or grid containers.CancelSave"
321 | await expect(frame.locator(`${selector}[data-od-edit-selected="true"]`)).toHaveCount(1, { timeout: 2_000 });
322 | }).toPass({ timeout: 30_000 });
> 323 | await expect(page.locator('.manual-edit-modal')).toContainText(section);
| ^
324 | }
325 |
326 | test('[P0] @critical preview toolbar keeps share, download, comment, and zoom actions reachable', async ({ page }) => {
at selectPreviewElementThroughBridge (/home/runner/work/open-design/open-design/e2e/ui/app-manual-edit.test.ts:323:52)
at /home/runner/work/open-design/open-design/e2e/ui/app-manual-edit.test.ts:92:3
|
|
[chromium] βΊ ui/app-manual-edit.test.ts:62:1 βΊ [P0] manual edit inspector previews and persists page and selected element styles:
e2e/ui/app-manual-edit.test.ts#L323
4) [chromium] βΊ ui/app-manual-edit.test.ts:62:1 βΊ [P0] manual edit inspector previews and persists page and selected element styles
Error: expect(locator).toContainText(expected) failed
Locator: locator('.manual-edit-modal')
Expected substring: "TYPOGRAPHY"
Received string: "Hero titleCONTENTTextOriginal HeroParametersText colorBackgroundOpacityβ+FontinheritSpace GroteskInterTimesArialRobotoHelveticaGeorgiamonospaceβΎFont sizeβ+Weight700100200300400500600700800900βΎLine heightβ+Letter spacingβ+Radiusβ+Border colorBorder widthβ+Border styleβSolidDashedDottedDoubleNoneβΎWidthβ+Heightβ+PaddingβΎTopβ+Rightβ+Bottomβ+Leftβ+MarginβΎTopβ+Rightβ+Bottomβ+Leftβ+DirectionβHorizontalHorizontal reverseVerticalVertical reverseβΎDistributionnormalβStartCenterEndSpace betweenSpace aroundSpace evenlyβΎGapβ+AlignstartβAlign leftAlign centerAlign rightβΎLayout controls are available for flex or grid containers.CancelSave"
Timeout: 10000ms
Call log:
- Expect "toContainText" with timeout 10000ms
- waiting for locator('.manual-edit-modal')
23 Γ locator resolved to <section class="manual-edit-modal cc-panel">β¦</section>
- unexpected value "Hero titleCONTENTTextOriginal HeroParametersText colorBackgroundOpacityβ+FontinheritSpace GroteskInterTimesArialRobotoHelveticaGeorgiamonospaceβΎFont sizeβ+Weight700100200300400500600700800900βΎLine heightβ+Letter spacingβ+Radiusβ+Border colorBorder widthβ+Border styleβSolidDashedDottedDoubleNoneβΎWidthβ+Heightβ+PaddingβΎTopβ+Rightβ+Bottomβ+Leftβ+MarginβΎTopβ+Rightβ+Bottomβ+Leftβ+DirectionβHorizontalHorizontal reverseVerticalVertical reverseβΎDistributionnormalβStartCenterEndSpace betweenSpace aroundSpace evenlyβΎGapβ+AlignstartβAlign leftAlign centerAlign rightβΎLayout controls are available for flex or grid containers.CancelSave"
321 | await expect(frame.locator(`${selector}[data-od-edit-selected="true"]`)).toHaveCount(1, { timeout: 2_000 });
322 | }).toPass({ timeout: 30_000 });
> 323 | await expect(page.locator('.manual-edit-modal')).toContainText(section);
| ^
324 | }
325 |
326 | test('[P0] @critical preview toolbar keeps share, download, comment, and zoom actions reachable', async ({ page }) => {
at selectPreviewElementThroughBridge (/home/runner/work/open-design/open-design/e2e/ui/app-manual-edit.test.ts:323:52)
at /home/runner/work/open-design/open-design/e2e/ui/app-manual-edit.test.ts:92:3
|
|
[chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-tab-persistence: Open file tabs survive refresh with the correct active tab:
e2e/ui/app-design-files.test.ts#L909
3) [chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-tab-persistence: Open file tabs survive refresh with the correct active tab
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: getByRole('tab', { name: /first-tab\.png/i })
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for getByRole('tab', { name: /first-tab\.png/i })
907 | buffer: pngBytes,
908 | });
> 909 | await expect(page.getByRole('tab', { name: /first-tab\.png/i })).toBeVisible();
| ^
910 |
911 | await page.getByTestId('design-files-upload-input').setInputFiles({
912 | name: 'second-tab.png',
at runDesignFilesTabPersistenceFlow (/home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:909:68)
at /home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:100:7
|
|
[chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-tab-persistence: Open file tabs survive refresh with the correct active tab:
e2e/ui/app-design-files.test.ts#L909
3) [chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-tab-persistence: Open file tabs survive refresh with the correct active tab
Error: expect(locator).toBeVisible() failed
Locator: getByRole('tab', { name: /first-tab\.png/i })
Expected: visible
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 10000ms
- waiting for getByRole('tab', { name: /first-tab\.png/i })
907 | buffer: pngBytes,
908 | });
> 909 | await expect(page.getByRole('tab', { name: /first-tab\.png/i })).toBeVisible();
| ^
910 |
911 | await page.getByTestId('design-files-upload-input').setInputFiles({
912 | name: 'second-tab.png',
at runDesignFilesTabPersistenceFlow (/home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:909:68)
at /home/runner/work/open-design/open-design/e2e/ui/app-design-files.test.ts:100: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
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
|
|
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:335:1 βΊ [P0] @critical non-AMR model failures promote Open Design AMR and auto-retry after sign-in:
e2e/ui/amr-run-failure-recovery.test.ts#L437
5) [chromium] βΊ ui/amr-run-failure-recovery.test.ts:335:1 βΊ [P0] @critical non-AMR model failures promote Open Design AMR and auto-retry after sign-in
Error: expect(received).toBe(expected) // Object.is equality
Expected: 1
Received: 0
Call Log:
- Timeout 60000ms exceeded while waiting on the predicate
435 |
436 | await expect.poll(() => loginRequested, { timeout: T.medium }).toBe(true);
> 437 | await expect.poll(() => runRequests.bodies.filter((body) => body.agentId === 'amr').length, { timeout: T.long }).toBe(1);
| ^
438 | expect(runRequests.bodies.filter((body) => body.agentId === 'amr')[0]).toMatchObject({
439 | agentId: 'amr',
440 | currentPrompt: 'please recover this failed non-AMR model run',
at /home/runner/work/open-design/open-design/e2e/ui/amr-run-failure-recovery.test.ts:437:116
|
|
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:236:1 βΊ [P0] @critical AMR model catalog invalid-key failures authorize and auto-recover:
e2e/ui/amr-run-failure-recovery.test.ts#L332
4) [chromium] βΊ ui/amr-run-failure-recovery.test.ts:236:1 βΊ [P0] @critical AMR model catalog invalid-key failures authorize and auto-recover
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: getByText('AMR model catalog auth retry recovered.').first()
Expected: visible
Timeout: 60000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 60000ms
- waiting for getByText('AMR model catalog auth retry recovered.').first()
330 | await expect.poll(() => loginRequested, { timeout: T.medium }).toBe(true);
331 | await expect(settingsSurface(page)).toHaveCount(0);
> 332 | await expect(page.getByText('AMR model catalog auth retry recovered.').first()).toBeVisible({ timeout: T.long });
| ^
333 | });
334 |
335 | test('[P0] @critical non-AMR model failures promote Open Design AMR and auto-retry after sign-in', async ({ page }) => {
at /home/runner/work/open-design/open-design/e2e/ui/amr-run-failure-recovery.test.ts:332:83
|
|
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:236:1 βΊ [P0] @critical AMR model catalog invalid-key failures authorize and auto-recover:
e2e/ui/amr-run-failure-recovery.test.ts#L332
4) [chromium] βΊ ui/amr-run-failure-recovery.test.ts:236:1 βΊ [P0] @critical AMR model catalog invalid-key failures authorize and auto-recover
Error: expect(locator).toBeVisible() failed
Locator: getByText('AMR model catalog auth retry recovered.').first()
Expected: visible
Timeout: 60000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 60000ms
- waiting for getByText('AMR model catalog auth retry recovered.').first()
330 | await expect.poll(() => loginRequested, { timeout: T.medium }).toBe(true);
331 | await expect(settingsSurface(page)).toHaveCount(0);
> 332 | await expect(page.getByText('AMR model catalog auth retry recovered.').first()).toBeVisible({ timeout: T.long });
| ^
333 | });
334 |
335 | test('[P0] @critical non-AMR model failures promote Open Design AMR and auto-retry after sign-in', async ({ page }) => {
at /home/runner/work/open-design/open-design/e2e/ui/amr-run-failure-recovery.test.ts:332:83
|
|
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:179:1 βΊ [P0] @critical AMR auth failures offer inline Authorize & retry sign-in and auto-recover:
e2e/ui/amr-run-failure-recovery.test.ts#L225
3) [chromium] βΊ ui/amr-run-failure-recovery.test.ts:179:1 βΊ [P0] @critical AMR auth failures offer inline Authorize & retry sign-in and auto-recover
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: getByRole('button', { name: /Authorize.*retry|ζζεΉΆιθ―/i }).first()
Expected: visible
Timeout: 60000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 60000ms
- waiting for getByRole('button', { name: /Authorize.*retry|ζζεΉΆιθ―/i }).first()
223 |
224 | const authorizeAndRetry = page.getByRole('button', { name: /Authorize.*retry|ζζεΉΆιθ―/i }).first();
> 225 | await expect(authorizeAndRetry).toBeVisible({ timeout: T.long });
| ^
226 | await authorizeAndRetry.click();
227 |
228 | // New inline flow: clicking Authorize & retry starts vela login in place (it
at /home/runner/work/open-design/open-design/e2e/ui/amr-run-failure-recovery.test.ts:225:35
|
|
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:179:1 βΊ [P0] @critical AMR auth failures offer inline Authorize & retry sign-in and auto-recover:
e2e/ui/amr-run-failure-recovery.test.ts#L225
3) [chromium] βΊ ui/amr-run-failure-recovery.test.ts:179:1 βΊ [P0] @critical AMR auth failures offer inline Authorize & retry sign-in and auto-recover
Error: expect(locator).toBeVisible() failed
Locator: getByRole('button', { name: /Authorize.*retry|ζζεΉΆιθ―/i }).first()
Expected: visible
Timeout: 60000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 60000ms
- waiting for getByRole('button', { name: /Authorize.*retry|ζζεΉΆιθ―/i }).first()
223 |
224 | const authorizeAndRetry = page.getByRole('button', { name: /Authorize.*retry|ζζεΉΆιθ―/i }).first();
> 225 | await expect(authorizeAndRetry).toBeVisible({ timeout: T.long });
| ^
226 | await authorizeAndRetry.click();
227 |
228 | // New inline flow: clicking Authorize & retry starts vela login in place (it
at /home/runner/work/open-design/open-design/e2e/ui/amr-run-failure-recovery.test.ts:225:35
|
|
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:113:1 βΊ [P0] @critical AMR insufficient-balance failures surface Top up AMR and recover after manual Retry:
e2e/ui/amr-run-failure-recovery.test.ts#L153
2) [chromium] βΊ ui/amr-run-failure-recovery.test.ts:113:1 βΊ [P0] @critical AMR insufficient-balance failures surface Top up AMR and recover after manual Retry
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toBeVisible() failed
Locator: getByRole('button', { name: /Top up|ε
εΌ|ε²εΌ/i }).first()
Expected: visible
Timeout: 60000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 60000ms
- waiting for getByRole('button', { name: /Top up|ε
εΌ|ε²εΌ/i }).first()
151 | const topUp = page.getByRole('button', { name: /Top up|ε
εΌ|ε²εΌ/i }).first();
152 | const retry = page.getByRole('button', { name: /^Retry$|^ιθ―$|^ι試$/i }).first();
> 153 | await expect(topUp).toBeVisible({ timeout: T.long });
| ^
154 | await expect(retry).toBeVisible();
155 |
156 | await topUp.click();
at /home/runner/work/open-design/open-design/e2e/ui/amr-run-failure-recovery.test.ts:153:23
|
|
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:113:1 βΊ [P0] @critical AMR insufficient-balance failures surface Top up AMR and recover after manual Retry:
e2e/ui/amr-run-failure-recovery.test.ts#L153
2) [chromium] βΊ ui/amr-run-failure-recovery.test.ts:113:1 βΊ [P0] @critical AMR insufficient-balance failures surface Top up AMR and recover after manual Retry
Error: expect(locator).toBeVisible() failed
Locator: getByRole('button', { name: /Top up|ε
εΌ|ε²εΌ/i }).first()
Expected: visible
Timeout: 60000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 60000ms
- waiting for getByRole('button', { name: /Top up|ε
εΌ|ε²εΌ/i }).first()
151 | const topUp = page.getByRole('button', { name: /Top up|ε
εΌ|ε²εΌ/i }).first();
152 | const retry = page.getByRole('button', { name: /^Retry$|^ιθ―$|^ι試$/i }).first();
> 153 | await expect(topUp).toBeVisible({ timeout: T.long });
| ^
154 | await expect(retry).toBeVisible();
155 |
156 | await topUp.click();
at /home/runner/work/open-design/open-design/e2e/ui/amr-run-failure-recovery.test.ts:153:23
|
|
[chromium] βΊ ui/amr-logout-requires-relogin.test.ts:51:1 βΊ [P0] after local Sign out:
e2e/lib/playwright/amr.ts#L90
1) [chromium] βΊ ui/amr-logout-requires-relogin.test.ts:51:1 βΊ [P0] after local Sign out, AMR runs require re-login and Settings keeps AMR selected
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: frame._expect: Target page, context or browser has been closed
at ../lib/playwright/amr.ts:90
88 | export async function expectWorkspaceReady(page: Page) {
89 | await waitForLoadingToClear(page);
> 90 | await expect(page).toHaveURL(/\/projects\//);
| ^
91 | await expect(page.getByTestId('chat-composer')).toBeVisible();
92 | await expect(page.getByTestId('chat-composer-input')).toBeVisible();
93 | }
at expectWorkspaceReady (/home/runner/work/open-design/open-design/e2e/lib/playwright/amr.ts:90:22)
at gotoProject (/home/runner/work/open-design/open-design/e2e/lib/playwright/amr.ts:264:3)
at /home/runner/work/open-design/open-design/e2e/ui/amr-logout-requires-relogin.test.ts:145:3
|
|
[chromium] βΊ ui/amr-logout-requires-relogin.test.ts:51:1 βΊ [P0] after local Sign out:
e2e/ui/amr-logout-requires-relogin.test.ts#L0
1) [chromium] βΊ ui/amr-logout-requires-relogin.test.ts:51:1 βΊ [P0] after local Sign out, AMR runs require re-login and Settings keeps AMR selected
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Test timeout of 120000ms exceeded.
|
|
[chromium] βΊ ui/amr-logout-requires-relogin.test.ts:51:1 βΊ [P0] after local Sign out:
e2e/ui/amr-logout-requires-relogin.test.ts#L131
1) [chromium] βΊ ui/amr-logout-requires-relogin.test.ts:51:1 βΊ [P0] after local Sign out, AMR runs require re-login and Settings keeps AMR selected
Error: expect(locator).toHaveAttribute(expected) failed
Locator: locator('.modal-settings').first().getByTestId('settings-agent-card-amr').getByRole('button').first()
Expected: "true"
Timeout: 10000ms
Error: element(s) not found
Call log:
- Expect "toHaveAttribute" with timeout 10000ms
- waiting for locator('.modal-settings').first().getByTestId('settings-agent-card-amr').getByRole('button').first()
129 | });
130 | const reopenedSettings = await openSettingsDialog(page);
> 131 | await expect(amrAgentToggle(reopenedSettings)).toHaveAttribute('aria-pressed', 'true');
| ^
132 | await expect(reopenedSettings.getByRole('button', { name: /^Authorize$|^Sign in$/i })).toBeVisible();
133 | await page.keyboard.press('Escape');
134 | await expect(reopenedSettings).toHaveCount(0);
at /home/runner/work/open-design/open-design/e2e/ui/amr-logout-requires-relogin.test.ts:131:50
|
|
UI P0 (entry-settings)
The job has exceeded the maximum execution time of 45m0s
|
|
[chromium] βΊ ui/amr-onboarding.test.ts:312:1 βΊ [P0] @critical onboarding signed-in AMR path finishes setup with the AMR runtime:
e2e/ui/amr-onboarding.test.ts#L1167
6) [chromium] βΊ ui/amr-onboarding.test.ts:312:1 βΊ [P0] @critical onboarding signed-in AMR path finishes setup with the AMR runtime
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 })
1165 | await expect(page).not.toHaveURL(/\/onboarding$/);
1166 | await dismissPrivacyDialog(page);
> 1167 | await expect(page.getByRole('heading', { name: /What will you design with your agent today/i })).toBeVisible();
| ^
1168 | }
1169 |
1170 | async function expectFinalDesignSystemStep(page: Page) {
at expectOnboardingFinished (/home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:1167:100)
at /home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:327:3
|
|
[chromium] βΊ ui/entry-chrome-flows.test.ts:2317:1 βΊ [P0] @critical clearing the home working directory removes linked dirs from project creation:
e2e/ui/entry-chrome-flows.test.ts#L2347
5) [chromium] βΊ ui/entry-chrome-flows.test.ts:2317:1 βΊ [P0] @critical clearing the home working directory removes linked dirs from project creation
Retry #1 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Error: expect(locator).toContainText(expected) failed
Locator: getByTestId('working-dir-trigger')
Expected substring: "Select working directory"
Received string: "Working directory"
Timeout: 10000ms
Call log:
- Expect "toContainText" with timeout 10000ms
- waiting for getByTestId('working-dir-trigger')
20 Γ locator resolved to <button type="button" aria-expanded="false" data-testid="working-dir-trigger" class="WorkingDirPicker_trigger__9ua3U" title="Let the agent read this local folder (not imported into Design Files)">β¦</button>
- unexpected value "Working directory"
2345 | await page.getByTestId('working-dir-trigger').click();
2346 | await page.getByTestId('working-dir-clear').click();
> 2347 | await expect(page.getByTestId('working-dir-trigger')).toContainText('Select working directory');
| ^
2348 |
2349 | await page.getByTestId('home-hero-input').fill('Create a premium dashboard without local folder context.');
2350 |
at /home/runner/work/open-design/open-design/e2e/ui/entry-chrome-flows.test.ts:2347:57
|
|
[chromium] βΊ ui/entry-chrome-flows.test.ts:2317:1 βΊ [P0] @critical clearing the home working directory removes linked dirs from project creation:
e2e/ui/entry-chrome-flows.test.ts#L2347
5) [chromium] βΊ ui/entry-chrome-flows.test.ts:2317:1 βΊ [P0] @critical clearing the home working directory removes linked dirs from project creation
Error: expect(locator).toContainText(expected) failed
Locator: getByTestId('working-dir-trigger')
Expected substring: "Select working directory"
Received string: "Working directory"
Timeout: 10000ms
Call log:
- Expect "toContainText" with timeout 10000ms
- waiting for getByTestId('working-dir-trigger')
19 Γ locator resolved to <button type="button" aria-expanded="false" data-testid="working-dir-trigger" class="WorkingDirPicker_trigger__9ua3U" title="Let the agent read this local folder (not imported into Design Files)">β¦</button>
- unexpected value "Working directory"
2345 | await page.getByTestId('working-dir-trigger').click();
2346 | await page.getByTestId('working-dir-clear').click();
> 2347 | await expect(page.getByTestId('working-dir-trigger')).toContainText('Select working directory');
| ^
2348 |
2349 | await page.getByTestId('home-hero-input').fill('Create a premium dashboard without local folder context.');
2350 |
at /home/runner/work/open-design/open-design/e2e/ui/entry-chrome-flows.test.ts:2347:57
|
|
[chromium] βΊ ui/amr-onboarding.test.ts:142:1 βΊ [P0] onboarding Local CLI path completes setup with the selected agent model:
e2e/ui/amr-onboarding.test.ts#L1167
4) [chromium] βΊ ui/amr-onboarding.test.ts:142:1 βΊ [P0] onboarding Local CLI path completes setup with the selected agent model
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 })
1165 | await expect(page).not.toHaveURL(/\/onboarding$/);
1166 | await dismissPrivacyDialog(page);
> 1167 | await expect(page.getByRole('heading', { name: /What will you design with your agent today/i })).toBeVisible();
| ^
1168 | }
1169 |
1170 | async function expectFinalDesignSystemStep(page: Page) {
at expectOnboardingFinished (/home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:1167:100)
at /home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:164:3
|
|
[chromium] βΊ ui/amr-onboarding.test.ts:142:1 βΊ [P0] onboarding Local CLI path completes setup with the selected agent model:
e2e/ui/amr-onboarding.test.ts#L1167
4) [chromium] βΊ ui/amr-onboarding.test.ts:142:1 βΊ [P0] onboarding Local CLI path completes setup with the selected agent model
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 })
1165 | await expect(page).not.toHaveURL(/\/onboarding$/);
1166 | await dismissPrivacyDialog(page);
> 1167 | await expect(page.getByRole('heading', { name: /What will you design with your agent today/i })).toBeVisible();
| ^
1168 | }
1169 |
1170 | async function expectFinalDesignSystemStep(page: Page) {
at expectOnboardingFinished (/home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:1167:100)
at /home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:164:3
|
|
[chromium] βΊ ui/entry-chrome-flows.test.ts:2242:1 βΊ [P0] @critical home composer routes free-form prompts through the design router by default:
e2e/ui/entry-chrome-flows.test.ts#L2245
3) [chromium] βΊ ui/entry-chrome-flows.test.ts:2242: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')
17 Γ 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"
2243 | await gotoEntryHome(page);
2244 |
> 2245 | await expect(page.getByTestId('composer-mode-trigger')).toHaveAttribute('aria-label', 'Choose a mode');
| ^
2246 |
2247 | const input = page.getByTestId('home-hero-input');
2248 | const prompt =
at /home/runner/work/open-design/open-design/e2e/ui/entry-chrome-flows.test.ts:2245:59
|
|
[chromium] βΊ ui/entry-chrome-flows.test.ts:2242:1 βΊ [P0] @critical home composer routes free-form prompts through the design router by default:
e2e/ui/entry-chrome-flows.test.ts#L2245
3) [chromium] βΊ ui/entry-chrome-flows.test.ts:2242: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')
18 Γ 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"
2243 | await gotoEntryHome(page);
2244 |
> 2245 | await expect(page.getByTestId('composer-mode-trigger')).toHaveAttribute('aria-label', 'Choose a mode');
| ^
2246 |
2247 | const input = page.getByTestId('home-hero-input');
2248 | const prompt =
at /home/runner/work/open-design/open-design/e2e/ui/entry-chrome-flows.test.ts:2245:59
|
|
[chromium] βΊ ui/entry-chrome-flows.test.ts:203:1 βΊ [P0] @critical workspace selection remains isolated across two browser tabs:
e2e/ui/entry-chrome-flows.test.ts#L269
2) [chromium] βΊ ui/entry-chrome-flows.test.ts:203:1 βΊ [P0] @critical workspace selection remains isolated across two browser tabs
Error: expect(received).toEqual(expected) // deep equality
- Expected - 2
+ Received + 2
Object {
- "workspaceId": "ws-tab-team",
- "workspaceMemberId": "wm-tab-team",
+ "workspaceId": "ws-tab-personal",
+ "workspaceMemberId": "wm-tab-personal",
}
267 | expect(teamReads.length).toBeGreaterThanOrEqual(2);
268 | for (const request of teamReads) {
> 269 | expect(request).toEqual({
| ^
270 | workspaceId: TAB_TEAM_WORKSPACE.workspaceId,
271 | workspaceMemberId: TAB_TEAM_WORKSPACE.workspaceMemberId,
272 | });
at /home/runner/work/open-design/open-design/e2e/ui/entry-chrome-flows.test.ts:269:23
|
|
[chromium] βΊ ui/amr-onboarding.test.ts:43:1 βΊ [P0] @critical onboarding lets AMR Cloud sign in and complete setup after the login poll succeeds:
e2e/ui/amr-onboarding.test.ts#L1167
1) [chromium] βΊ ui/amr-onboarding.test.ts:43: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 })
1165 | await expect(page).not.toHaveURL(/\/onboarding$/);
1166 | await dismissPrivacyDialog(page);
> 1167 | await expect(page.getByRole('heading', { name: /What will you design with your agent today/i })).toBeVisible();
| ^
1168 | }
1169 |
1170 | async function expectFinalDesignSystemStep(page: Page) {
at expectOnboardingFinished (/home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:1167:100)
at /home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:70:3
|
|
[chromium] βΊ ui/amr-onboarding.test.ts:43:1 βΊ [P0] @critical onboarding lets AMR Cloud sign in and complete setup after the login poll succeeds:
e2e/ui/amr-onboarding.test.ts#L1167
1) [chromium] βΊ ui/amr-onboarding.test.ts:43: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 })
1165 | await expect(page).not.toHaveURL(/\/onboarding$/);
1166 | await dismissPrivacyDialog(page);
> 1167 | await expect(page.getByRole('heading', { name: /What will you design with your agent today/i })).toBeVisible();
| ^
1168 | }
1169 |
1170 | async function expectFinalDesignSystemStep(page: Page) {
at expectOnboardingFinished (/home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:1167:100)
at /home/runner/work/open-design/open-design/e2e/ui/amr-onboarding.test.ts:70: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-1nxugT/gh-stub.mjs api repos/nexu-io/open-design/compare/1111111111111111111111111111111111111111...2222222222222222222222222222222222222222
|
|
π Playwright Run Summary
3 skipped
17 passed (3.1m)
|
|
π Playwright Run Summary
1 failed
ui/visual-settings.test.ts:82:1 βΊ [P1] captures the settings Open Design account balance surface
17 passed (4.1m)
|
|
π Playwright Run Summary
8 failed
[chromium] βΊ ui/app-restoration.test.ts:155:1 βΊ [P0] @critical workspace restores the last manually selected file tab after reload instead of jumping back to the generated artifact
[chromium] βΊ ui/app-restoration.test.ts:257:1 βΊ [P0] switching between projects restores each project workspace to its last active file tab
[chromium] βΊ ui/app-restoration.test.ts:389:1 βΊ [P0] returning from an uploaded design file route to the project root keeps the uploaded file tab active
[chromium] βΊ ui/app-restoration.test.ts:822:1 βΊ [P0] returning from workspace surfaces keeps the older conversation reachable from history
[chromium] βΊ ui/app-restoration.test.ts:925:1 βΊ [P0] opening an uploaded file route keeps the older conversation present in history
[chromium] βΊ ui/app-restoration.test.ts:1066:1 βΊ [P0] returning from a file deep-link to the project root keeps the chosen file tab active
[chromium] βΊ ui/app-restoration.test.ts:1151:1 βΊ [P0] a later completed run updates the workspace to the newest artifact tab
[chromium] βΊ ui/app-restoration.test.ts:1219:1 βΊ [P0] @critical daemon error details persist between failed sends
1 flaky
[chromium] βΊ ui/app-restoration.test.ts:348:1 βΊ [P0] @critical visiting an uploaded design file route restores its tab and file workspace surface
20 passed (21.1m)
|
|
π Playwright Run Summary
8 failed
[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
[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
[chromium] βΊ ui/app-design-files.test.ts:84:3 βΊ [P0] @critical design-files-tab-persistence: Open file tabs survive refresh with the correct active tab
[chromium] βΊ ui/app-manual-edit.test.ts:62:1 βΊ [P0] manual edit inspector previews and persists page and selected element styles
[chromium] βΊ ui/app-manual-edit.test.ts:326:1 βΊ [P0] @critical preview toolbar keeps share, download, comment, and zoom actions reachable
[chromium] βΊ ui/app-manual-edit.test.ts:757:1 βΊ [P0] @critical edited HTML file restores selected tab and preview after reload
[chromium] βΊ ui/project-management-flows.test.ts:551:1 βΊ [P0] @critical project detail header design system switch carries into the next run request
[chromium] βΊ ui/project-management-flows.test.ts:1515:1 βΊ [P0] clearing the project design system removes designSystemId from the next run request
3 flaky
[chromium] βΊ ui/project-management-flows.test.ts:2347:1 βΊ [P0] project detail share menu copies the current share link for uploaded html artifacts
[chromium] βΊ ui/project-management-flows.test.ts:2401:1 βΊ [P0] project detail share menu opens the current share page for uploaded html artifacts
[chromium] βΊ ui/project-management-flows.test.ts:2453:1 βΊ [P0] @critical project detail share menu publish action opens the deploy flow for the selected provider
22 passed (34.1m)
|
|
π Playwright Run Summary
8 failed
[chromium] βΊ ui/amr-logout-requires-relogin.test.ts:51:1 βΊ [P0] after local Sign out, AMR runs require re-login and Settings keeps AMR selected
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:113:1 βΊ [P0] @critical AMR insufficient-balance failures surface Top up AMR and recover after manual Retry
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:179:1 βΊ [P0] @critical AMR auth failures offer inline Authorize & retry sign-in and auto-recover
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:236:1 βΊ [P0] @critical AMR model catalog invalid-key failures authorize and auto-recover
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:335:1 βΊ [P0] @critical non-AMR model failures promote Open Design AMR and auto-retry after sign-in
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:446:1 βΊ [P0] @critical Settings reopens AMR with the configured profile, account badge, and model catalog
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:605:1 βΊ [P0] @critical Settings preserves AMR account, recharge shortcut, and model catalog after switching runtimes
[chromium] βΊ ui/amr-run-failure-recovery.test.ts:685:1 βΊ [P0] after an AMR failure the user can switch to Codex and complete a fresh run
14 passed (38.0m)
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
handoff-report-visual-pr
|
437 Bytes |
sha256:95f6b3a34787be5c6f76d13ef1dc2f2d07a028118f03f3d77f8a764fdfe97437
|
|
|
ui-p0-ci-30677383133-entry-settings
|
114 MB |
sha256:49d8481772d3f678c7e1468bc16acb486e6c3bf448717c5b351d6fae6249ed2b
|
|
|
ui-p0-ci-30677383133-project-runtime
|
118 MB |
sha256:c186d24c682c0b42caeeb062e8e25b77175ddacbd30279a7fbd680f4f9ce77e4
|
|
|
ui-p0-ci-30677383133-project-workspace
|
90.4 MB |
sha256:d4f3a5417d6752c3cf854f7b95fc7bfd398510ca97ab9881630d64e16fca3870
|
|
|
ui-p0-ci-30677383133-workspace-restoration
|
98.8 MB |
sha256:551e52c19b5e1e29357a549983b1f1a11df5f5c771a6e262d7c6f339cd245c45
|
|
|
visual-pr-capture-6320-30677383133-entry-navigation
|
4.36 MB |
sha256:e30a2fb1d1560217d22d17ec2c4d8b8dc3a00de8b0983ef5ea323eaa32ea2fad
|
|
|
visual-pr-capture-6320-30677383133-settings-workspace
|
3.05 MB |
sha256:b92c62e65bf5c0097642169d0f8d6a76a1e191f782f478c1681f21f01101ff8f
|
|