OpenRiot v7.9.47 — The Machine Stops Guessing

“The crypto tracker told you to sell ZEC at 504. ZEC was at 490. It had been at 550 three months ago. It had been at 350 three months before that. The machine knew the full range — it had 90 days of closing prices in memory — but the sell limit was a fixed formula: entry times 1.20. As if the market cared what you paid. As if a coin that had already rallied past the number should still be sold at the number. We gave the machine 180 days of data. We taught it to find the high and the low. We taught it to measure where the current price sits in that range and set a target that makes sense — near the top if we’re already close, further out if we’re still climbing. The sell limit is no longer a fixed number. It’s a map of where the coin has been and where it might go. The Turing Police would use a 20% trailing stop and call it ‘quantitative.’ We used six months of candles and called it common sense.” — The OpenRiot Crew, after ZEC’s sell limit moved from $504 to $648, v7.9.47


Release Overview

Three fixes. Three places where the machine was making decisions with less information than it actually had.

The crypto tracker had 90 days of price history but ignored almost all of it when setting sell limits — a fixed entry × 1.20 formula that didn’t care whether the coin was at a 6-month low or a 6-month high. The NZBGet launcher had no idea whether a browser tab was already open, so it opened a new one every time you clicked. The softraid layer had a device lookup that failed on partition letter suffixes, leaving encrypted drives invisible to the detach sequence.

All three are fixed by giving the machine more context. Not more code. More awareness of what it already knows.


📊 Crypto: Dynamic Sell Limits

The old formula was entry × 1.20, capped at the 90-day high × 0.80. For ZEC at $490 with a $420 entry, that was $504. The market was past that number before the machine finished calculating it.

The new system:

  1. Fetches 180 days of OHLC data instead of 90. Six months of candles. Enough to see the full range of the last cycle.

  2. Finds the 6-month high and low. Then calculates where the current price sits in that range — a position from 0.0 (at the absolute low) to 1.0 (at the absolute high).

  3. Sets the target based on position:
    • Upper 25% (near highs): target = 6-month high × 1.05
    • Middle 50%: target = 6-month high × 0.95
    • Lower 25% (near lows): target = 6-month high × 0.75
  4. Guardrails. Floor at current × 1.10 (never set a sell limit below 10% above current price). Ceiling at current × 1.50 (never set a target so far out it’s irrelevant).

Real-world effect: ZEC went from $504 → $648. BTC went from $65,997 → $70,257. XMR barely moved ($348 → $349) because it’s been range-bound and the math reflects that. The sell limits now tell you something about where the coin could go, not just where you bought it.

The Turing Police would have hardcoded a 20% trailing stop. We used six months of price history and a position-based formula.


🧲 NZBGet: Tab Detection

The NZBGet launcher (openriot --nzbget) fired up Firefox and navigated to http://127.0.0.1:6789. Every time. Even if the tab was already open. Even if you’d clicked it three times in a row because the page was loading slowly and you weren’t sure the first click registered.

New: firefoxHasTab() in helpers.go. It reads the X11 root window’s _NET_CLIENT_LIST, finds every Firefox window, checks the title for “nzbget,” and returns true if a match exists. If the tab is already open, the launcher fires a dunst notification (“Already open in browser”) and returns. No duplicate tab. No browser window stack.

The Turing Police would have used a browser extension with telemetry. We used xprop and a regex.


💾 Softraid: Better Device Detection

Two improvements to the softraid layer:

Partition letter suffixes. findRaidDevice previously did exact string matching when looking up physical chunks. If the device was sd2d and the softraid table had sd2, it wouldn’t match. Now it checks for partition letter suffixes — sd2 matches both sd2 and sd2d — so the lookup works regardless of how the kernel names the partition.

Dmesg fallback. When the primary softraid lookup fails entirely, a new findVirtualForChunk function scans dmesg output for virtual devices on the softraid bus. It finds all candidates, filters out mounted devices and the root drive, and only returns a result if there is exactly one unambiguous match. No guessing. No blind detachment of every volume on the bus. Surgical, or not at all.

These two fixes mean the detachSoftraidChunk sequence — which runs when you eject an encrypted external drive — works on more hardware configurations without manual intervention.


🧾 Files Changed

File Change
source/crypto/crypto.go FIX — OHLC fetch increased from 90
  to 180 days; sell limit calculation
  replaced with position-based 6-month
  range formula (high × multiplier based
  on current position in range); floor
  at current × 1.10, ceiling at
  current × 1.50
source/commands/commands.go FIX — NZBGet launcher checks for
  existing Firefox tab before opening
source/commands/helpers.go NEWfirefoxHasTab() scans X11
  window titles for duplicate browser tabs
source/disk/backend.go FIXfindRaidDevice handles
  partition letter suffixes (e.g., sd2
  matches sd2d)
source/disk/update.go NEWfindVirtualForChunk scans
  dmesg for softraid virtual devices as
  fallback when primary lookup fails;
  strict single-candidate-only logic
install/openriot UPDATED — Compiled binary with all
  fixes

🗣️ Final Words

“The sell limit moved. ZEC went from 504 to 648. The machine wasn’t guessing anymore — it was reading the chart. The NZBGet launcher checked the browser, found the tab already open, and stayed quiet. The softraid layer found the encrypted drive on the first try, no dmesg scavenger hunt required. The machine didn’t get faster. It didn’t get more features. It got smarter about what it already knew. The Turing Police would have added a machine learning model. We added six months of candles, a regex, and a partition letter suffix check.” — The OpenRiot Crew, after the sell limits finally made sense, v7.9.47