install.sh: rc-scheme releases (vX.Y.Z-rc.N) rejected by pin validator; unpinned resolution sorts rc.1 as 0.1.0 #15

Closed
opened 2026-09-08 23:15:17 +00:00 by jsutter · 1 comment
Owner

Observed during the v4.1.12-rc.1 install (2026-09-08): install.sh cannot install rc-scheme releases.

Pinned form: the pin validator accepts only ^vX.Y.Z(-rcN)?$ — no dot-suffix on the rc segment — so v4.1.12-rc.1 is rejected.

Unpinned form: the "latest" resolution splits the tag on - via awk $NF, so dito-v4.1.12-rc.1 sorts as version 0.1.0 and an unpinned install would silently pick v4.1.11.

dito's own self-update (real semver::Version::parse, no pre-release exclusion) worked and is the sanctioned path for rc installs.

Ask: semver-aware resolution in the unpinned path + the pinned-form validator accepting -rc.N.

Observed during the v4.1.12-rc.1 install (2026-09-08): install.sh cannot install rc-scheme releases. **Pinned form:** the pin validator accepts only `^vX.Y.Z(-rcN)?$` — no dot-suffix on the rc segment — so `v4.1.12-rc.1` is rejected. **Unpinned form:** the "latest" resolution splits the tag on `-` via awk `$NF`, so `dito-v4.1.12-rc.1` sorts as version `0.1.0` and an unpinned install would silently pick v4.1.11. dito's own `self-update` (real `semver::Version::parse`, no pre-release exclusion) worked and is the sanctioned path for rc installs. **Ask:** semver-aware resolution in the unpinned path + the pinned-form validator accepting `-rc.N`.

Fixed on main (75762ec, merged from fix/15-16-rc-installs): resolve_latest_tag ranks (major, minor, patch, is-stable, rc-number) with zero-padded numeric compare — rc.11 > rc.9 > rc.1, stable beats its own rcs, a newer-patch rc outranks an older stable (the exact silent-pick bug). 30 parsing assertions + 3 E2E runs against a stubbed forge prove the downloader requests releases/download/dito-v4.1.12-rc.11/... exactly; stable-only sets resolve byte-identically. NOTE: unpinned now installs the newest rc when it outranks every stable (semver-correct); if unpinned should hard-prefer stables, the is-stable key moves ahead of patch — one line, flagged for the Operator.

Fixed on main (75762ec, merged from fix/15-16-rc-installs): resolve_latest_tag ranks (major, minor, patch, is-stable, rc-number) with zero-padded numeric compare — rc.11 > rc.9 > rc.1, stable beats its own rcs, a newer-patch rc outranks an older stable (the exact silent-pick bug). 30 parsing assertions + 3 E2E runs against a stubbed forge prove the downloader requests releases/download/dito-v4.1.12-rc.11/... exactly; stable-only sets resolve byte-identically. NOTE: unpinned now installs the newest rc when it outranks every stable (semver-correct); if unpinned should hard-prefer stables, the is-stable key moves ahead of patch — one line, flagged for the Operator.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
deepnet/dit-releases#15
No description provided.