diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 11d4830cc..53647492a 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed self-update misclassifying glibc Linux hosts with an installed musl loader as musl hosts, which could download an unusable musl binary instead of the glibc release. + ## [17.2.4] - 2026-08-01 ### Added diff --git a/packages/coding-agent/src/cli/update-cli.ts b/packages/coding-agent/src/cli/update-cli.ts index 3b87fc6b0..f106e72d1 100644 --- a/packages/coding-agent/src/cli/update-cli.ts +++ b/packages/coding-agent/src/cli/update-cli.ts @@ -765,14 +765,33 @@ async function pruneBunCacheAfterGlobalInstall(): Promise): boolean { + return isMuslLinux(options); } /** diff --git a/packages/coding-agent/test/update-cli.test.ts b/packages/coding-agent/test/update-cli.test.ts index c232253c4..4bf380ce0 100644 --- a/packages/coding-agent/test/update-cli.test.ts +++ b/packages/coding-agent/test/update-cli.test.ts @@ -13,6 +13,7 @@ import { buildMiseUpgradeArgs, buildNpmInstallArgs, downloadVerifiedBinary, + isMuslLinuxForTest, parseUpdateArgs, pruneBunInstallCache, replaceBinaryForUpdate, @@ -74,6 +75,29 @@ describe("parseUpdateArgs", () => { expect(parseUpdateArgs(["update", "-l"])).toEqual({ force: false, check: false, plugins: true }); }); }); + +describe("update-cli libc detection", () => { + it("does not mistake an installed musl loader for a glibc host", () => { + expect( + isMuslLinuxForTest({ + platform: "linux", + alpineRelease: false, + lddOutput: "ldd (Ubuntu GLIBC 2.39-0ubuntu8.7) 2.39", + }), + ).toBe(false); + }); + + it("recognizes a musl host from ldd output", () => { + expect( + isMuslLinuxForTest({ + platform: "linux", + alpineRelease: false, + lddOutput: "musl libc (x86_64)", + }), + ).toBe(true); + }); +}); + describe("update-cli install target detection", () => { it("uses bun update when prioritized omp is inside bun global bin", () => { const method = resolveUpdateMethodForTest("/Users/test/.bun/bin/omp", "/Users/test/.bun/bin");