OpenRiot v7.9.46 — The Cancel Button Gets a Memory Wipe
“The machine had a cancel button. It worked. You hit Escape, the clone stopped, the screen said ‘cancelled by user.’ Clean. Done. Then you started another clone — same drive, same target, new attempt — and the machine immediately said ‘cancelled by user’ again. Before rsync had moved a single byte. Before the progress bar had rendered. The cancel flag from the last operation was still sitting in memory like a grudge. The machine wasn’t broken. It was holding a grudge against a backup you’d already forgiven. We wiped the slate. We taught the cancel flag to die with the operation that spawned it. While we were in there, we taught the crypto tracker to stop telling everyone to sell to USD when they were still trying to grow. The Turing Police would call one of these a ‘state management regression’ and the other a ‘risk tolerance misconfiguration.’ We call them both bugs and fixed them.” — The OpenRiot Crew, after the second clone actually started, v7.9.46
Release Overview
Two bugs. Two seams where the machine was remembering the wrong thing. One in the Migrate TUI, one in the crypto tracker. Both involved state that should have been reset and wasn’t.
The Migrate TUI’s cancel flag was immortal. Once you canceled a backup or clone, the flag stayed set until the program exited. Start a new operation? “cancelled by user.” The machine had forgiven nothing. It was holding a grudge against a button you pressed ten minutes ago.
The crypto tracker had the opposite problem. It was too eager to let go. When your portfolio was properly balanced — three coins at roughly equal weight — the rotation algorithm couldn’t find a candidate that passed its concentration filters. Every coin was over 15% of the portfolio. Every coin failed the check. The fallback was “→ USD.” The machine was telling you to cash out when you’d just arrived at the allocation you wanted.
Both fixed. Plus a backup icon, a style guide for future release notes, and the usual README housekeeping.
🚫 Migrate TUI: The Cancel Flag Amnesia Fix
When you canceled a Full Backup or System Dump, the TUI set
m.canceling = true and showed the error screen. Correct. But
when you started a new backup — selecting the same or a
different drive — the flag was still true. The new operation
launched, the progress screen appeared, and then immediately:
“ERROR: cancelled by user.” The goroutine hadn’t even started.
The fix resets two fields in handleSelection() when starting a
new dump or full backup:
m.canceling = false
m.message = ""
The cancel flag now dies with the operation that spawned it.
Start a new operation, get a clean slate. The Turing Police
would have added a ResetState() method with a mutex and a
callback. We added two lines.
🎯 Crypto Tracker: The 2.5× Rule
The crypto tracker’s findRotationTarget function picks the best
coin to rotate into — lowest RSI, not overbought, not already
concentrated. Sensible. But when your portfolio is balanced (three
coins at ~33% each), every coin is >15% of the portfolio. The
concentration filter rejects every candidate. The fallback: “→ USD.”
The fix introduces a threshold: 2.5× your original investment.
findRotationTarget now receives the total portfolio value and
the sum of all (held × entry). Below 2.5×, the machine never
suggests USD. When the strict concentration filters reject every
candidate, a second pass runs with relaxed rules — no 15% cap,
no 35% concentration check. It finds the lowest-RSI coin among
all crypto holdings and points there.
Above 2.5×, the old behavior returns. USD is a valid rotation target. You’ve earned the right to take chips off the table.
The threshold is dynamic. A portfolio with $50k original investment hits the line at $125k. A $143k portfolio hits at $358k. No hardcoded magic number. The machine respects your starting point.
📚 Docs & Assets
-
docs/Release-Style-Guide.md— A 91-line procedure and style guide for writing future release notes. Covers version numbering, discovery process, voice study, structure, and the rules that make the notes feel like they belong to the same universe. The Turing Police would have made it a Confluence page with a review workflow. We made it a Markdown file. -
assets/backup.webp— A new icon for the backup system. Small. Sharp. Ready for wherever the Migrate TUI needs it. -
README.md— TOC updated with v7.9.44 and v7.9.45 entries.
🧾 Files Changed
| File | Change |
|---|---|
source/migrate/model.go |
FIX — Reset canceling flag and |
message when starting a new dump or |
|
| full backup; prevents stale cancel state | |
| from immediately killing the next operation | |
source/crypto/crypto.go |
FIX — findRotationTarget takes |
totalValue and originalInvestment; |
|
| when below 2.5× original, relaxed fallback | |
| scan finds best crypto target instead of | |
defaulting to USD; calculateSellLimit |
|
computes totals from items and passes |
|
| them through | |
docs/Release-Style-Guide.md |
NEW — Procedure and style guide for |
| writing future release notes | |
assets/backup.webp |
NEW — Backup system icon |
README.md |
UPDATED — TOC entries for v7.9.44 and |
| v7.9.45 | |
install/openriot |
UPDATED — Compiled binary with all fixes |
🗣️ Final Words
“The second clone started. No cancel flag. No phantom error. The progress bar filled. The boot blocks installed. The drive was bootable. The crypto tracker pointed to XMR. Then BTC. Then back to ZEC. It never mentioned USD. It never assumed you were done. It just did the math and kept quiet. The cancel button had finally learned to let go. The Turing Police would have shipped the stale cancel flag as a ‘safety interlock.’ We shipped the fix and called it a memory wipe.” — The OpenRiot Crew, after the second clone completed without a single complaint, v7.9.46