Skip to content

chore: upstream reconcile through reference 99eaa993b #1383

chore: upstream reconcile through reference 99eaa993b

chore: upstream reconcile through reference 99eaa993b #1383

Triggered via pull request September 19, 2026 18:53
Status Failure
Total duration 4m 53s
Artifacts –

ci.yml

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

Annotations

45 errors, 10 warnings, and 11 notices
lint
Process completed with exit code 1.
test (1)
Process completed with exit code 1.
[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/migration/migration-screen.test.ts > MigrationScreenComponent — result phase > lists sibling-file contents in the config-fallback warning so the user knows what to merge: apps/pythinker-code/test/migration/migration-screen.test.ts#L515
AssertionError: expected '─────────────────────────────────────…' to contain 'config.migrated-from-pythinker-cli.to…' - Expected + Received - config.migrated-from-pythinker-cli.toml + ──────────────────────────────────────────────────────────────────────────────── + Migration complete + + ✓ 50 sessions migrated + ✓ config · REPL history + ⚠ 2 pythinker-cli plugins — not yet supported for migration + ⚠ config.toml could not be parsed — review config.migrated-from-pythinker-c... + contains: 2 providers, 1 model, 3 hooks + + Old data kept at /x/.pythinker — pythinker-cli still works. + + ⏎ continue to pythinker-code + ──────────────────────────────────────────────────────────────────────────────── ❯ test/migration/migration-screen.test.ts:515:17
[cli] test/migration/migration-screen.test.ts > MigrationScreenComponent — result phase > surfaces conflict and failure warnings on the result screen: apps/pythinker-code/test/migration/migration-screen.test.ts#L470
AssertionError: expected '─────────────────────────────────────…' to contain 'config.migrated-from-pythinker-cli.to…' - Expected + Received - config.migrated-from-pythinker-cli.toml + ──────────────────────────────────────────────────────────────────────────────── + Migration complete + + ✓ 50 sessions migrated + ✓ config · MCP · REPL history + ⚠ 2 pythinker-cli plugins — not yet supported for migration + ⚠ config.toml could not be parsed — review config.migrated-from-pythinker-c... + ⚠ mcp.json unreadable — review mcp.migrated-from-pythinker-cli.json + ⚠ 1 sessions failed to migrate + + Old data kept at /x/.pythinker — pythinker-cli still works. + + ⏎ continue to pythinker-code + ──────────────────────────────────────────────────────────────────────────────── ❯ test/migration/migration-screen.test.ts:470:17
[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
[agent-gateway] test/apiSurface.snapshot.test.ts > API surface snapshot > matches the documented v2 route table and meta endpoints: packages/agent-gateway/test/apiSurface.snapshot.test.ts#L82
Error: Snapshot `API surface snapshot > matches the documented v2 route table and meta endpoints 1` mismatched - Expected + Received @@ -21,14 +21,10 @@ "DELETE", "/api/v1/files/{file_id}", ], [ "DELETE", - "/api/v1/auth/login", - ], - [ - "DELETE", "/api/v1/providers/{provider_id}", ], [ "DELETE", "/api/v1/workspaces/{workspace_id}", @@ -137,26 +133,10 @@ "GET", "/api/v1/models", ], [ "GET", - "/api/v1/auth/login", - ], - [ - "GET", - "/api/v1/oauth/region", - ], - [ - "GET", - "/api/v1/auth/status", - ], - [ - "GET", - "/api/v1/auth/status", - ], - [ - "GET", "/api/v1/plugins", ], [ "GET", "/api/v1/plugins/marketplace", @@ -377,18 +357,10 @@ "POST", "/api/v1/models/{tail}", ], [ "POST", - "/api/v1/auth/login", - ], - [ - "POST", - "/api/v1/auth/logout", - ], - [ - "POST", "/api/v1/plugins", ], [ "POST", "/api/v1/plugins/{tail}", ❯ test/apiSurface.snapshot.test.ts:82:30
[pyaos] test/local.test.ts > LocalPyaos > readText errors parameter (Python compat) > drops invalid bytes with errors="ignore": packages/pyaos/test/local.test.ts#L375
AssertionError: expected '中文' to be 'zh' // Object.is equality Expected: "zh" Received: "中文" ❯ test/local.test.ts:375:23
[pyaos] test/local.test.ts > LocalPyaos > readText errors parameter (Python compat) > returns U+FFFD replacement characters with errors="replace": packages/pyaos/test/local.test.ts#L366
AssertionError: expected '中\ufffd文' to contain 'zh' Expected: "zh" Received: "中�文" ❯ test/local.test.ts:366:23
[vis-web] test/renderers.test.ts > wire renderers > renders a tracked record with a missing entry without throwing: apps/vis/web/test/renderers.test.ts#L134
TypeError: Cannot read properties of undefined (reading 'headline') ❯ test/renderers.test.ts:134:31
[vis-web] test/renderers.test.ts > wire renderers > renders a checkpoint with array entries without throwing: apps/vis/web/test/renderers.test.ts#L113
TypeError: Cannot read properties of undefined (reading 'headline') ❯ test/renderers.test.ts:113:31
[vis-web] test/renderers.test.ts > wire renderers > renders a checkpoint with scalar entries without throwing: apps/vis/web/test/renderers.test.ts#L113
TypeError: Cannot read properties of undefined (reading 'headline') ❯ test/renderers.test.ts:113:31
[vis-web] test/renderers.test.ts > wire renderers > renders a checkpoint with null entries without throwing: apps/vis/web/test/renderers.test.ts#L113
TypeError: Cannot read properties of undefined (reading 'headline') ❯ test/renderers.test.ts:113:31
[vis-web] test/renderers.test.ts > wire renderers > renders a checkpoint with missing entries without throwing: apps/vis/web/test/renderers.test.ts#L113
TypeError: Cannot read properties of undefined (reading 'headline') ❯ test/renderers.test.ts:113:31
[vis-web] test/renderers.test.ts > wire renderers > distinguishes oversized snapshots from files that did not exist: apps/vis/web/test/renderers.test.ts#L85
TypeError: Cannot read properties of undefined (reading 'headline') ❯ test/renderers.test.ts:85:40
[vis-web] test/renderers.test.ts > wire renderers > covers every durable record in the current core-v2 wire manifest: apps/vis/web/test/renderers.test.ts#L77
AssertionError: expected [ 'config.update', …(56) ] to deeply equal [ 'config.update', …(58) ] - Expected + Received @@ -8,12 +8,10 @@ "cron.add", "cron.cursor", "cron.delete", "dynamic_workflow_mode.enter", "dynamic_workflow_mode.exit", - "file_history.checkpoint", - "file_history.tracked", "forked", "full_compaction.begin", "full_compaction.cancel", "full_compaction.complete", "goal.clear", ❯ test/renderers.test.ts:77:34
[agent-gateway] test/plugins.test.ts > server-v2 /api/v1 plugins > serves an empty marketplace when no URL is configured: packages/agent-gateway/test/plugins.test.ts#L454
AssertionError: expected [ { id: 'superpowers', …(7) } ] to deeply equal [] - Expected + Received - [] + [ + { + "description": "Planning, TDD, debugging, and delivery workflows for coding agents.", + "displayName": "Superpowers", + "homepage": "https://github.com/obra/superpowers", + "id": "superpowers", + "keywords": [ + "skills", + "planning", + "tdd", + "debugging", + "code-review", + ], + "source": "https://code.pythinker.com/pythinker-code/plugins/curated/superpowers.zip", + "tier": "curated", + "version": "6.2.0", + }, + ] ❯ test/plugins.test.ts:454:31
[agent-gateway] test/modelCatalogCatalog.test.ts > server-v2 /api/v1 catalog browse + import endpoints > adopts a usable global default_model from a registry import on a fresh setup: packages/agent-gateway/test/modelCatalogCatalog.test.ts#L618
AssertionError: expected null to be 'acme-claude/claude-opus' // Object.is equality - Expected: "acme-claude/claude-opus" + Received: null ❯ test/modelCatalogCatalog.test.ts:618:42
[agent-gateway] test/modelCatalogCatalog.test.ts > server-v2 /api/v1 catalog browse + import endpoints > adopts a usable global default_model on a fresh setup: packages/agent-gateway/test/modelCatalogCatalog.test.ts#L358
AssertionError: expected null to be 'openai/gpt-4.1' // Object.is equality - Expected: "openai/gpt-4.1" + Received: null ❯ test/modelCatalogCatalog.test.ts:358:42
[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/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/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/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-EeOHm0/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-EeOHm0/extra' ❯ test/workspaces.test.ts:339:5 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { errno: -17, code: 'EEXIST', syscall: 'mkdir', path: '/tmp/pythinker-server-v2-workspaces-EeOHm0/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-o2xc3hjo', …(12) } to match object { id: 'test-o2xc3hjo', …(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-o2xc3hjo", "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_341e1a77-525b-40ab-9d2c-e77f183664f1", "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-19T18:56:36.887Z", + "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
[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-iGWinI/notes.txt open it with the Read tool", + "text": "Attached file \"notes.txt\" (application/octet-stream, 20 bytes): /tmp/pythinker-attach-path-iGWinI/notes.txt — open it with the Read tool", "type": "text", } ❯ test/prompts.test.ts:1451:26
[agent-gateway] test/prompts.test.ts > server-v2 /api/v1 prompts > sanitizes an attachment file name before materializing it: packages/agent-gateway/test/prompts.test.ts#L1320
AssertionError: expected null not to be null ❯ attachedPathFrom test/prompts.test.ts:1320:23 ❯ test/prompts.test.ts:1425:26
[agent-gateway] test/prompts.test.ts > server-v2 /api/v1 prompts > persists an inline base64 image in an unsupported format as a path-referenced attachment: packages/agent-gateway/test/prompts.test.ts#L1320
AssertionError: expected null not to be null ❯ attachedPathFrom test/prompts.test.ts:1320:23 ❯ test/prompts.test.ts:1404:26
[agent-gateway] test/prompts.test.ts > server-v2 /api/v1 prompts > materializes an uploaded SVG image as a path-referenced attachment: packages/agent-gateway/test/prompts.test.ts#L1320
AssertionError: expected null not to be null ❯ attachedPathFrom test/prompts.test.ts:1320:23 ❯ test/prompts.test.ts:1371:26
[agent-gateway] test/prompts.test.ts > server-v2 /api/v1 prompts > materializes an arbitrary file attachment into the session attachments dir: packages/agent-gateway/test/prompts.test.ts#L1320
AssertionError: expected null not to be null ❯ attachedPathFrom test/prompts.test.ts:1320:23 ❯ test/prompts.test.ts:1346: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
[agent-gateway] test/boot.test.ts > server-v2 boot > seeds default Pythinker identity headers from hostIdentity that opts.seeds can override: packages/agent-gateway/test/boot.test.ts#L136
AssertionError: expected undefined to be '0.0.0-test' // Object.is equality - Expected: "0.0.0-test" + Received: undefined ❯ test/boot.test.ts:136:47
[agent-gateway] test/boot.test.ts > server-v2 boot > boots agent-core-v2 and serves the basic /api/v1 routes: packages/agent-gateway/test/boot.test.ts#L84
AssertionError: expected 404 to be 200 // Object.is equality - Expected + Received - 200 + 404 ❯ test/boot.test.ts:84:30
[pythinker-sdk] test/sdk-rpc-client-v2.test.ts > SDKRpcClientV2 (agent-core-v2 wiring) > seeds the host request headers (User-Agent + X-Msh-*) into the engine: packages/node-sdk/test/sdk-rpc-client-v2.test.ts#L355
AssertionError: expected undefined to be 'pythinker_code_cli' // Object.is equality - Expected: "pythinker_code_cli" + Received: undefined ❯ test/sdk-rpc-client-v2.test.ts:355:41
test
Process completed with exit code 1.
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/
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/
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 (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-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/
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/
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/
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 (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 (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-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"
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"
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 (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-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"
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"
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 (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 (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 (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
"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"