Project
cortex
Description
The update version comparator in cortex-update does not implement semver prerelease precedence correctly. It parses versions into (major, minor, patch, prerelease_string) and compares tuples lexicographically. This makes "" < "beta", so 1.0.0 is treated as older than 1.0.0-beta, which is the opposite of semver rules.
Error Message
Debug Logs
System Information
Version: 0.1.0
## Operating System
OS: Ubuntu 24.04.3 LTS
Kernel: 6.6.87.2-microsoft-standard-WSL2
Arch: x86_64
## Hardware
CPU: Intel(R) Core(TM) i9-14900K (32 cores)
RAM: 31 GB
GPU 0: NVIDIA GeForce RTX 4060, 8188 MiB
## Build Environment
Rust: rustc 1.93.1 (01f6ddf75 2026-02-11)
Target: x86_64
Screenshots
No response
Steps to Reproduce
- Point update checks to a test release feed where the latest beta is
1.0.0-beta.
- Run Cortex from stable
1.0.0 and check updates on beta/prerelease channel.
- Observe update logic treats the prerelease as newer than stable and can report an update/downgrade incorrectly.
Expected Behavior
Semver precedence should be respected: 1.0.0 (stable) is newer than 1.0.0-beta* prereleases.
Actual Behavior
Comparator marks stable as older than prerelease when major/minor/patch are equal.
Additional Context
Code path: src/cortex-update/src/version.rs (compare_versions / parse_version).
Tuple comparison currently uses String prerelease ordering directly, which reverses semver behavior for stable vs prerelease.
Project
cortex
Description
The update version comparator in
cortex-updatedoes not implement semver prerelease precedence correctly. It parses versions into(major, minor, patch, prerelease_string)and compares tuples lexicographically. This makes"" < "beta", so1.0.0is treated as older than1.0.0-beta, which is the opposite of semver rules.Error Message
Debug Logs
System Information
Screenshots
No response
Steps to Reproduce
1.0.0-beta.1.0.0and check updates on beta/prerelease channel.Expected Behavior
Semver precedence should be respected:
1.0.0(stable) is newer than1.0.0-beta*prereleases.Actual Behavior
Comparator marks stable as older than prerelease when major/minor/patch are equal.
Additional Context
Code path:
src/cortex-update/src/version.rs(compare_versions/parse_version).Tuple comparison currently uses
Stringprerelease ordering directly, which reverses semver behavior for stable vs prerelease.