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