Skip to content

chore: upstream reconcile through reference 99eaa993b #1393

chore: upstream reconcile through reference 99eaa993b

chore: upstream reconcile through reference 99eaa993b #1393

Triggered via pull request September 19, 2026 19:29
Status Failure
Total duration 3m 37s
Artifacts –

ci.yml

on: pull_request
Matrix: test
Fit to window
Zoom out
Zoom in

Annotations

47 errors, 10 warnings, and 11 notices
lint
Process completed with exit code 1.
typecheck
Process completed with exit code 2.
typecheck: packages/oauth/src/identity.ts#L108
Property 'deviceId' does not exist on type 'PythinkerIdentityOptions'.
build
Process completed with exit code 1.
build
Property 'deviceId' does not exist on type 'PythinkerIdentityOptions'.
test (4)
Process completed with exit code 1.
[agent-core-v2] test/agent/task/taskService.test.ts > AgentTaskService > stops appending persisted output once the output limit trips for a detached process task: packages/agent-core-v2/src/agent/task/persist.ts#L152
TypeError: this.bytes.size is not a function ❯ AgentTaskPersistence.readTaskOutputSnapshot src/agent/task/persist.ts:152:44 ❯ AgentTaskService.getOutputSnapshot src/agent/task/taskService.ts:560:41 ❯ test/agent/task/taskService.test.ts:1263:5
[agent-core-v2] test/agent/task/taskService.test.ts > AgentTaskService > enqueues a terminal notification for a finished detached task, but not when suppression arms mid-build: packages/agent-core-v2/test/agent/task/taskService.test.ts#L315
AssertionError: expected true to be false // Object.is equality - Expected + Received - false + true ❯ test/agent/task/taskService.test.ts:315:48
[agent-core-v2] test/agent/fullCompaction/fullCompaction.test.ts > FullCompaction > blocks the turn until auto compaction finishes: packages/agent-core-v2/test/agent/fullCompaction/fullCompaction.test.ts#L1951
AssertionError: expected [ …(3) ] to deep equally contain { event: 'compaction_finished', …(1) } - Expected: { "event": "compaction_finished", "properties": ObjectContaining { "compacted_count": 7, "retry_count": 0, "source": "auto", "tokens_after": 6159, "tokens_before": 6142, }, } + Received: [ { "event": "turn_started", "properties": { "agent_id": "main", "mode": "agent", "model": "pythinker-code", "protocol": "openai", "provider_type": "pythinker", "thinking_effort": "off", "turn_id": 0, }, }, { "event": "compaction_finished", "properties": { "agent_id": "main", "compacted_count": 7, "duration_ms": 23, "input_cache_creation": 0, "input_cache_read": 0, "input_tokens": 1184, "mode": "agent", "model": "pythinker-code", "output_tokens": 9, "protocol": "openai", "provider_type": "pythinker", "retry_count": 0, "round": 1, "source": "auto", "thinking_effort": "off", "tokens_after": 6222, "tokens_before": 6205, "turn_id": 0, }, }, { "event": "turn_ended", "properties": { "agent_id": "main", "duration_ms": 39, "mode": "agent", "model": "pythinker-code", "protocol": "openai", "provider_type": "pythinker", "reason": "completed", "thinking_effort": "off", "turn_id": 0, }, }, ] ❯ test/agent/fullCompaction/fullCompaction.test.ts:1951:21
[agent-core-v2] test/agent/fullCompaction/fullCompaction.test.ts > FullCompaction > fires PreCompact and PostCompact hooks from the compaction module: packages/agent-core-v2/test/agent/fullCompaction/fullCompaction.test.ts#L580
AssertionError: expected { hook_event_name: 'PreCompact', …(5) } to match object { hook_event_name: 'PreCompact', …(4) } (1 matching property omitted from actual) - Expected + Received { "cwd": "/tmp/pythinker-compact-hooks-4wSbNc", "hook_event_name": "PreCompact", "session_id": "test-session", - "token_count": 6135, + "token_count": 6198, "trigger": "auto", } ❯ test/agent/fullCompaction/fullCompaction.test.ts:580:17
[agent-core-v2] test/agent/fullCompaction/fullCompaction.test.ts > FullCompaction > runs manual compaction and applies the compacted context: packages/agent-core-v2/test/agent/fullCompaction/fullCompaction.test.ts#L305
AssertionError: expected [ { …(2) } ] to deep equally contain { event: 'compaction_finished', …(1) } - Expected: { "event": "compaction_finished", "properties": ObjectContaining { "agent_id": "main", "compacted_count": 6, "duration_ms": Any<Number>, "input_cache_creation": 0, "input_cache_read": 0, "input_tokens": 1192, "output_tokens": 8, "retry_count": 0, "source": "manual", "thinking_effort": "off", "tokens_after": Any<Number>, "tokens_before": 6135, }, } + Received: [ { "event": "compaction_finished", "properties": { "agent_id": "main", "compacted_count": 6, "duration_ms": 47, "input_cache_creation": 0, "input_cache_read": 0, "input_tokens": 1192, "mode": "agent", "model": "pythinker-code", "output_tokens": 8, "protocol": "openai", "provider_type": "pythinker", "retry_count": 0, "round": 1, "source": "manual", "thinking_effort": "off", "tokens_after": 6214, "tokens_before": 6198, }, }, ] ❯ test/agent/fullCompaction/fullCompaction.test.ts:305:21
[cli] test/cli/run-shell.test.ts > runShell > tracks exit and prints resume instructions from the TUI exit handler: apps/pythinker-code/test/cli/run-shell.test.ts#L839
AssertionError: expected "vi.fn()" to be called with arguments: [ [ Socket{ …(22), …(15) }, …(1) ] ] Number of calls: 0 ❯ test/cli/run-shell.test.ts:839:32
[cli] test/tui/components/messages/usage-panel.test.ts > UsagePanelComponent > formats session, context, and managed usage sections: apps/pythinker-code/test/tui/components/messages/usage-panel.test.ts#L54
AssertionError: expected 'Session usage\n pythinker input 2k …' to contain 'resets in 1h' - Expected + Received - resets in 1h + Session usage + pythinker input 2k output 250 total 2.2k + + Context window + █████░░░░░░░░░░░░░░░ 25% (2.4k / 9.8k) + + Plan usage + daily ████░░░░░░░░░░░░░░░░ 20% used resets in 3.6s ❯ test/tui/components/messages/usage-panel.test.ts:54:32
[cli] test/tui/commands/web.test.ts > handleRemoteControlCommand > starts the tunnel and saves a token-free session QR code: apps/pythinker-code/test/tui/commands/web.test.ts#L245
AssertionError: expected "vi.fn()" to be called with arguments: [ ObjectContaining{…} ] Received: 1st vi.fn() call: [ - ObjectContaining { + { + "clientVersion": "pythinker-code/0.42.0", "homeDir": "/tmp/pythinker-rc-qrcode-wQWAyW/custom-home", "localOrigin": "http://127.0.0.1:58627", - "localServerToken": Any<Function>, + "localServerToken": "local-server-token", + "onStatus": [Function onStatus], }, ] Number of calls: 1 ❯ test/tui/commands/web.test.ts:245:40
[cli] test/tui/commands/web.test.ts > handleRemoteControlCommand > stays in the TUI with a readable error when no relay key is configured: apps/pythinker-code/test/tui/commands/web.test.ts#L161
AssertionError: expected "vi.fn()" to be called with arguments: [ StringContaining "relay key" ] Number of calls: 0 ❯ test/tui/commands/web.test.ts:161:28
[cli] test/tui/commands/web.test.ts > handleWebCommand > starts the new server on takeover, printing the banner and opening the deep link: apps/pythinker-code/test/tui/commands/web.test.ts#L142
AssertionError: expected '\n ▐█▛█▛█▌ Pythinker server ready …' to contain ' ●' - Expected + Received - ● + + ▐█▛█▛█▌ Pythinker server ready 0.42.0 + ▐█████▌ Local web UI is available from this machine. + + Local: http://127.0.0.1:58627/#token=tok-1 + Network: off use --host to enable + + Token: tok-1 + + Logs: off use --log-level info to enable + Stop: Ctrl+C + + Session: http://127.0.0.1:58627/sessions/ses-1#token=tok-1 + ❯ test/tui/commands/web.test.ts:142:66
[cli] test/cli/v2-run-print.test.ts > runV2Print > initializes the v1 telemetry pipeline alongside the cloud appender: apps/pythinker-code/test/cli/v2-run-print.test.ts#L608
AssertionError: expected "vi.fn()" to be called with arguments: [ { …(9) } ] Received: 1st vi.fn() call: [ { "appName": "pythinker-code-cli", "deviceId": "device-1", - "endpoint": Any<Function>, - "getAccessToken": Any<Function>, + "endpoint": [Function endpoint], "homeDir": "/home/runner/.pythinker-code", "model": "k2", - "onUnexpectedError": Any<Function>, + "onUnexpectedError": [Function onUnexpectedError], "uiMode": "print", "version": "1.2.3-test", }, ] Number of calls: 1 ❯ test/cli/v2-run-print.test.ts:608:39
[agent-gateway] test/search/searchRoute.test.ts > server-v2 /api/v1/search > serves literal mode through the wire: packages/agent-gateway/test/search/searchRoute.test.ts#L207
AssertionError: expected true to be false // Object.is equality - Expected + Received - false + true ❯ test/search/searchRoute.test.ts:207:66
[agent-gateway] test/search/searchRoute.test.ts > server-v2 /api/v1/search > rejects invalid bodies with 40001: packages/agent-gateway/test/search/searchRoute.test.ts#L184
AssertionError: expected +0 to be 40001 // Object.is equality - Expected + Received - 40001 + 0 ❯ test/search/searchRoute.test.ts:184:31
[agent-gateway] test/prompts.test.ts > server-v2 /api/v1 prompts > attaches a server-local file by path without copying it: packages/agent-gateway/test/prompts.test.ts#L1451
AssertionError: expected { type: 'text', …(1) } to deeply equal { type: 'text', …(1) } - Expected + Received { - "text": "Attached file \"notes.txt\" (application/octet-stream, 20 bytes): /tmp/pythinker-attach-path-joe67s/notes.txt open it with the Read tool", + "text": "Attached file \"notes.txt\" (application/octet-stream, 20 bytes): /tmp/pythinker-attach-path-joe67s/notes.txt — open it with the Read tool", "type": "text", } ❯ test/prompts.test.ts:1451:26
[agent-gateway] test/codex-login.test.ts > Codex login routes > maps invalid input and unknown login ids to stable wire codes: packages/agent-gateway/test/codex-login.test.ts#L129
AssertionError: expected { …(3) } to match object { code: 40001 } (3 matching properties omitted from actual) - Expected + Received { - "code": 40001, + "error": "Not Found", + "message": "Route POST:/api/v1/auth/codex/login-1:submit_code not found", + "statusCode": 404, } ❯ test/codex-login.test.ts:129:28
[agent-gateway] test/codex-login.test.ts > Codex login routes > matches the web start, poll, submit, and cancel contract: packages/agent-gateway/test/codex-login.test.ts#L86
AssertionError: expected { …(3) } to match object { code: +0, data: { …(2) } } (3 matching properties omitted from actual) - Expected + Received { - "code": 0, - "data": { - "login_id": "login-1", - "loopback": true, - }, + "error": "Not Found", + "message": "Route POST:/api/v1/auth/codex:start not found", + "statusCode": 404, } ❯ test/codex-login.test.ts:86:26
test (1)
Process completed with exit code 1.
[agent-core-v2] test/lint/vendor-name-gates.test.ts > vendor-name gates > finds no vendor-name gates in src/ outside kosong: packages/agent-core-v2/test/lint/vendor-name-gates.test.ts#L89
AssertionError: vendor-name gate found outside kosong — ask the provider-definition / adapter registries instead: expected [ Array(1) ] to deeply equal [] - Expected + Received - [] + [ + "app/kosongConfig/envOverlay.ts:167 : providerType === 'pythinker'", + ] ❯ test/lint/vendor-name-gates.test.ts:89:7
[cli] test/tui/components/chrome/moon-loader.test.ts > MoonLoader > uses the shared Braille mark for the waiting state: apps/pythinker-code/test/tui/components/chrome/moon-loader.test.ts#L50
AssertionError: expected '🌑' to be '⣷' // Object.is equality Expected: "⣷" Received: "🌑" ❯ test/tui/components/chrome/moon-loader.test.ts:50:43
[cli] test/tui/commands/secondary-model.test.ts > handleSecondaryModelCommand > reports a persistence failure without a status message: apps/pythinker-code/test/tui/commands/secondary-model.test.ts#L232
AssertionError: expected "vi.fn()" to not be called at all, but actually been called 1 times Received: 1st vi.fn() call: Array [ "Skipped refreshing models: host.authFlow.refreshOAuthProviderModels is not a function", "warning", ] Number of calls: 1 ❯ test/tui/commands/secondary-model.test.ts:232:33
[cli] test/utils/process/fd-detect.test.ts > detectFdPath > does not download fd when no local binary is available: apps/pythinker-code/test/utils/process/fd-detect.test.ts#L56
AssertionError: expected "vi.fn()" to not be called at all, but actually been called 1 times Received: 1st vi.fn() call: Array [ "https://code.pythinker.com/pythinker-code/fd/fd-v10.4.2-x86_64-unknown-linux-musl.tar.gz", Object { "signal": AbortSignal { Symbol(kEvents): Map {}, Symbol(events.maxEventTargetListeners): 0, Symbol(events.maxEventTargetListenersWarned): false, Symbol(kHandlers): Map {}, Symbol(kAborted): false, Symbol(kReason): undefined, Symbol(kComposite): false, Symbol(kTimeout): true, }, }, ] Number of calls: 1 ❯ test/utils/process/fd-detect.test.ts:56:27
[cli] test/tui/pythinker-tui-startup.test.ts > PythinkerTUI startup > keeps the active session when logging out a different provider: apps/pythinker-code/test/tui/pythinker-tui-startup.test.ts#L2312
AssertionError: expected "vi.fn()" to be called with arguments: [ 'openai' ] Number of calls: 0 ❯ test/tui/pythinker-tui-startup.test.ts:2312:28
[cli] test/cli/export.test.ts > pythinker export > builds the v2 harness by default: apps/pythinker-code/test/cli/export.test.ts#L564
AssertionError: expected "vi.fn()" to be called 1 times, but got 0 times ❯ test/cli/export.test.ts:564:49
[klient] test/e2e/legacy/client.test.ts > DaemonClient session action helpers > model catalog helpers call the catalog and action-suffix routes: packages/klient/test/e2e/legacy/client.test.ts#L463
AssertionError: expected [ [ 'GET', …(1) ], …(4) ] to deeply equal [ [ 'GET', …(1) ], …(4) ] - Expected + Received @@ -7,11 +7,11 @@ "GET", "http://server.example.test/api/v1/models", ], [ "POST", - "http://server.example.test/api/v1/models/pythinker-code%2Fkimi-for-coding:set_default", + "http://server.example.test/api/v1/models/openai%2Fgpt-4o:set_default", ], [ "GET", "http://server.example.test/api/v1/providers", ], ❯ test/e2e/legacy/client.test.ts:463:63
[agent-gateway] test/workspaces.test.ts > server-v2 /api/v1/workspaces > adds a relative directory without persisting when persist is false (variant 2): packages/agent-gateway/test/workspaces.test.ts#L371
AssertionError: promise resolved "'[workspace]\nadditional_dir = [ "/tmp…'" instead of rejecting - Expected: Error { "message": "rejected promise", } + Received: "[workspace] additional_dir = [ \"/tmp/pythinker-server-v2-workspaces-HQYVXm/extra\" ] " ❯ test/workspaces.test.ts:371:57
[agent-gateway] test/workspaces.test.ts > server-v2 /api/v1/workspaces > adds an additional directory and persists it by default (variant 2): packages/agent-gateway/test/workspaces.test.ts#L339
Error: EEXIST: file already exists, mkdir '/tmp/pythinker-server-v2-workspaces-HQYVXm/extra' ❯ test/workspaces.test.ts:339:5 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { errno: -17, code: 'EEXIST', syscall: 'mkdir', path: '/tmp/pythinker-server-v2-workspaces-HQYVXm/extra' }
[agent-gateway] test/tasks.test.ts > server-v2 /api/v1/sessions/{sid}/tasks > lists registered tasks with mapped kind/status and wire-shaped fields: packages/agent-gateway/test/tasks.test.ts#L221
AssertionError: expected { id: 'test-p0bqqvse', …(12) } to match object { id: 'test-p0bqqvse', …(11) } (3 matching properties omitted from actual) - Expected + Received @@ -1,22 +1,11 @@ { "agent_id": "sub-1", - "current_routing_env_revision": "route-env:v1:aaa", "id": "test-p0bqqvse", "kind": "subagent", "model": "provider/secondary", "parent_tool_call_id": "call-parent-1", - "routing": { - "feature_source": "env", - "model_source": "policy-pool", - "operation": "spawn", - "policy_mode": "pool", - "policy_source": "config", - "profile_source": "requested", - "route_decision": "route-decision:v1:bbb", - "routing_env_revision": "route-env:v1:aaa", - }, "run_in_background": true, "session_id": "session_7810b14b-e997-423d-9d28-7ce0c9a0a78b", "status": "running", "subagent_type": "explore", "thinking_effort": "low", ❯ test/tasks.test.ts:221:31
[agent-gateway] test/subagentRosterTracker.test.ts > SubagentRosterTracker > carries the routing provenance and current revision from subagent.spawned: packages/agent-gateway/test/subagentRosterTracker.test.ts#L44
AssertionError: expected [ { id: 'agent-r', …(14) } ] to deeply equal [ ObjectContaining{…} ] - Expected + Received [ { - "current_routing_env_revision": "route-env:v1:new", + "created_at": "2026-09-19T19:31:47.062Z", + "current_routing_env_revision": undefined, + "description": "task agent-r", + "dynamic_workflow_index": 0, "id": "agent-r", - "routing": { - "feature_source": "default", - "model_source": "resume-existing", - "operation": "resume", - "policy_mode": "inherit", - "policy_source": "default", - "profile_source": "resume-existing", - "route_decision": "route-decision:v1:x", - "routing_env_revision": "route-env:v1:old", - }, + "kind": "subagent", + "model": undefined, + "parent_tool_call_id": "tc_dynamic_workflow_1", + "routing": undefined, + "run_in_background": false, + "session_id": "sess_1", + "status": "running", + "subagent_phase": "queued", + "subagent_type": "pythinker-subagent", + "thinking_effort": undefined, }, ] ❯ test/subagentRosterTracker.test.ts:44:24
[cli] test/tui/pythinker-tui-message-flow.test.ts > PythinkerTUI message flow > applies /model selection with inline thinking state: apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts#L7578
AssertionError: expected '─────────────────────────────────────…' to match /Kimi K2\s+Pythinker Code ← current/ - Expected: /Kimi K2\s+Pythinker Code ← current/ + Received: "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Select a model (type to search) Tab toggle provider · ↑↓ navigate · Enter select · Alt+S session-only · Esc cancel All openai Kimi K2 openai ← current ❯ Pythinker Turbo openai Thinking (←→ to switch) On [ Off ] ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────" ❯ test/tui/pythinker-tui-message-flow.test.ts:7578:26
[cli] test/tui/pythinker-tui-message-flow.test.ts > PythinkerTUI message flow > marks only core user-cancellation subagent failures as cancelled: apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts#L6343
AssertionError: expected ' \n ─ Agent DynamicWorkflow ─ Revie…' to contain '✗ The user manually interrupted this …' - Expected + Received - ✗ The user manually interrupted this subagent x. + + ─ Agent DynamicWorkflow ─ Review changed files ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── + + 001 ⊘ Cancelled. 002 [⣀⣀⣀⣀⣀⣀⣀⣀] ✗ The user manually interrupted this subag + + 🌑 Aborted. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + ❯ test/tui/pythinker-tui-message-flow.test.ts:6343:24
[cli] test/tui/pythinker-tui-message-flow.test.ts > PythinkerTUI message flow > tells the user when the codebase upload fails: apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts#L2569
AssertionError: expected ' \n ✓ Feedback submitted, thank you!…' to contain 'attachment upload failed' - Expected + Received - attachment upload failed + + ✓ Feedback submitted, thank you! + Session: ses-1 + Feedback ID: 3 ❯ test/tui/pythinker-tui-message-flow.test.ts:2569:24
[cli] test/tui/pythinker-tui-message-flow.test.ts > PythinkerTUI message flow > tells the user when feedback is sent but codebase packaging fails: apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts#L2531
AssertionError: expected "vi.fn()" to be called with arguments: [ Any<Object>, …(3) ] Number of calls: 0 ❯ test/tui/pythinker-tui-message-flow.test.ts:2531:27
[cli] test/tui/pythinker-tui-message-flow.test.ts > PythinkerTUI message flow > keeps archive-path creation failures as partial failures without the GitHub fallback: apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts#L2497
AssertionError: expected ' \n ✓ Feedback submitted, thank you!…' to contain 'attachment upload failed' - Expected + Received - attachment upload failed + + ✓ Feedback submitted, thank you! + Session: ses-1 + Feedback ID: 3 ❯ test/tui/pythinker-tui-message-flow.test.ts:2497:24
[cli] test/tui/pythinker-tui-message-flow.test.ts > PythinkerTUI message flow > uploads session logs when codebase scanning fails but the session directory is available: apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts#L2466
AssertionError: expected "vi.fn()" to be called with arguments: [ ObjectContaining{…} ] Number of calls: 0 ❯ test/tui/pythinker-tui-message-flow.test.ts:2466:35
[cli] test/tui/pythinker-tui-message-flow.test.ts > PythinkerTUI message flow > waits for the codebase upload to finish before returning: apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts#L2420
AssertionError: expected "vi.fn()" to be called 2 times, but got 0 times ❯ test/tui/pythinker-tui-message-flow.test.ts:2420:29
[cli] test/tui/pythinker-tui-message-flow.test.ts > PythinkerTUI message flow > submits text feedback before preparing requested attachments: apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts#L2350
AssertionError: expected "vi.fn()" to be called with arguments: [ ObjectContaining{…} ] Number of calls: 0 ❯ test/tui/pythinker-tui-message-flow.test.ts:2350:37
[cli] test/tui/pythinker-tui-message-flow.test.ts > PythinkerTUI message flow > prints the sign-up page and GitHub Issues links when not signed in: apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts#L2250
AssertionError: expected ' You\'re not signed in. Sign up or …' to contain 'https://www.code.pythinker.com' - Expected + Received - https://www.code.pythinker.com + You're not signed in. Sign up or leave feedback on GitHub: + https://www.pythinker.com/code + https://github.com/PyModel/pythinker-code/issues ❯ test/tui/pythinker-tui-message-flow.test.ts:2250:24
[cli] test/cli/options.test.ts > CLI options parsing > sub-commands > registers the visible sub-commands: apps/pythinker-code/test/cli/options.test.ts#L583
AssertionError: expected [ 'export', 'fork', 'provider', …(11) ] to deeply equal [ 'export', 'fork', 'provider', …(11) ] - Expected + Received @@ -3,12 +3,12 @@ "fork", "provider", "session", "acp", "web", - "server", "rc", + "server", "login", "doctor", "vis", "install-app", "migrate", ❯ test/cli/options.test.ts:583:28
test
Process completed with exit code 1.
lint
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/
test-pi-tui
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/
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. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
build
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/
test-minidb
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/
test (4)
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/
test (5)
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/
test (1)
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/
test (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. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
test (2)
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/
lint
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test-pi-tui
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
typecheck
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
build
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test-minidb
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test (4)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test (5)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test (1)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test (3)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test (2)
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"
test
"The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748"