SwiftMiner 1.34.5
This reliability release coordinates every miner's Twitch traffic, bounds automatic recovery and makes ambiguous claim outcomes safe.
Trustworthy Earning State
Progress and earning decisions now come only from stable identities and authoritative movement.
- The earning ledger uses stable Twitch account IDs and counts only per-drop movement observed after its initial baseline.
- Implausible progress jumps are bounded by monotonic elapsed time and reported immediately; unchanged or stale samples cannot shorten the plausibility window.
- Forced inventory refreshes can no longer silently return stale disk state, while offline UI reads continue to use explicitly labelled cached snapshots.
- External claims are reconciled using every benefit ID and merged into active campaign state so the same claim cannot repeatedly reset recovery.
Resilient Watch Sessions
Channel selection, event delivery and worker supervision now fail over deliberately.
- PubSub reconnects are single-flight, cancellation-safe and jittered, preserve subscriptions and cannot resurrect after an intentional disconnect.
- Repeated failure of both heartbeat transports ends and replaces the watch session instead of leaving it falsely healthy.
- Unverified fallback channels receive a short probation and cooldown, while a later successful verification can use the channel immediately.
- Automatic recovery is enabled by default and covers single-account installations and simultaneous peer silence with a conservative local watchdog.
Correct Retry Semantics
Temporary Twitch responses can no longer be misreported as fatal miner failures.
- HTTP 429 now follows the recoverable rate-limit path instead of being surfaced as a fatal generic API error.
- HTTP 408, 425 and temporary 5xx responses retry with bounded exponential backoff and jitter.
- Retry-After supports both numeric seconds and HTTP dates, and cancelled miners stop retrying immediately.
Coordinated Recovery
Multi-account installations now respond to outages as one system rather than a collection of independent request loops.
- A process-wide request coordinator limits aggregate Twitch traffic and shares server-directed cooldowns across accounts.
- When macOS reports no usable network path, new Twitch requests pause instead of triggering repeated channel changes, authentication refreshes and worker restarts.
- Supervisor refresh, restart and authentication stages have monotonic deadlines, so a stuck stage cannot block all future health checks.
- Active mining polls, candidate cooldowns, claim checks and supervisor sleeps are monotonic and cancellation-aware.
Safer Drop Claims
A lost response no longer means SwiftMiner assumes a successful claim failed.
- Ambiguous claim results are reconciled against a fresh authoritative inventory using the drop's complete benefit-ID set.
- Confirmed claims update local progress normally even if the original response was lost.
- Network, rate-limit, authentication and rejected claims are classified separately; transient failures use per-drop exponential cooldowns rather than hammering Twitch.
Failure Testing
Reliability paths are exercised in combinations, not only as isolated unit failures.
- Added deterministic scenarios covering an offline start followed by 503 and 429 responses, shared cooldowns between clients, recovery timeout cancellation and lost claim responses.
- Added repeated multi-client fault cycles to catch deadlocks, request stampedes and retry-state leaks.
- Updates SwiftMiner to version 1.34.5 build 2026072614.