The pinned-version case in the onboarding matrix fails: installing cotal-ai@0.14.1 produces a cotal that reports no version at all.
upgrade node:22-bookworm-slim PASS
pinned-version node:22-bookworm-slim FAIL
installed cotal did not report a version:
29 of 30 cases pass. upgrade, which installs the current version and then upgrades, passes. So install.sh works; what has rotted is specifically the old version this one case pins.
Where it comes from
install/test-matrix.sh:61:
pinned-version~node:22-bookworm-slim~useradd -m -s /bin/bash tester~--version 0.14.1~installs_ok && version_is 0.14.1
The pin is a hardcoded 0.14.1 while the package is now at 0.35.0. The case asserts that installing that exact published version yields a working binary that reports 0.14.1. It installs from the registry, so what it grades is a four-week-old published artifact rather than anything in the tree.
Why nobody saw it
The Installer workflow only fires on changes to install.sh, install/**, or .github/workflows/installer.yml. Its previous run was 2026-08-01, twenty-eight days ago, and it passed. Nothing between then and now touched those paths, so the gate has been dormant while the thing it grades drifted.
It surfaced only because #980 edits .github/workflows/installer.yml and therefore matched the path filter for the first time in a month.
This is not caused by #980
#980 changes eight files:
.github/workflows/changesets.yml
.github/workflows/ci.yml
.github/workflows/installer.yml
.github/workflows/windows.yml
bin/smoke/ci-suites.txt
bin/smoke/mutations/workflow-concurrency.json
bin/smoke/workflow-concurrency.smoke.ts
package.json
Neither install.sh nor install/test-matrix.sh is among them, and its only change to installer.yml is the concurrency block. The failing case runs install.sh inside a Docker container against a published npm package, so nothing in that diff is reachable from it.
What to decide
Two separable questions, and the second is the one that matters more.
The pin itself. A case that hardcodes one old version is asserting that a specific historical release stays installable forever. That may be the intent, in which case the break is real and worth diagnosing. If the intent was only "a --version flag pins what it says", the case should pin a version derived from the registry or from a recent release rather than a literal that ages.
The dormancy. A gate that runs only when its own inputs change cannot notice its subject rotting underneath it, and this one went twenty-eight days. Same shape as #976: the badge was green because nothing ran, not because anything passed. Worth considering a scheduled run, or widening the path filter so a release also exercises it.
Diagnosis of the actual 0.14.1 breakage is not attempted here; this issue records that it is broken, that it is dormant, and that it is unrelated to the PR that revealed it.
The
pinned-versioncase in the onboarding matrix fails: installingcotal-ai@0.14.1produces acotalthat reports no version at all.29 of 30 cases pass.
upgrade, which installs the current version and then upgrades, passes. Soinstall.shworks; what has rotted is specifically the old version this one case pins.Where it comes from
install/test-matrix.sh:61:The pin is a hardcoded
0.14.1while the package is now at 0.35.0. The case asserts that installing that exact published version yields a working binary that reports0.14.1. It installs from the registry, so what it grades is a four-week-old published artifact rather than anything in the tree.Why nobody saw it
The Installer workflow only fires on changes to
install.sh,install/**, or.github/workflows/installer.yml. Its previous run was 2026-08-01, twenty-eight days ago, and it passed. Nothing between then and now touched those paths, so the gate has been dormant while the thing it grades drifted.It surfaced only because #980 edits
.github/workflows/installer.ymland therefore matched the path filter for the first time in a month.This is not caused by #980
#980 changes eight files:
Neither
install.shnorinstall/test-matrix.shis among them, and its only change toinstaller.ymlis theconcurrencyblock. The failing case runsinstall.shinside a Docker container against a published npm package, so nothing in that diff is reachable from it.What to decide
Two separable questions, and the second is the one that matters more.
The pin itself. A case that hardcodes one old version is asserting that a specific historical release stays installable forever. That may be the intent, in which case the break is real and worth diagnosing. If the intent was only "a
--versionflag pins what it says", the case should pin a version derived from the registry or from a recent release rather than a literal that ages.The dormancy. A gate that runs only when its own inputs change cannot notice its subject rotting underneath it, and this one went twenty-eight days. Same shape as #976: the badge was green because nothing ran, not because anything passed. Worth considering a scheduled run, or widening the path filter so a release also exercises it.
Diagnosis of the actual
0.14.1breakage is not attempted here; this issue records that it is broken, that it is dormant, and that it is unrelated to the PR that revealed it.