Skip to content

Installer matrix pinned-version case is broken and the gate has been dormant 28 days #994

Description

@davidfarah2003

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.

Activity

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions