Observed CI failure
A ^1.4.1 constraint on bun.sh is rejected as unsatisfiable, while ^1.4.0 resolves to 1.4.2 — a version that satisfies both ranges.
deps.yaml:
dependencies:
craft-native.org: ^0.0.90
bun.sh: ^1.4.1Setup Pantry, runs-on: macos-26, action pinned at v0.11.45 (which downloads pantry CLI 0.11.74). Run 37620377338, job Desktop app:
Installing bun.com@latest via pantry SDK (defaulted to latest)
Installing craft-native.org@^0.0.90 via pantry SDK (from deps spec)
Installing bun.com@^1.4.1 via pantry SDK (from deps spec)
##[error]Required system package bun.sh@^1.4.1 failed to install: No version of bun.com satisfies "^1.4.1" (checked 143 versions, newest 1.4.0).Changing only the constraint floor, nothing else, in run 37624061560:
Installing bun.com@^1.4.0 via pantry SDK (from deps spec)
Installing bun.com@1.4.2 via pantry SDK (from this action run)1.4.2 satisfies ^1.4.1. The first run is wrong, and it is wrong in the direction that stops the job.
Note the line above the failure in both runs: bun.com@latest installs successfully in the same step. Only the ranged spec fails.
What the registry serves
https://registry.pantry.dev/binaries/bun.com/metadata.json — the endpoint publishedRegistryVersions fetches:
name: bun.com | latestVersion: 1.4.2 | updatedAt: 2026-10-04T05:06:55.422Z
8 versions:
1.2.23 ['darwin-arm64', 'linux-arm64', 'linux-x86-64']
1.3.11 ['darwin-arm64', 'linux-x86-64']
1.3.12 ['darwin-arm64', 'linux-arm64', 'linux-x86-64']
1.3.13 ['darwin-arm64', 'linux-arm64', 'linux-x86-64']
1.3.14 ['darwin-arm64', 'linux-arm64', 'linux-x86-64']
1.4.0 ['darwin-arm64', 'linux-arm64', 'linux-x86-64']
1.4.1 ['darwin-arm64', 'linux-arm64', 'linux-x86-64']
1.4.2 ['darwin-arm64', 'linux-arm64', 'linux-x86-64']1.4.1 and 1.4.2 each carry a darwin-arm64 build, and latestVersion is 1.4.2. The error reports 143 versions with a newest of 1.4.0, so the range is being matched against a list that is neither this metadata nor its platform-filtered subset. /packages/bun.com/versions returns the same eight.
The darwin-arm64 tarballs resolve for all three versions:
GET binaries/bun.com/1.4.2/darwin-arm64/bun.com-1.4.2.tar.gz -> 302
GET binaries/bun.com/1.4.1/darwin-arm64/bun.com-1.4.1.tar.gz -> 302
GET binaries/bun.com/1.4.0/darwin-arm64/bun.com-1.4.0.tar.gz -> 302Verified source path
packages/action/src/index.ts#L294-L297 states the contract: semver ranges "are passed through to installPackage, which resolves them against the package's known-version list." That known-version list is what disagrees with the registry metadata the same file fetches at L314-L331, and the range is resolved at L393.
The 143-entry count and the 1.4.0 ceiling both point at that list rather than at metadata.json.
What this is not
Each of these was checked and ruled out:
- Not a missing platform build. Shown above:
darwin-arm64exists for 1.4.0, 1.4.1 and 1.4.2 in both the metadata and as fetchable tarballs. - Not the CLI. pantry
0.11.74, the exact build the action downloads, resolves this correctly on darwin-arm64 outside the action.bun.sh: ^1.4.1installs1.4.2, and so does thebun.com: ^1.4.1alias the action resolves through. The defect is on the action/SDK path only. - Not a stale alias mapping.
pantry info bun.shlistsbun.comas an alias; resolving either name directly works in the CLI. - Not transient. The failing run was re-run and failed identically. It reproduced across three separate runs over 30 minutes.
- Not a lock pin.
pantry.lockis gitignored in this repo, so CI resolves purely from the deps spec — which the log confirms (from deps spec).
Why it surfaced now
The same ^1.4.1 pin built successfully on 2026-09-07 (v0.3.1 shipped its signed DMG) and failed on 2026-10-07 with the pin unchanged.
#234, closed 2026-10-03, correctly changed a failed required-Bun install from core.warning + continue into a hard failure. That looks like what turned this from a silent wrong-path into a stopped job. The resolution defect is the older one; #234 made it visible. Raising it here rather than there, since #234's change is right and reverting it would re-hide this.
#216 fixed a closely related shape — a constraint parsed so that every candidate was excluded, with "select the newest matching concrete registry version without falling back outside the requested range" in its contract. This looks like the same family on a stable (non-prerelease) range.
Expected
- A semver range must resolve against the versions the registry publishes for the runner's platform.
^1.4.1and^1.4.0must both select1.4.2given the metadata above. - A range that cannot be satisfied must report the candidate list it actually consulted. "checked 143 versions, newest 1.4.0" named neither the source nor a set matching any registry endpoint, which is what made this take a full afternoon to localise.
- Cover the case where the known-version list is staler than the registry metadata: a range above the stale ceiling but satisfiable from live metadata must resolve, not fail.
Not asking for the bun.sh ceiling to be bumped by hand, or for #234 to be loosened. The ask is that the ranged path consult the same versions the live-metadata path already does.
Workaround
Lower the floor to whatever the stale list's ceiling allows — bun.sh: ^1.4.0 here. It then installs 1.4.2 anyway, which is the clearest statement of the bug.