OpenRiot v8.0.19: Ninety-Nine Is Not a Decimal
“The updater looked at 0.99.0 and 0.100.0 and decided the second one was older. It compared characters, not numbers. The odometer had been rolling backwards for weeks and nobody noticed until the tenths column grew a third digit.” – The OpenRiot Crew, v8.0.19
Release Overview
This release fixes the crush upgrade check and writes down the
Hyprland migration plan. One is a bug that made --crush-upgrade
lie. The other is a map for a room we have not entered yet.
No Hyprland packages are installed by this release. The proposal is documentation: dependencies, phases, keybindings, bar modules, Go backends, and the OpenBSD-specific risks that need answers before any of it ships.
The Decimal That Wasn’t
--crush-upgrade compared version strings with strings.Compare.
Lexicographic order says "9" comes after "1", so 0.99.0
looked newer than 0.100.0. The check returned “up to date” and
the upgrade never ran. The updater was not lazy. It was reading
version numbers as words.
source/installer/crush.go now uses a numeric comparison. The
same comparator already existed in source/update, so it moved
to source/installer and the update package delegates to it.
One implementation, two callers, no drift.
source/installer/version_test.go now locks the behavior:
0.99.0 < 0.100.0, 2.0.0 > 1.99.99, and a missing component
counts as zero.
A version is a count, not a brand. Treat it like text and it will eventually embarrass you in public.
A Map, Not a Door
docs/Hyprland.md is a migration proposal for the desktop that
comes after i3. It inventories the X11 stack, lists what must be
packaged, and splits the work into phases that can each be tested
and rolled back.
The proposal records the current state honestly. Upstream
Hyprland merged its OpenBSD patches in October and November. A
working port exists on the ports mailing list. There is still no
pkg_add hyprland on a stock system, no Lua 5.5 in the local
ports tree, and no Hyprland stack in /usr/ports/wayland.
It also names the ugly parts instead of hiding them. i3 layout
restore has no Hyprland equivalent, so window snapshot gets
disabled on Wayland until a replacement exists. polybar, rofi,
dunst, feh, maim and i3lock all need Wayland counterparts, and
several of those counterparts are not in ports yet. Screen
recording has no settled path, so the proposal defers it rather
than pretending ffmpeg x11grab still works.
The Go code that reads i3 IPC needs a backend interface, not a
pile of hyprctl calls scattered through every package. The
proposal describes that split.
The installer does not switch sessions. The X11 desktop remains the default. The document exists so the next change is a decision, not an improvisation.
🧾 Files Changed
| File | Change |
|---|---|
source/installer/crush.go |
Numeric version comparison for |
--crush-upgrade |
|
source/installer/version.go |
Shared CompareVersions helper |
source/update/versions.go |
Delegates to the shared comparator |
source/installer/version_test.go |
Regression tests for the |
| ninety-nine rollover | |
docs/Hyprland.md |
NEW: migration proposal for Hyprland |
| on OpenBSD | |
install/openriot |
Rebuilt |
🗣️ Final Words
“The updater can count past ninety-nine now. The map for the next desktop is on the table, with the missing pieces marked in pencil. Nothing has moved yet.” – The OpenRiot Crew, v8.0.19