Skip to content

Update is offered for desktop-managed servers that can't self-update on pacman-installed Linux #30784

Closed

Description

@carloschida

What happened

From a second computer, I clicked update on the banner for a Linux machine running the T3 Code desktop app from a pacman package (Omarchy t3code-bin). The update was offered, then rejected with:

Server update failed: Automatic updates on Linux require the AppImage or the .deb package.

The machine's own desktop app also showed an update banner. On this install type, the in-app path can't succeed, so the update stays offered and keeps failing.

Diagnosis

The server advertises a desktop app update without checking whether the desktop app can install one.

  • apps/desktop/src/updates/DesktopUpdates.ts:335 disables auto-update on Linux unless the app is an AppImage or .deb.
  • apps/server/src/environment/ServerEnvironment.ts:204-205 sets desktopAppUpdate from serverSelfUpdate === "desktop-managed" and the control fd alone. The nearby comment says a control fd guarantees update support.
  • Clients trust that capability (packages/client-runtime/src/connection/outdatedHostUpdate.ts:106-107, apps/web/src/components/sidebar/updateEverything.logic.ts:100), so they offer the update.
  • apps/server/src/cloud/selfUpdate.ts:154-164 then runs the desktop update, which fails on the disabled reason.

Line references are from v0.1.6. The DesktopUpdates.ts check is unchanged on v0.1.7 and main. The other references were not rechecked there.

Possible direction: include the desktop's update-disabled state in the capability, so clients can say "update this machine with its package manager" instead of offering an update that can't work.

Steps to reproduce

  1. On Linux, install the desktop app from a pacman package (not an AppImage or .deb).
  2. Leave Local environment on, so the desktop app runs the server.
  3. Wait for a newer release, so the server is behind.
  4. Connect from another computer and use the update banner.
  5. The update is offered, then fails with the error above.

Version

Bug happened on: desktop app and server 0.1.6 (t3code-bin 0.1.6-1). The other computer's client version is unknown.
Triage CLI: 0.1.7.

Environment

  • Host: Arch-based Omarchy, Linux 7.2.11, x64, Hyprland/Wayland
  • Install: t3code-bin from the Omarchy repo, plus a systemd user background service in the same T3 home
  • Surface: desktop app on the host and on a second computer

Evidence

`server.trace.ndjson`, span `cloud.server_self_update.update`, called from `ws.rpc.server.updateServerWithProgress`:


2026-11-03T12:28:12Z Failure
2026-11-03T13:21:56Z Failure
2026-11-04T10:56:11Z Failure
ServerSelfUpdateError: Server update failed: Automatic updates on Linux require the AppImage or the .deb package.


`/.well-known/t3/environment` on the affected server reported `serverVersion: 0.1.6`, `serverSelfUpdate: desktop-managed`, `desktopAppUpdate: true`.

Also seen on this machine: the background service stayed on 0.1.3 while the package moved to 0.1.6. At boot on 2026-11-04 it ran on a database at migration 76, logging migrations 70-76 as "unknown to this build". The desktop app then failed with `ServerAlreadyRunningError`, and the service stopped about 27 seconds later. What stopped it was not established.

Related issues

No existing issue found for this rejection.

Fix applied or workaround

This machine needed the background service anyway, so:

  1. Turned off Settings → Environments → Local environment.
  2. Ran npx t3@latest update --yes, moving the service from 0.1.3 to 0.1.7.
  3. Paired the desktop app with the service using t3 pair.

The server now reports serverSelfUpdate: boot-service, and the second computer reconnected. A remote update through this path has not been tested yet, because 0.1.7 is the latest stable release.

This does not fix the underlying bug. Installs without a background service can still only update through their package manager, and the desktop app stays on 0.1.6 until the package updates.

Filed by

Claude Code (Claude Opus 5.5), via t3 triage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    via-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions