fix: resolve frontend build errors, remove corrupted lockfile and fix… #855
ci.yml
on: push
Backend Build & Test
1m 36s
Frontend Build & Test
3m 34s
Frontend E2E (Playwright)
9m 36s
Contracts Build & Test
1m 54s
Annotations
14 errors, 4 warnings, and 1 notice
|
Backend Build & Test
Process completed with exit code 1.
|
|
Backend Build & Test
Process completed with exit code 2.
|
|
Frontend Build & Test
Process completed with exit code 1.
|
|
Frontend Build & Test
Process completed with exit code 1.
|
|
[chromium] › e2e/tests/auth.spec.ts:98:7 › wallet authentication journey › recovers gracefully:
frontend/e2e/tests/auth.spec.ts#L0
4) [chromium] › e2e/tests/auth.spec.ts:98:7 › wallet authentication journey › recovers gracefully, without unlocking the app, when a wallet connection fails
Test timeout of 60000ms exceeded.
|
|
[chromium] › e2e/tests/auth.spec.ts:126:7 › protected-route access › denies a role-gated route to an authenticated user without the required role:
frontend/e2e/tests/auth.spec.ts#L131
3) [chromium] › e2e/tests/auth.spec.ts:126:7 › protected-route access › denies a role-gated route to an authenticated user without the required role
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText(/access denied/i)
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByText(/access denied/i)
129 | await loginAs(page, '/simulator', user);
130 |
> 131 | await expect(page.getByText(/access denied/i)).toBeVisible();
| ^
132 | await expect(page.getByRole('heading', { name: /Network Simulator/i })).not.toBeVisible();
133 | });
134 | });
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:131:52
|
|
[chromium] › e2e/tests/auth.spec.ts:126:7 › protected-route access › denies a role-gated route to an authenticated user without the required role:
frontend/e2e/tests/auth.spec.ts#L131
3) [chromium] › e2e/tests/auth.spec.ts:126:7 › protected-route access › denies a role-gated route to an authenticated user without the required role
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByText(/access denied/i)
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByText(/access denied/i)
129 | await loginAs(page, '/simulator', user);
130 |
> 131 | await expect(page.getByText(/access denied/i)).toBeVisible();
| ^
132 | await expect(page.getByRole('heading', { name: /Network Simulator/i })).not.toBeVisible();
133 | });
134 | });
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:131:52
|
|
[chromium] › e2e/tests/auth.spec.ts:126:7 › protected-route access › denies a role-gated route to an authenticated user without the required role:
frontend/e2e/tests/auth.spec.ts#L131
3) [chromium] › e2e/tests/auth.spec.ts:126:7 › protected-route access › denies a role-gated route to an authenticated user without the required role
Error: expect(locator).toBeVisible() failed
Locator: getByText(/access denied/i)
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByText(/access denied/i)
129 | await loginAs(page, '/simulator', user);
130 |
> 131 | await expect(page.getByText(/access denied/i)).toBeVisible();
| ^
132 | await expect(page.getByRole('heading', { name: /Network Simulator/i })).not.toBeVisible();
133 | });
134 | });
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:131:52
|
|
[chromium] › e2e/tests/auth.spec.ts:116:7 › protected-route access › grants access to a role-gated route for an authenticated:
frontend/e2e/tests/auth.spec.ts#L121
2) [chromium] › e2e/tests/auth.spec.ts:116:7 › protected-route access › grants access to a role-gated route for an authenticated, authorized user
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /Network Simulator/i })
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('heading', { name: /Network Simulator/i })
119 | await loginAs(page, '/simulator', user);
120 |
> 121 | await expect(page.getByRole('heading', { name: /Network Simulator/i })).toBeVisible();
| ^
122 | await expect(page.getByText(/access denied/i)).not.toBeVisible();
123 | await expect(page.getByLabel(/sign out/i)).toBeVisible();
124 | });
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:121:77
|
|
[chromium] › e2e/tests/auth.spec.ts:116:7 › protected-route access › grants access to a role-gated route for an authenticated:
frontend/e2e/tests/auth.spec.ts#L121
2) [chromium] › e2e/tests/auth.spec.ts:116:7 › protected-route access › grants access to a role-gated route for an authenticated, authorized user
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /Network Simulator/i })
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('heading', { name: /Network Simulator/i })
119 | await loginAs(page, '/simulator', user);
120 |
> 121 | await expect(page.getByRole('heading', { name: /Network Simulator/i })).toBeVisible();
| ^
122 | await expect(page.getByText(/access denied/i)).not.toBeVisible();
123 | await expect(page.getByLabel(/sign out/i)).toBeVisible();
124 | });
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:121:77
|
|
[chromium] › e2e/tests/auth.spec.ts:116:7 › protected-route access › grants access to a role-gated route for an authenticated:
frontend/e2e/tests/auth.spec.ts#L121
2) [chromium] › e2e/tests/auth.spec.ts:116:7 › protected-route access › grants access to a role-gated route for an authenticated, authorized user
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /Network Simulator/i })
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('heading', { name: /Network Simulator/i })
119 | await loginAs(page, '/simulator', user);
120 |
> 121 | await expect(page.getByRole('heading', { name: /Network Simulator/i })).toBeVisible();
| ^
122 | await expect(page.getByText(/access denied/i)).not.toBeVisible();
123 | await expect(page.getByLabel(/sign out/i)).toBeVisible();
124 | });
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:121:77
|
|
[chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate:
frontend/e2e/tests/auth.spec.ts#L79
1) [chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate
Retry #2 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /Authentication Required/i })
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('heading', { name: /Authentication Required/i })
77 |
78 | // Every route but "/" is blocked behind WalletGate until a wallet connects.
> 79 | await expect(page.getByRole('heading', { name: /Authentication Required/i })).toBeVisible();
| ^
80 |
81 | await page.getByRole('button', { name: /Dev Mock Wallet/ }).click();
82 |
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:79:83
|
|
[chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate:
frontend/e2e/tests/auth.spec.ts#L79
1) [chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate
Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /Authentication Required/i })
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('heading', { name: /Authentication Required/i })
77 |
78 | // Every route but "/" is blocked behind WalletGate until a wallet connects.
> 79 | await expect(page.getByRole('heading', { name: /Authentication Required/i })).toBeVisible();
| ^
80 |
81 | await page.getByRole('button', { name: /Dev Mock Wallet/ }).click();
82 |
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:79:83
|
|
[chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate:
frontend/e2e/tests/auth.spec.ts#L79
1) [chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate
Error: expect(locator).toBeVisible() failed
Locator: getByRole('heading', { name: /Authentication Required/i })
Expected: visible
Timeout: 5000ms
Error: element(s) not found
Call log:
- Expect "toBeVisible" with timeout 5000ms
- waiting for getByRole('heading', { name: /Authentication Required/i })
77 |
78 | // Every route but "/" is blocked behind WalletGate until a wallet connects.
> 79 | await expect(page.getByRole('heading', { name: /Authentication Required/i })).toBeVisible();
| ^
80 |
81 | await page.getByRole('button', { name: /Dev Mock Wallet/ }).click();
82 |
at /home/runner/work/Web3-Student-Lab/Web3-Student-Lab/frontend/e2e/tests/auth.spec.ts:79:83
|
|
Backend Build & Test
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-node@v4, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Contracts Build & Test
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Frontend Build & Test
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-node@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Frontend E2E (Playwright)
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-node@v4, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
🎭 Playwright Run Summary
17 failed
[chromium] › e2e/tests/auth.spec.ts:75:7 › wallet authentication journey › connecting the dev mock wallet unlocks the app behind WalletGate
[chromium] › e2e/tests/auth.spec.ts:98:7 › wallet authentication journey › recovers gracefully, without unlocking the app, when a wallet connection fails
[chromium] › e2e/tests/auth.spec.ts:116:7 › protected-route access › grants access to a role-gated route for an authenticated, authorized user
[chromium] › e2e/tests/auth.spec.ts:126:7 › protected-route access › denies a role-gated route to an authenticated user without the required role
[chromium] › e2e/tests/auth.spec.ts:137:7 › session recovery and logout › recovers safely when the session has expired: clears storage and returns to login
[chromium] › e2e/tests/auth.spec.ts:155:7 › session recovery and logout › logs out from an authenticated session and clears local state
[chromium] › e2e/tests/navigation.spec.ts:4:7 › critical learning journeys › opens the simulator and playground with mocked realtime transport
[chromium] › e2e/tests/offline.spec.ts:13:7 › offline experience › shows an accessible offline banner when connectivity drops, and clears it when restored
[chromium] › e2e/tests/offline.spec.ts:38:7 › offline experience › does not repeat the offline notice while the connection stays down
[chromium] › e2e/tests/offline.spec.ts:60:7 › offline experience › the offline recovery page stays reachable with no wallet connected, and reflects live connectivity
[chromium] › e2e/tests/responsive.spec.ts:5:9 › mobile-first responsive layout › home page › renders without horizontal overflow on any viewport
[chromium] › e2e/tests/responsive.spec.ts:76:9 › mobile-first responsive layout › wallet authentication prompt › connect wallet options render without overflow
[chromium] › e2e/tests/responsive.spec.ts:112:9 › mobile-first responsive layout › learning dashboard with wallet › renders curriculum dashboard without overflow
[chromium] › e2e/tests/responsive.spec.ts:159:9 › mobile-first responsive layout › login page wallet connection › wallet connect card renders without overflow when connected
[chromium] › e2e/tests/wallet.spec.ts:4:7 › wallet onboarding › installs mocked Stellar and Ethereum wallet providers
[chromium] › e2e/tests/wallet.spec.ts:28:7 › wallet onboarding › restores wallet state into the transaction state chart
[chromium] › e2e/tests/wallet.spec.ts:49:7 › wallet onboarding › keeps unavailable Freighter detection controlled
6 skipped
3 passed (8.0m)
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
playwright-report
|
18.1 MB |
sha256:8380f8596c1434d51e99d06965a3fb93e31cabdbeced907abdea6d5e0810e1bb
|
|
|
playwright-test-results
|
24.8 MB |
sha256:638e0b2e1de1ad54ebde04f64ce34721eaefaf0fc841ed48d554a151c8649c97
|
|
|
sbom-backend
|
163 KB |
sha256:b0d9914b35d34b183af51c799ebcf493546ccfaa5ddf788a7c20edfd02bda7fe
|
|