# RPM EVR Version Comparison ## Module __Libraries ## Status IMPLEMENTED ## Description RPM Epoch:Version-Release parsing and rpmvercmp-equivalent comparison for RHEL/Fedora/SUSE packages. Implements `IVersionComparator` with `ComparatorType.RpmEvr`, including segment-based comparison with numeric-first ordering, alpha segment comparison, tilde pre-release semantics, and `CompareWithProof` generating human-readable proof lines. ## Implementation Details - **RpmVersionComparer**: `src/__Libraries/StellaOps.VersionComparison/Comparers/RpmVersionComparer.cs` -- singleton (`Instance`); implements `IVersionComparator` with `ComparatorType.RpmEvr`; `Compare(left, right)` returns `VersionComparisonResult` with `ProofLines`; `CompareWithProof(left, right)` generates readable proof; internal methods: `ParseEvr(version)` parses `epoch:version-release` format, `CompareRpmVersion(a, b)` applies rpmvercmp algorithm, `SkipToNextSegment(s, ref pos)` advances past separators, `CompareNumericSegment(a, b, ref posA, ref posB)` compares digit runs (longer numeric wins, then lexicographic), `CompareAlphaSegment(a, b, ref posA, ref posB)` compares alpha character runs - **IVersionComparator**: `src/__Libraries/StellaOps.VersionComparison/IVersionComparator.cs` -- interface defining `ComparatorType` property, `Compare(left, right)` returning `VersionComparisonResult`, `CompareWithProof(left, right)` returning proof lines - **ComparatorType**: `src/__Libraries/StellaOps.VersionComparison/IVersionComparator.cs` -- enum: `RpmEvr`, `Dpkg`, `Apk`, `SemVer` - **VersionComparisonResult**: `src/__Libraries/StellaOps.VersionComparison/IVersionComparator.cs` -- record with `Comparison` (int), `ProofLines` (IReadOnlyList), `Comparator` (ComparatorType) - **Source**: Feature matrix scan ## E2E Test Plan - [ ] Verify RpmVersionComparer correctly parses epoch:version-release format - [ ] Test rpmvercmp numeric segment comparison (longer digit run wins) - [ ] Verify alpha segment comparison follows RPM ordering rules - [ ] Test tilde pre-release semantics (tilde sorts before everything including empty) - [ ] Verify epoch comparison takes priority over version and release - [ ] Test CompareWithProof generates human-readable proof lines for each comparison step - [ ] Verify singleton pattern (RpmVersionComparer.Instance returns same reference) - [ ] Test edge cases: missing epoch (defaults to 0), missing release, empty segments