# Distro-Specific Version Comparators ## Module __Libraries ## Status IMPLEMENTED ## Description All three major distro version comparators implemented: dpkg EVR (Debian/Ubuntu), RPMVERCMP (RHEL/Fedora/SUSE), and APK version models. ## Implementation Details - **IVersionComparator**: `src/__Libraries/StellaOps.VersionComparison/IVersionComparator.cs` -- interface with `ComparatorType` property, `Compare(string?, string?)`, and `CompareWithProof(string?, string?)` returning `VersionComparisonResult` (Comparison int, ImmutableArray ProofLines, ComparatorType); `ComparatorType` enum: RpmEvr, Dpkg, Apk, SemVer; result has `IsLessThan`, `IsEqual`, `IsGreaterThan`, `IsGreaterThanOrEqual` helpers - **DebianVersionComparer**: `src/__Libraries/StellaOps.VersionComparison/Comparers/DebianVersionComparer.cs` -- singleton implementing `IVersionComparator`, `IComparer`, `IComparer`; handles epoch:upstream_version-debian_revision with tilde pre-release support; `CompareSegment` implements dpkg semantics: skip non-alphanumeric (except tilde), tilde sorts before everything, digits sort after letters, numeric segments compared by length then lexicographic; `CompareWithProof` generates human-readable proof lines for each comparison step (epoch, upstream version, debian revision) - **RpmVersionComparer**: `src/__Libraries/StellaOps.VersionComparison/Comparers/RpmVersionComparer.cs` -- singleton implementing `IVersionComparator`, `IComparer`, `IComparer`; handles epoch, version, release with tilde support; `CompareSegment` uses rpmvercmp semantics: `SkipToNextSegment` (handle tildes), `CompareNumericSegment` (trim leading zeros, compare by length then lexicographic), `CompareAlphaSegment` (ordinal comparison); `CompareWithProof` with detailed proof lines - **StringVersionComparer**: `src/__Libraries/StellaOps.VersionComparison/Comparers/StringVersionComparer.cs` -- fallback string comparison - **Models**: `src/__Libraries/StellaOps.VersionComparison/Models/` -- `DebianVersion` (Epoch, Version, Revision with TryParse), `RpmVersion` (Epoch, Version, Release with TryParse), `ApkVersion` - **Source**: Feature matrix scan ## E2E Test Plan - [ ] Verify Debian version comparison handles epoch correctly (2:1.0 > 1:2.0) - [ ] Test dpkg tilde pre-release: 1.0~beta < 1.0 - [ ] Verify RPM EVR comparison follows rpmvercmp semantics (numeric vs alpha segments) - [ ] Test RPM tilde support: 1.0~rc1 < 1.0 - [ ] Verify APK version comparison handles APK-specific version schemes - [ ] Test proof line generation provides human-readable comparison steps - [ ] Verify all comparators handle null/empty versions gracefully - [ ] Test `IsGreaterThanOrEqual` for installed >= fixed version checks