Skip to content

OpenCode update offered under npm min-release-age can never install on Vite+ and native-command installs #32326

Open

Description

@coygeek

What happened

With min-release-age=3 in ~/.npmrc, T3 Code offered OpenCode 2.2.5 → 2.2.6 about 5 hours after 2.2.6 was published. npm refuses that release until it is 3 days old, so Update failed on both Macs, in two different ways:

  • Vite+ install: Update command completed, but T3 Code still detects an outdated provider version.
  • Native-command install: Update command exited with code 1: └ Failed

The offer stays until the release ages past the window. The third machine has no release-age policy and already runs 2.2.6.

Diagnosis

resolveLatestProviderVersion falls back to fetchNpmLatestVersion, which reads registry.npmjs.org/<pkg>/latest and ignores the release-age policy, because the vite-plus-global and native opencode upgrade branches set no lookupLatestVersion (packages/provider-core/src/server/maintenanceResolver.ts). The two failures then differ:

  • Vite+: vp i -g @opencode/cli resolves under the policy, reinstalls 2.2.5 and exits 0.
  • Native: OpenCode pins the exact version it wants, so npm fails with ETARGET and exit 1.

#21422 reported the npm and Vite+ case and was closed as a duplicate of #14249, whose fix covers pnpm. Open PR #24062 adds a lookup for npm-global installs only, so neither path here is covered.

Steps to reproduce

  1. Set min-release-age=3 in ~/.npmrc.
  2. Install OpenCode one of two ways. A: vp i -g @opencode/cli, with the Vite+ bin directory first on PATH. B: a dedicated npm prefix exposed through a wrapper outside node_modules, so T3 Code selects <wrapper> upgrade.
  3. Wait for an OpenCode release younger than the window, then open T3 Code. It offers the new version.
  4. Press Update. A shows the "still detects an outdated provider version" message. B shows Update command exited with code 1: └ Failed.

Expected: T3 Code offers only a version the installer can install under the policy, or says the newer release is waiting on it. With the policy unset, or after the window passes, Update should install the release.

Version

T3 Code 0.1.8-nightly.20261107.4301 (4cb6945dc60e) desktop app, on the server of both affected machines. This is the newest nightly. Triage CLI: 0.1.6.

Environment

macOS arm64 (two machines), npm 12.2.1, Vite+ 1.3.0, OpenCode 2.2.5 → 2.2.6

Evidence

Install A, rerun by hand after T3 Code's attempt:

$ vp i -g @opencode/cli
info: Installing 1 global package with Node.js 26.13.0
+ Installed @opencode/cli 2.2.5

Exit 0.

Install B, from the `ProviderMaintenanceRunner.runCommandAndVerify` trace event (`command: opencode upgrade`, `exitCode: 1`):

●  Using method: npm
●  From 2.2.5 → 2.2.6
■  npm could not install OpenCode
│  npm error code ETARGET
│  npm error notarget No matching version found for @opencode/cli@2.2.6 with
│  a date before 11/3/2026, 8:16:00 PM.
│  Command  npm install --global --force @opencode/cli@2.2.6
└  Failed

Dry run: `npm install -g --dry-run @opencode/cli` selects 2.2.5, and the same command with `@2.2.6` fails with `ETARGET`. `npm view @opencode/cli version` reports 2.2.6, because it does not apply the policy.

Related issues

#21422 (closed as a duplicate of #14249), #14249 (closed, pnpm), #24062 (open PR, npm-global only), #30632 (open, same class on bun), #26280 (open, the same toast logic picks an unhelpful last line, here └ Failed), #22741 (open, a different Vite+ wrong-install failure)

Fix applied or workaround

Wait until the release passes the window. A manual install with --min-release-age=0 also works if you accept bypassing the policy.

Filed by

Claude Opus 5.5 (claude-opus-5-5) in Claude Code, through t3 triage

Activity

  1. coygeek commented on Nov 7, 2026

    @coygeek
    Author

    Fresh evidence: this still reproduces on nightly 4327, and it also fails through the sidebar's update-everything dialog.

    Version: the run started on desktop 0.1.8-nightly.20261107.4314. After the app relaunched on 0.1.8-nightly.20261107.4327, the update was still offered.

    Environment: macOS arm64, npm 12.2.1, min-release-age=3, OpenCode 2.2.5 → 2.2.6, native-command install (<wrapper> upgrade).

    What happened: one run covered the local OpenCode update, a remote desktop app update and the local app update. server.updateProvider failed in about 4 s. Both app updates still went ahead, so the failed OpenCode update was the only one left on this machine.

    Provider update command failed
    command: opencode upgrade, exitCode: 1, timedOut: false
    ●  Using method: npm
    ●  From 2.2.5 → 2.2.6
    ■  npm could not install OpenCode
    │  npm error code ETARGET
    │  npm error notarget No matching version found for @opencode/cli@2.2.6 with
    │  a date before 11/4/2026, 12:30:37 PM.
    │  Command  npm install --global --force @opencode/cli@2.2.6
    └  Failed
    

    After relaunch on 4327: the provider status still reports status: behind_latest, latestVersion: 2.2.6 and canUpdate: true, so the dialog offers the same update that just failed.

    How long it lasts: 2.2.6 was published at 2026-11-06T23:33:40Z, so this install can't accept it until 2026-11-09T23:33:40Z. Until then, every press of Update fails.

    Comparison: a machine with no release-age policy on the same fleet already runs 2.2.6.

    Fix status: PR #24062 is still open and only covers npm-global, so it doesn't cover this native-command path.

    Produced by Claude Code (Opus 5.5) through 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