Skip to content

fix(workspace): preserve scoped projects after main sync #17041

fix(workspace): preserve scoped projects after main sync

fix(workspace): preserve scoped projects after main sync #17041

Triggered via pull request August 1, 2026 01:12
Status Failure
Total duration 46m 53s
Artifacts 7

ci.yml

on: pull_request
Resolve runner profiles
12s
Resolve runner profiles
Detect validation scopes
20s
Detect validation scopes
Static gate
17s
Static gate
Matrix: playwright_critical
Matrix: playwright_visual
Matrix: ui_p0
Preflight
3m 37s
Preflight
Workspace unit tests
1m 53s
Workspace unit tests
Windows tools-pack payload tests
2m 10s
Windows tools-pack payload tests
Web workspace tests
8m 40s
Web workspace tests
E2E Vitest
4m 38s
E2E Vitest
Validate workspace
4s
Validate workspace
Runtime summary
3s
Runtime summary
Fit to window
Zoom out
Zoom in

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