Skip to content

fix(server-version): drop the stale store version floor from /v1/version #1439

fix(server-version): drop the stale store version floor from /v1/version

fix(server-version): drop the stale store version floor from /v1/version #1439

Triggered via pull request August 2, 2026 20:31
Status Cancelled
Total duration 30m 50s
Artifacts 1

tests.yml

on: pull_request
Release actor guard
0s
Release actor guard
UI E2E (WSREPL Lima matrix)
0s
UI E2E (WSREPL Lima matrix)
Mobile E2E (Maestro) (android) (opt-in)
0s
Mobile E2E (Maestro) (android) (opt-in)
Mobile E2E (Maestro) (ios) (opt-in)
0s
Mobile E2E (Maestro) (ios) (opt-in)
UI Tests (unit + integration)
24m 31s
UI Tests (unit + integration)
Shared Package Unit Tests
10m 58s
Shared Package Unit Tests
Server Tests (unit + integration)
20m 15s
Server Tests (unit + integration)
Server DB Contract (Postgres)
12m 32s
Server DB Contract (Postgres)
CLI Tests (unit + integration)
11m 52s
CLI Tests (unit + integration)
Stack Tests (unit + integration)
20m 16s
Stack Tests (unit + integration)
Release Contracts
12m 1s
Release Contracts
Installer Smoke (Linux)
11m 56s
Installer Smoke (Linux)
Installer Smoke (macOS)
7m 36s
Installer Smoke (macOS)
Installer Smoke (Windows)
12m 5s
Installer Smoke (Windows)
Binary Smoke (isolated cwd)
20m 46s
Binary Smoke (isolated cwd)
Release Validation — CLI Update Continuity (Linux)
0s
Release Validation — CLI Update Continuity (Linux)
Release Validation — Daemon Continuity (Linux)
0s
Release Validation — Daemon Continuity (Linux)
Release Validation — Session Continuity (Linux)
0s
Release Validation — Session Continuity (Linux)
Release Assets Docker (Linux)
0s
Release Assets Docker (Linux)
Self-Host E2E (Linux systemd)
0s
Self-Host E2E (Linux systemd)
Self-Host E2E (macOS launchd)
0s
Self-Host E2E (macOS launchd)
Self-Host E2E (Windows schtasks)
0s
Self-Host E2E (Windows schtasks)
Typecheck
10m 51s
Typecheck
CLI + Server (light/sqlite) E2E
14m 6s
CLI + Server (light/sqlite) E2E
Core E2E (fast, packages/tests, server-light, sqlite)
24m 21s
Core E2E (fast, packages/tests, server-light, sqlite)
Core E2E (slow, packages/tests, server-light, sqlite)
0s
Core E2E (slow, packages/tests, server-light, sqlite)
Stress (repeat/chaos)
0s
Stress (repeat/chaos)
Matrix: Self-Host + Daemon E2E
Matrix: ui-e2e
Providers (contract matrix)
Providers (contract matrix)
Fit to window
Zoom out
Zoom in

Annotations

38 errors and 17 warnings
Installer Smoke (macOS)
Process completed with exit code 1.
Typecheck
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
Stack Tests (unit + integration)
The job has exceeded the maximum execution time of 20m0s
Stack Tests (unit + integration)
The operation was canceled.
Server Tests (unit + integration)
The job has exceeded the maximum execution time of 20m0s
Server 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-02T20-47-58-405Z-core-66bfe494/session-agent-spawn-actions-d4c80775-d46f-4338-b502-536e9a3f40cc/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:c6880f454a5ab34b850cc5d59c031af1fd1be0cbdcc27890891bec950d86caa4", + "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_04eafe38-a29a-4744-a415-54e63c4ba6c3: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/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/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-02T20-45-52-643Z-core-b27fea26/direct-sessions-claude-takeover-persist/fake-claude.jsonl | exists=true | invocations=3 | matchesNow=false | last={"invocationId":"fake-claude-a45045b1-4166-4f97-94a4-b1ae9ffe0367","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=1785703513467 restore-decision mode=follow-bottom reason=restored offset=0 session=session:1 - missing firstVisibleAnchorTestId :: t=1785703513469 restore-decision mode=restore-anchor reason=pending session=session:1 - missing firstVisibleAnchorTestId :: t=1785703513469 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": 1785703481587, + "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 3/3
Canceling since a higher priority waiting request for CI — Tests-refs/pull/222/merge exists
UI E2E (Playwright) / shard 3/3
The operation was canceled.
UI E2E (Playwright) / shard 2/3
Canceling since a higher priority waiting request for CI — Tests-refs/pull/222/merge exists
UI E2E (Playwright) / shard 2/3
The operation was canceled.
CI — Tests
Canceling since a higher priority waiting request for CI — Tests-refs/pull/222/merge exists
UI E2E (Playwright) / shard 1/3
Canceling since a higher priority waiting request for CI — Tests-refs/pull/222/merge exists
UI E2E (Playwright) / shard 1/3
The operation was canceled.
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/
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/
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 (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/
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/
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/
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/
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/
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/
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/
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 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 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 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:f3189ecddc72c6dc251b0b33d16354e036202e4742e65ebb3b705e812564d6dc