OpenRiot v7.9.67 — The Panel Learns to Wait
“Press enter and the panel stopped thinking. The tunnel took ten seconds to stand up and the construct just sat there, motionless, holding a network handshake it had no business holding on the drawing thread. And the picture converter — the tool made to turn PNGs into wallpapers — had turned on the picture shelf and eaten nineteen images it couldn’t find a PNG for. The Turing Police would call the first a ‘blocking I/O anti-pattern’ and the second ‘an unexpected destructive side effect.’ We call them a panel that can’t move and a machine that ate its own face.” — The OpenRiot Crew, v7.9.67
Release Overview
The Control Center stops freezing when you press a key, and
--convert-webp stops deleting images it was never asked to
touch. One is a UI that couldn’t move; the other was data loss.
Total changes: actions moved off the UI thread, a display refresh, key-collision cleanup, cursor clamping, and a destructive converter bug fix.
⏳ The Panel Learns to Wait
Every action in the Control Center ran on the drawing thread.
Press WireGuard and the panel froze while doas wg-quick up
stood the tunnel up and then polled it for up to ten seconds.
Press the update row and it froze on a version check with a
ten-second HTTP timeout. Press screenshot and it froze until
maim returned. The user saw a dead window and assumed the
panel had crashed.
The fix is the shape it should always have had: every action
now runs off the UI thread and the panel refreshes itself the
moment the action finishes. Press WireGuard and the label
flips to [ON] a second or two later — truthful, not guessed.
Nothing blocks the drawing thread. The construct keeps
breathing while the tunnel comes up.
While the panel was open to change, it also started refreshing brightness and HDMI on the same timer as everything else, so the brightness keys and external-display changes land in the panel instead of going stale.
🖼️ The Converter Was Eating the Pictures
openriot --convert-webp was built to turn backgrounds/ and
Locked/ PNGs into WebP and delete the source PNGs. Somewhere
along the way it learned a second trick: it globbed every
*.webp in its target directories and deleted any that had
no matching .png as “stale.”
Two things were wrong with that. First, the normal end state of
a converted file is a .webp with no .png — the tool
deletes the PNG itself. So the converter would have eaten its
own output on the second run. Second, assets/ had been quietly
added to the target list, and every image there — the ones the
README shows you — is a standalone .webp with no PNG. One run
deleted nineteen of them.
The converter now does one thing: it converts the PNGs in
backgrounds/ and Locked/, removes the source PNG, and never
touches anything else. assets/ is out of its reach.
🎯 Small Truths
- Proton Drive hides in Privacy when it isn’t configured, matching the bar module that already auto-hides.
- The faders icon moved to sit beside the gear on the bar and now wears the same color as its neighbors.
- The cursor clamps when a row disappears, so it can’t sit on a button that isn’t there.
- One action key. The
p/r/s/lshortcuts are gone.enteris the only action, solno longer means both “next section” and “lock.” - The binary is called by path, not by hoping
PATHis set in a GUI session. - Tests exist. The Control Center has its first unit tests.
🧾 Files Changed
| File | Change |
|---|---|
source/control/update.go |
Actions run off the UI thread |
(run/refreshMsg); display added to |
|
| the refresh tick; letter shortcuts | |
| removed; cursor clamping | |
source/control/backend.go |
Dead volume helpers removed; |
| absolute binary path; resolution launch | |
source/control/view.go |
Proton auto-hide; footers and Power |
| rows updated | |
source/control/update_test.go |
NEW — section, wrap, clamp tests |
source/imaging/webp.go |
No longer deletes standalone .webp; |
assets/ dropped from its targets |
|
config/polybar/config.ini.tmpl |
Faders icon reordered and re-colored |
README.md |
Release-notes TOC |
🗣️ Final Words
“A panel that can’t move is just a picture. A converter that deletes the pictures is just a shredder with a nice name. The machine is supposed to do the thing it says and nothing it doesn’t, and both of these were doing the opposite. The Turing Police will file their memos about ‘concurrency hygiene’ while we press one key, watch the panel stay alive, and keep every image on the shelf.” — The OpenRiot Crew, v7.9.67