fix(testkit): settle asynchronous daemon spawns #1436
tests.yml
on: push
Release actor guard
0s
UI E2E (WSREPL Lima matrix)
0s
Mobile E2E (Maestro) (android) (opt-in)
0s
Mobile E2E (Maestro) (ios) (opt-in)
0s
UI Tests (unit + integration)
27m 21s
Shared Package Unit Tests
10m 21s
Server Tests (unit + integration)
18m 33s
Server DB Contract (Postgres)
10m 37s
CLI Tests (unit + integration)
12m 17s
Stack Tests (unit + integration)
20m 14s
Release Contracts
12m 9s
Installer Smoke (Linux)
14m 31s
Installer Smoke (macOS)
10m 23s
Installer Smoke (Windows)
12m 30s
Binary Smoke (isolated cwd)
21m 16s
Release Validation — CLI Update Continuity (Linux)
0s
Release Validation — Daemon Continuity (Linux)
0s
Release Validation — Session Continuity (Linux)
0s
Release Assets Docker (Linux)
0s
Self-Host E2E (Linux systemd)
0s
Self-Host E2E (macOS launchd)
0s
Self-Host E2E (Windows schtasks)
0s
Typecheck
9m 56s
CLI + Server (light/sqlite) E2E
14m 40s
Core E2E (fast, packages/tests, server-light, sqlite)
26m 4s
Core E2E (slow, packages/tests, server-light, sqlite)
0s
Stress (repeat/chaos)
0s
Matrix: Self-Host + Daemon E2E
Matrix: ui-e2e
Providers (contract matrix)
0s
Annotations
46 errors and 17 warnings
|
Typecheck
Process completed with exit code 1.
|
|
Installer Smoke (macOS)
Process completed with exit code 1.
|
|
Release Contracts
Process completed with exit code 1.
|
|
CLI Tests (unit + integration)
Process completed with exit code 1.
|
|
Installer Smoke (Windows)
Process completed with exit code 1.
|
|
CLI + Server (light/sqlite) E2E
Process completed with exit code 1.
|
|
src/daemon/daemon.integration.test.ts > Daemon Integration Tests > should handle concurrent session operations:
apps/cli/src/daemon/daemon.integration.test.ts#L656
AssertionError: expected undefined to be defined
❯ src/daemon/daemon.integration.test.ts:656:29
❯ src/daemon/daemon.integration.test.ts:654:13
|
|
src/daemon/daemon.integration.test.ts > Daemon Integration Tests > should update session metadata when webhook is called:
apps/cli/src/testkit/async/waitFor.ts#L23
Error: Timed out waiting for session metadata webhook propagation after 30000ms
❯ waitForCondition src/testkit/async/waitFor.ts:23:11
❯ waitForSessionById src/daemon/daemon.integration.test.ts:297:3
❯ src/daemon/daemon.integration.test.ts:609:5
|
|
src/daemon/daemon.integration.test.ts > Daemon Integration Tests > should track both daemon-spawned and terminal sessions:
apps/cli/src/daemon/daemon.integration.test.ts#L585
AssertionError: expected undefined to be defined
❯ src/daemon/daemon.integration.test.ts:585:27
|
|
src/daemon/daemon.integration.test.ts > Daemon Integration Tests > should spawn & stop a session via HTTP (not testing RPC route, but similar enough):
apps/cli/src/daemon/daemon.integration.test.ts#L510
AssertionError: expected { success: true, …(4) } to have property "sessionId"
❯ src/daemon/daemon.integration.test.ts:510:22
|
|
sources/app/api/socket/sessionUpdateHandler.transcriptStreamSegment.integration.spec.ts > sessionUpdateHandler (transcript-stream-segment relay) > relays transcript-stream-segment-delta ticks to all session participants:
apps/server/sources/app/api/socket/sessionUpdateHandler.transcriptStreamSegment.integration.spec.ts#L188
AssertionError: expected "spy" to be called 2 times, but got 0 times
❯ sources/app/api/socket/sessionUpdateHandler.transcriptStreamSegment.integration.spec.ts:188:31
|
|
sources/app/api/socket/sessionUpdateHandler.transcriptStreamSegment.integration.spec.ts > sessionUpdateHandler (transcript-stream-segment relay) > relays transcript-stream-segment snapshots preserving the live-stream tick:
apps/server/sources/app/api/socket/sessionUpdateHandler.transcriptStreamSegment.integration.spec.ts#L152
AssertionError: expected "spy" to be called 2 times, but got 0 times
❯ sources/app/api/socket/sessionUpdateHandler.transcriptStreamSegment.integration.spec.ts:152:31
|
|
sources/app/api/socket/sessionUpdateHandler.sessionState.changes.integration.spec.ts > sessionUpdateHandler (session state AccountChange integration) > uses operation precedence when a read-cursor payload also includes a cursor:
apps/server/sources/app/api/socket/sessionUpdateHandler.sessionState.changes.integration.spec.ts#L525
AssertionError: expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0
❯ sources/app/api/socket/sessionUpdateHandler.sessionState.changes.integration.spec.ts:525:35
|
|
sources/app/api/socket/sessionUpdateHandler.sessionState.changes.integration.spec.ts > sessionUpdateHandler (session state AccountChange integration) > marks a session unread through the read-cursor operation payload:
apps/server/sources/app/api/socket/sessionUpdateHandler.sessionState.changes.integration.spec.ts#L417
AssertionError: expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Number of calls: 0
❯ sources/app/api/socket/sessionUpdateHandler.sessionState.changes.integration.spec.ts:417:35
|
|
sources/app/api/socket/sessionUpdateHandler.sessionState.changes.integration.spec.ts > sessionUpdateHandler (session state AccountChange integration) > sends a silent badge refresh push when a read-cursor change clears badge attention:
apps/server/sources/app/api/socket/sessionUpdateHandler.sessionState.changes.integration.spec.ts#L209
AssertionError: expected false to be true // Object.is equality
- Expected
+ Received
- true
+ false
❯ sources/app/api/socket/sessionUpdateHandler.sessionState.changes.integration.spec.ts:209:38
|
|
sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts > sessionUpdateHandler (transcript-stream-segment) > broadcasts transcript stream segment ephemerals to all session participants:
apps/server/sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts#L589
AssertionError: expected "spy" to be called with arguments: [ { sessionId: 's1' } ]
Number of calls: 0
❯ sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts:589:46
|
|
sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts > sessionUpdateHandler (execution-run-updated) > strips untrusted extra execution-run fields before rebroadcasting:
apps/server/sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts#L508
AssertionError: expected "spy" to be called 2 times, but got 0 times
❯ sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts:508:31
|
|
sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts > sessionUpdateHandler (execution-run-updated) > requires edit access before broadcasting execution-run-updated:
apps/server/sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts#L418
AssertionError: expected "spy" to be called with arguments: [ …(2) ]
Number of calls: 0
❯ sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts:418:36
|
|
sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts > sessionUpdateHandler (execution-run-updated) > does not broadcast execution-run-updated when the machine access key binding has been revoked:
apps/server/sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts#L240
AssertionError: expected "spy" to be called with arguments: [ { where: { …(1) }, …(1) } ]
Received:
1st spy call:
@@ -1,9 +1,19 @@
[
{
"select": {
- "machineId": true,
+ "machine": {
+ "select": {
+ "replacedByMachineId": true,
+ "revokedAt": true,
+ },
+ },
+ "session": {
+ "select": {
+ "accountId": true,
+ },
+ },
},
"where": {
"accountId_machineId_sessionId": {
"accountId": "u1",
"machineId": "m1",
Number of calls: 1
❯ sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts:240:37
|
|
sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts > sessionUpdateHandler (execution-run-updated) > broadcasts execution-run-updated ephemeral updates from a daemon session socket to all session participants:
apps/server/sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts#L162
AssertionError: expected "spy" to be called with arguments: [ 'u1', 's1' ]
Number of calls: 0
❯ sources/app/api/socket/sessionUpdateHandler.executionRuns.integration.spec.ts:162:36
|
|
Stack Tests (unit + integration)
The job has exceeded the maximum execution time of 20m0s
|
|
Stack Tests (unit + integration)
The operation was canceled.
|
|
Core E2E (fast, packages/tests, server-light, sqlite)
Process completed with exit code 1.
|
|
suites/core-e2e/sessionAgent.spawnActions.test.ts > core e2e: session-agent spawn actions > exposes session.spawn_new to session agents, honors Off settings, and forwards rich inherited spawn options:
packages/tests/suites/core-e2e/sessionAgent.spawnActions.test.ts#L249
AssertionError: expected last "spy" call to have been called with [ ObjectContaining{…} ]
- Expected
+ Received
@@ -1,7 +1,7 @@
[
- ObjectContaining {
+ {
"backendTarget": {
"agentId": "claude",
"kind": "builtInAgent",
},
"connectedServices": {
@@ -14,11 +14,10 @@
},
"v": 1,
},
"connectedServicesUpdatedAt": 1700000000003,
"directory": "/home/runner/work/happier/happier/.project/logs/e2e/2026-08-01T19-57-41-586Z-core-a9a32669/session-agent-spawn-actions-79f881c0-e9a8-4146-8de0-628d464877a7/workspace",
- "initialPrompt": "Use inherited parent context.",
"machineId": "machine-local",
"mcpSelection": {
"forceExcludeServerIds": [
"secret-env-server",
],
@@ -27,10 +26,15 @@
],
"managedServersEnabled": false,
"v": 1,
},
"modelId": "claude-opus-parent",
+ "modelUpdatedAt": 1700000000002,
+ "pendingFirstInput": {
+ "localId": "spawn-first:5e497727d586c11cfbaa8932ed832cb1cbf90b8ace93f2c6661240a474e61362",
+ "text": "Use inherited parent context.",
+ },
"permissionMode": "safe-yolo",
"permissionModeUpdatedAt": 1700000000001,
"profileId": "parent-profile",
"sessionConfigOptionOverrides": {
"overrides": {
@@ -44,7 +48,8 @@
},
},
"updatedAt": 1700000000100,
"v": 1,
},
+ "spawnNonce": "session.spawn_new:sess_parent_4394f47a-3d65-40db-a2fe-af69d69959ce:3",
},
]
❯ suites/core-e2e/sessionAgent.spawnActions.test.ts:249:34
|
|
suites/core-e2e/pendingQueue.socket.pendingChanged.test.ts > core e2e: pending queue v2 emits pending-changed socket updates > broadcasts pending-changed on materialize-next via socket RPC:
packages/tests/suites/core-e2e/pendingQueue.socket.pendingChanged.test.ts#L165
AssertionError: expected false to be true // Object.is equality
- Expected
+ Received
- true
+ false
❯ suites/core-e2e/pendingQueue.socket.pendingChanged.test.ts:165:23
|
|
suites/core-e2e/pendingQueue.materialize.socketRpc.test.ts > core e2e: pending queue v2 materialize via socket RPC > materializes queued items in order and clears pendingCount:
packages/tests/suites/core-e2e/pendingQueue.materialize.socketRpc.test.ts#L90
Error: pending-materialize-next failed: invalid-params
❯ suites/core-e2e/pendingQueue.materialize.socketRpc.test.ts:90:17
|
|
suites/core-e2e/pendingQueue.materialize.idempotency.test.ts > core e2e: pending queue v2 materialize idempotency > de-dupes when transcript already contains pending localId (drains pending without duplicating message):
packages/tests/suites/core-e2e/pendingQueue.materialize.idempotency.test.ts#L74
AssertionError: expected 400 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 400
❯ suites/core-e2e/pendingQueue.materialize.idempotency.test.ts:74:30
|
|
suites/core-e2e/executionRuns.review.triage.feat.execution.runs.e2e.test.ts > core e2e: execution runs (review) supports triage updates > emits review_findings.v2 meta and allows review.triage action overlay:
packages/tests/src/testkit/timing.ts#L48
Error: Timed out waiting for condition
❯ waitFor src/testkit/timing.ts:48:9
❯ waitForFakeClaudeObservedPrompt suites/core-e2e/executionRuns.review.triage.feat.execution.runs.e2e.test.ts:42:3
❯ suites/core-e2e/executionRuns.review.triage.feat.execution.runs.e2e.test.ts:269:33
|
|
suites/core-e2e/encryption.plaintextStorage.pendingQueueV2.materialize.roundtrip.feat.encryption.plaintextStorage.feat.sharing.pendingQueueV2.e2e.test.ts > core e2e: plaintext pending queue v2 materialize-next > enqueues and materializes plaintext pending items into plaintext transcript messages:
packages/tests/suites/core-e2e/encryption.plaintextStorage.pendingQueueV2.materialize.roundtrip.feat.encryption.plaintextStorage.feat.sharing.pendingQueueV2.e2e.test.ts#L99
AssertionError: expected 400 to be 200 // Object.is equality
- Expected
+ Received
- 200
+ 400
❯ suites/core-e2e/encryption.plaintextStorage.pendingQueueV2.materialize.roundtrip.feat.encryption.plaintextStorage.feat.sharing.pendingQueueV2.e2e.test.ts:99:32
|
|
suites/core-e2e/directSessions.claude.browseTail.feat.sessions.direct.e2e.test.ts > core e2e: direct Claude sessions browse/link/tail > converts a linked direct Claude session to persisted mode and resumes it through the persisted runner:
packages/tests/src/testkit/fakeClaude.ts#L147
Error: Timed out waiting for fake Claude invocation | logPath=/home/runner/work/happier/happier/.project/logs/e2e/2026-08-01T19-55-19-873Z-core-68f22c59/direct-sessions-claude-takeover-persist/fake-claude.jsonl | exists=true | invocations=3 | matchesNow=false | last={"invocationId":"fake-claude-7e681463-72f1-4365-9a28-3dcbd87ab5dd","mode":"local","argvHead":["--output-format","stream-json","--verbose","--max-turns","1","--print","hello"],"argvHasSettings":false}
❯ waitForFakeClaudeInvocation src/testkit/fakeClaude.ts:147:9
❯ suites/core-e2e/directSessions.claude.browseTail.feat.sessions.direct.e2e.test.ts:443:35
|
|
sources/components/sessions/transcript/ChatList.flashListV2.test.tsx > ChatList (FlashList v2) > keeps the original web prepend anchor through non-trusted restore scroll events:
apps/ui/sources/components/sessions/transcript/ChatList.flashListV2.test.tsx#L7865
AssertionError: expected "spy" to be called 1 times, but got 0 times
❯ __vi_import_1__.withRenderedFlashListChatListWebScroller.initialFill sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7865:58
❯ withFlashListChatListWebScrollerDom sources/dev/testkit/harness/chatListHarness.ts:922:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7847:13
❯ withWebFlashListFakeTimers sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:239:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7796:9
|
|
sources/components/sessions/transcript/ChatList.flashListV2.test.tsx > ChatList (FlashList v2) > keeps retrying web prepend index recovery until the original anchor remounts:
apps/ui/sources/components/sessions/transcript/ChatList.flashListV2.test.tsx#L7770
AssertionError: expected "spy" to be called 2 times, but got 0 times
❯ __vi_import_1__.withRenderedFlashListChatListWebScroller.initialFill sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7770:58
❯ withFlashListChatListWebScrollerDom sources/dev/testkit/harness/chatListHarness.ts:922:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7752:13
❯ withWebFlashListFakeTimers sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:239:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7705:9
|
|
sources/components/sessions/transcript/ChatList.flashListV2.test.tsx > ChatList (FlashList v2) > recovers the captured web prepend item when scrollHeight growth overshoots the original viewport anchor:
apps/ui/sources/components/sessions/transcript/ChatList.flashListV2.test.tsx#L7668
AssertionError: expected "spy" to be called with arguments: [ +0 ]
Number of calls: 0
❯ __vi_import_1__.withRenderedFlashListChatListWebScroller.initialFill sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7668:54
❯ withFlashListChatListWebScrollerDom sources/dev/testkit/harness/chatListHarness.ts:922:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7650:9
|
|
sources/components/sessions/transcript/ChatList.flashListV2.test.tsx > ChatList (FlashList v2) > materializes the exact keyed web prepend row after grow-collapse commits without applying gross height growth:
apps/ui/sources/components/sessions/transcript/ChatList.flashListV2.test.tsx#L7547
AssertionError: expected "spy" to be called with arguments: [ { index: +0, animated: false } ]
Received:
1st spy call:
[
{
"animated": false,
"index": 0,
+ "viewOffset": 40,
+ "viewPosition": 0,
},
]
Number of calls: 1
❯ __vi_import_1__.withRenderedFlashListChatListWebScroller.initialFill sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7547:62
❯ withFlashListChatListWebScrollerDom sources/dev/testkit/harness/chatListHarness.ts:922:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7527:13
❯ withWebFlashListFakeTimers sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:239:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:7488:9
|
|
sources/components/sessions/transcript/ChatList.flashListV2.test.tsx > ChatList (FlashList v2) > preserves the web viewport when older messages prepend above the current scroll position:
apps/ui/sources/dev/testkit/transcript/viewportTelemetryAssertions.ts#L174
Error: WREG telemetry diagnostics missing required web pagination/restore fields:
- missing firstVisibleAnchorTestId :: t=1785614213033 restore-decision mode=follow-bottom reason=restored offset=0 session=session:1
- missing firstVisibleAnchorTestId :: t=1785614213036 restore-decision mode=restore-anchor reason=pending session=session:1
- missing firstVisibleAnchorTestId :: t=1785614213036 restore-decision mode=restore-distance reason=restored session=session:1
❯ Module.assertWebWregDiagnostics sources/dev/testkit/transcript/viewportTelemetryAssertions.ts:174:11
❯ __vi_import_1__.withFlashListChatListWebScrollerDom.document.getElementById sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:6653:17
❯ Module.withFlashListChatListWebScrollerDom sources/dev/testkit/harness/chatListHarness.ts:922:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:6611:9
|
|
sources/components/sessions/transcript/ChatList.flashListV2.test.tsx > ChatList (FlashList v2) > shows the older-load spinner after the spinner delay while a user-triggered older load is in flight:
apps/ui/sources/components/sessions/transcript/ChatList.flashListV2.test.tsx#L6248
AssertionError: expected 2 to be +0 // Object.is equality
- Expected
+ Received
- 0
+ 2
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:6248:59
❯ withWebFlashListFakeTimers sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:239:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:6209:9
|
|
sources/components/sessions/transcript/ChatList.flashListV2.test.tsx > ChatList (FlashList v2) > keeps older-load progress out of scrollable header geometry during prepend loading:
apps/ui/sources/components/sessions/transcript/ChatList.flashListV2.test.tsx#L6202
AssertionError: expected 2 to be +0 // Object.is equality
- Expected
+ Received
- 0
+ 2
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:6202:59
❯ withWebFlashListFakeTimers sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:239:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:6158:9
|
|
sources/components/sessions/transcript/ChatList.flashListV2.test.tsx > ChatList (FlashList v2) > shows the older-load spinner when proactive prefetch is slow:
apps/ui/sources/components/sessions/transcript/ChatList.flashListV2.test.tsx#L6153
AssertionError: expected 2 to be +0 // Object.is equality
- Expected
+ Received
- 0
+ 2
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:6153:59
❯ withWebFlashListFakeTimers sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:239:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:6109:9
|
|
sources/components/sessions/transcript/ChatList.flashListV2.test.tsx > ChatList (FlashList v2) > keeps web first-visible diagnostics when viewport telemetry is enabled:
apps/ui/sources/components/sessions/transcript/ChatList.flashListV2.test.tsx#L5505
AssertionError: expected "spy" to be called with arguments: [ ObjectContaining{…} ]
Received:
1st spy call:
[
- ObjectContaining {
- "firstVisibleAnchorTestId": "none",
+ {
+ "anchorCorrectionAttempt": undefined,
+ "anchorCorrectionTargetOffsetY": undefined,
+ "anchorDeltaPx": undefined,
+ "anchorIndex": undefined,
+ "anchorItemOffsetPx": undefined,
+ "anchorObservedItemOffsetPx": undefined,
+ "anchorRestoreViewOffset": undefined,
+ "coldCount": 1,
+ "contentHeight": 1200,
+ "distanceFromBottom": 0,
+ "domClientHeight": 600,
+ "domScrollHeight": 1200,
+ "domScrollTop": 600,
+ "flashListContentHeight": 1200,
+ "flashListLayoutHeight": 600,
+ "hotCount": 0,
+ "layoutHeight": 600,
+ "listImplementation": "flash_v2",
+ "mode": "follow-bottom",
+ "offsetY": 600,
+ "paginationPhase": "idle",
+ "paginationSuspendedReasons": [],
+ "pendingWebPrependAnchorKind": "none",
+ "platform": "web",
+ "programmaticWebWrite": false,
+ "reason": "observed",
+ "scrollable": false,
+ "sessionId": "session:1",
+ "timestampMs": 1785614178763,
+ "trigger": "scroll",
"type": "scroll-observed",
},
]
Number of calls: 1
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:5505:31
|
|
sources/components/sessions/transcript/ChatList.flashListV2.test.tsx > ChatList (FlashList v2) > restores a native unpinned session after many intervening session opens without leaking another viewport:
apps/ui/sources/components/sessions/transcript/ChatList.flashListV2.test.tsx#L3296
AssertionError: expected last "spy" call to have been called with [ { offset: 500, animated: false } ]
- Expected:
[
{
"animated": false,
"offset": 500,
},
]
+ Received:
undefined
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:3296:36
❯ withWebFlashListFakeTimers sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:239:16
❯ sources/components/sessions/transcript/ChatList.flashListV2.test.tsx:3226:9
|
|
UI E2E (Playwright) / shard 2/3
The job has exceeded the maximum execution time of 45m0s
|
|
UI E2E (Playwright) / shard 2/3
The operation was canceled.
|
|
UI E2E (Playwright) / shard 3/3
The job has exceeded the maximum execution time of 45m0s
|
|
UI E2E (Playwright) / shard 3/3
The operation was canceled.
|
|
UI E2E (Playwright) / shard 1/3
The job has exceeded the maximum execution time of 45m0s
|
|
UI E2E (Playwright) / shard 1/3
The operation was canceled.
|
|
Typecheck
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/
|
|
Shared Package Unit Tests
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/
|
|
Installer Smoke (macOS)
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/
|
|
Server DB Contract (Postgres)
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/
|
|
Release Contracts
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/
|
|
CLI Tests (unit + integration)
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/
|
|
Installer Smoke (Windows)
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/
|
|
Installer Smoke (Linux)
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/
|
|
CLI + Server (light/sqlite) E2E
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/
|
|
Server Tests (unit + integration)
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/
|
|
Stack Tests (unit + integration)
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/
|
|
Binary Smoke (isolated cwd)
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/
|
|
Core E2E (fast, packages/tests, server-light, sqlite)
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/
|
|
UI Tests (unit + integration)
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/
|
|
UI E2E (Playwright) / shard 2/3
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, dorny/paths-filter@v3. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
UI E2E (Playwright) / shard 3/3
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, dorny/paths-filter@v3. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
UI E2E (Playwright) / shard 1/3
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, dorny/paths-filter@v3. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
core-e2e-artifacts-fast-sqlite
|
212 MB |
sha256:506ed173f4a9f22c29078738194bf27be983343897985280650dfdf67e334209
|
|