OpenRiot v7.9.12 — The One That Stopped Lying to Itself

“The WiFi said it was connected. The packets disagreed.” — The OpenRiot Crew, discovering that someone was rewriting the route table behind the tunnel’s back.


Release Overview

v7.9.11 fixed the boot sequence: polybar waits for i3 IPC before launching, the xenodm greeter mirrors displays, and sct replaced redshift — a daemon that phoned home to NYC for sunrise data it never used. v7.9.12 continues the cleanup. The WireGuard toggle no longer breaks the internet. The update checker is quieter. And your transmission settings survive reinstall.


WireGuard: Trust the Tool

Start() and Stop() were calling ReconnectWifi() after every wg-quick operation. That ran /etc/netstart on the wireless interface — a blunt instrument that flushed wg-quick’s carefully constructed route table (0.0.0.0/1, 128.0.0.0/1, and the endpoint-specific route via the LAN gateway) and replaced it with a generic DHCP default. The tunnel came up, then the routes vanished. Traffic leaked. Users toggled back off, waiting for the dust to settle, toggled back on — repeat.

The fix: remove the meddling. Start() is now pure wg-quick up. Stop() is pure wg-quick down. We also added Restart() — Stop, 500ms sleep, Start — for the clean WiFi+VPN reconnect path. The nmtui module uses it when switching networks.

File Change
source/wireguard/wireguard.go Removed ReconnectWifi()
  calls from Start/Stop; added
  Restart() for clean reconnects
source/nmtui/update.go Uses wireguard.Restart() on
  WiFi reconnect instead of
  inline stop/sleep/start

Privacy: Quieter Update Checks

The --update-status polybar module hit openriot.org/VERSION every 3600 seconds with no opt-in and showed ? when offline. Both were visually noisy. The interval is now 14400 seconds (4 hours). When offline, the bar shows the up-to-date arrow instead — ? is reserved for actual unknown states.

File Change
config/polybar/config.ini.tmpl interval = 14400
source/update/update.go Offline state returns
  noUpdateIcon instead of ?

Config Preservation

Reinstalling OpenRiot overwrote ~/.config/transmission/ settings.json with defaults, wiping ration limits, port bindings, and the like. preserve_if_exists: [settings.json] now skips the copy if the file already exists. User configs survive reinstall.

File Change
install/packages.yaml Added preserve_if_exists for
  transmission settings.json

Since v7.9.11 (Recap)

Polybar Clickability

Removed the sleep 5; polybar main race condition. i3 confirms its IPC socket is ready before polybar starts. Removed soft restart (polybar-msg cmd restart) which reused a broken window hierarchy.

File Change
config/i3/config IPC-gated polybar launch;
  removed soft restart

xenodm Greeter Display Mirroring

The login widget now renders on all connected outputs via --same-as. No more contorting toward a closed laptop. xconsole is gone; the background is solid dark.

File Change
config/xenodm/Xsetup_0 NEW — mirrors displays
install/packages.yaml Install with .orig backup

Night Light: sct, Not redshift

sct 4000 sets the temperature in-process. No fork, no background job, no NYC sunrise API. Get() reads a file. Nothing else.

File Change
source/nightlight/nightlight.go sct replaces redshift daemon
source/commands/helpers.go Symmetric toggle + notify
install/packages.yaml sct-0.5 replaces redshift

Games

Zero A.D. and Extreme Tux Racer added. Cleaned commented-out entries.

File Change
config/rofi/games.txt Added Zero A.D., Tux Racer
install/packages.yaml 0ad + tuxracer packages

Test Infrastructure

TMPDIR=$(HOME)/.tmp on all test targets. OpenBSD mounts /tmp with noexec; Go test compiles there. Permission denied. Fixed.

File Change
Makefile TMPDIR for tests; column -t

Documentation

Nine stale docs deleted. Lessons merged into AGENTS.md. Colors.md moved to Proposals/.

File Change
docs/* Deleted 10 stale files
Proposals/Colors.md Moved from docs/

🧾 Files Changed

File Change
source/wireguard/wireguard.go Removed ReconnectWifi();
  added Restart()
source/nmtui/update.go Uses wireguard.Restart()
source/update/update.go Offline → up-to-date icon
config/polybar/config.ini.tmpl Interval 3600 → 14400
install/packages.yaml preserve transmission settings

🗣️ Final Words

“v7.9.10 made sure your packets went to the right router. v7.9.11 made sure you could click the bar that told you they arrived. v7.9.12 makes sure they don’t disappear when you turn the tunnel on.”

The packets were always right. The routes were the liar.

Ship it.