SwiftMiner 1.36.2
Structural work on the mining loop rather than new behaviour. A miner now describes itself from a single source of truth, waiting no longer drifts, and there are proper profiling hooks for the idle CPU use that has not yet been explained.
One Source of Truth
The recurring cause of contradictory status text is now gone.
- A miner's state was worked out independently in two places: the details label derived it from per-game data covering only prioritised games, while the activity card used the engine's actual session state. Nothing made them agree, which is how a miner came to report Looking for Streams and Drops complete at the same time.
- Both now resolve through one shared state, so they cannot drift apart. Per-game data is used only to name the game, never to decide what the miner is doing — deriving the state from it was the original fault, since a miner working a campaign outside its prioritised list described itself using games it had already finished.
Waiting No Longer Drifts
Approved channels are re-checked on schedule instead of gradually falling behind.
- The wait between scans slept for a fixed period after finishing each round of work, so the time spent checking approved channels pushed every later check further out. A nominal sixty-second re-check was really closer to seventy, compounding across a long wait and slowing how quickly a channel going live was noticed.
- Waiting now runs on a fixed schedule, so the re-check interval is the interval. Cancellation is handled properly rather than being caught and discarded.
Under the Hood
Groundwork for diagnosing what has not been explained yet.
- Adds profiling markers around channel selection and approved-channel checks, so time spent while idle can be attributed properly. Average CPU while mining nothing has been high and the cause is still unknown.
- Adds a state-consistency test suite that fails if any two surfaces ever again claim a miner is both finished and working, covering every session status.
- The internal clock now conforms to Swift's standard clock protocol, so reliability tests keep control of time instead of waiting in real seconds.
- Processes Twitch progress, claims, offline notices, and current-session polling in one lossless ordered queue. This prevents a burst of real-time messages from dropping a claim or overtaking an earlier progress update.
- Uses macOS network-path signals to resume queued Twitch requests immediately after connectivity returns, rather than repeatedly polling while offline.
- Keeps a real watch session responsive under App Nap without preventing normal system sleep, and exports safe DNS, connection, TLS, response, and connection-reuse timings for Twitch requests.
- Registers for macOS MetricKit reports, so system-observed hangs, excessive energy use, and crashes can be identified alongside the live mining diagnostics.
- Prioritised games remain mineable even when their game account still needs linking. Link warnings stay in Pending rather than the actionable queue; Up Next now omits ended and fully-earned campaigns until they are truly schedulable.
- Miner headers now follow the resolved health verdict, so an idle miner no longer shows a vague Attention label because of a stale raw-health flag. Muted Pending rows still explicitly say when a game account is not linked.
- Adds a clear Needs Attention panel to each miner's detail view, explaining the latest failure and offering the right restart or reconnect action. Overview cards are now read-only status summaries, the Miners toolbar can refresh just the selected miner, and priority queues keep a stable layout when global priorities are enabled or disabled.
- Prevents refreshes from overlapping a new watch session, ignores intentionally cancelled heartbeats, and explains a watching-but-not-earning Attention state directly in the miner tab.
- Prepared as SwiftMiner 1.36.2, build 2026073009.