You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Wire scripts/package-version.sh's optional PREV_VERSION second argument into .github/workflows/ensure-version-increment.yml so the #540 cross-release MSI ordering guard
actually runs on every PR, instead of sitting as dead capability.
Confirmed via git show origin/main:.github/workflows/ensure-version-increment.yml on
2026-09-03 at 2b5f4daf (current main tip) — the gap is real, not stale.
Done condition (finite, checkable)
ensure-version-increment.yml resolves the latest stable (non-draft, non-prerelease) GitHub
release version and passes it as PREV_VERSION to scripts/package-version.sh in the Check version increment job.
A PR whose head version's MSI tuple compares LOWER than that resolved PREV_VERSIONfails
this required check, proven by an actual CI run (not a local script invocation).
A PR with a legal increment still passes through the same job, proven by an actual CI run.
The bootstrap case (no stable release resolvable) is handled explicitly, not silently swallowed.
Skill / reference
CLAUDE.md §2.4a (required-check semantics, check-merge-preconditions.sh), §1.10 (fail-closed vs
fail-open judgement — an API-read failure must never be conflated with "the thing being checked is
bad"). dig-ecosystem-workflow skill for the branch/PR mechanics.
Effort
Low-medium: mechanical CI wiring against an already-designed and already-tested script contract; the
only real judgement call is the bootstrap-case fail-open/fail-closed split, which is scoped and
argued in the implementing PR rather than escalated.
Evidence required
Two real GitHub Actions run URLs against a real PR: one showing the check fail on a deliberately
cross-release-violating version bump with the guard's own error text in the log, one showing it pass on a legal bump — both through the actual workflow path, not package-version.sh invoked
standalone (that would repeat the exact mistake this ticket exists to fix: proving the script works
in isolation says nothing about whether CI ever calls it that way).
Closed by the PR that does this work, via Closes #<this>.
Task
Wire
scripts/package-version.sh's optionalPREV_VERSIONsecond argument into.github/workflows/ensure-version-increment.ymlso the #540 cross-release MSI ordering guardactually runs on every PR, instead of sitting as dead capability.
Context
2b5f4daf) addedPREV_VERSIONtoscripts/package-version.sh: given the previous stablerelease, it folds it through the same MINOR-overflow mapping (Version scheme has exhausted the MSI minor field: every release from 0.256.0 ships with no Windows installer #521/fix(release)!: the 0.x version scheme hits the MSI 255 ceiling -- 3 legal versions left, 6 PRs already unbuildable #522) and refuses to emit a
version whose MSI
(major, minor, build)tuple compares LOWER thanPREV_VERSION's — the guardfor the specific hazard where a real
MAJORbump (e.g.0.511.0->1.0.0) can compare LOWERunder
msiexec's numeric ordering than an already-shipped overflow-carried version, abortingevery user's upgrade with
DowngradeErrorMessage.3584e2c9) made the script's single-argument validation a required check inside theCheck version incrementjob.ensure-version-increment.yml's final step callsbash "$SCRIPT" "$HC"— one argument only.PREV_VERSIONis declared, tested(
scripts/tests/package-version.test.sh), and documented in the script's own header, but nocaller in CI ever supplies it. The guard MSI mapping: a carried MINOR-overflow can outrank a later real 1.0.0, breaking upgrade at the 1.x transition #540 exists to add cannot fire.
git show origin/main:.github/workflows/ensure-version-increment.ymlon2026-09-03 at
2b5f4daf(currentmaintip) — the gap is real, not stale.Done condition (finite, checkable)
ensure-version-increment.ymlresolves the latest stable (non-draft, non-prerelease) GitHubrelease version and passes it as
PREV_VERSIONtoscripts/package-version.shin theCheck version incrementjob.PREV_VERSIONfailsthis required check, proven by an actual CI run (not a local script invocation).
Skill / reference
CLAUDE.md §2.4a (required-check semantics,
check-merge-preconditions.sh), §1.10 (fail-closed vsfail-open judgement — an API-read failure must never be conflated with "the thing being checked is
bad").
dig-ecosystem-workflowskill for the branch/PR mechanics.Effort
Low-medium: mechanical CI wiring against an already-designed and already-tested script contract; the
only real judgement call is the bootstrap-case fail-open/fail-closed split, which is scoped and
argued in the implementing PR rather than escalated.
Evidence required
Two real GitHub Actions run URLs against a real PR: one showing the check fail on a deliberately
cross-release-violating version bump with the guard's own error text in the log, one showing it
pass on a legal bump — both through the actual workflow path, not
package-version.shinvokedstandalone (that would repeat the exact mistake this ticket exists to fix: proving the script works
in isolation says nothing about whether CI ever calls it that way).
Closed by the PR that does this work, via
Closes #<this>.