SwiftMiner 1.35
Twitch drop claims were landing but being read back as failures, so claim counts, history and notifications all stayed empty. This release repairs the claim path end to end, restores credited watch progress, rebuilds the Miners tab around a macOS Tahoe operator view, and makes campaign data and artwork available much sooner after launch.
Drop Claiming Restored
Claims were reaching Twitch and succeeding, but the reply was misread โ so every claim was reported as a failure and nothing that depends on a claim ever ran.
- Reads Twitch's current
claimDropRewardsmutation response. SwiftMiner had been reading a different, older claim field that this response never contains, so every claim was treated as failed even though Twitch had recorded it. - Still accepts the legacy claim field, so a mixed Twitch rollout cannot break claiming again.
- Recognises Twitch's real successful status, as well as an instance a previous attempt had already claimed, making repeated claim attempts safely idempotent.
- Confirms an otherwise unreported claim across several spaced inventory reads. Twitch's inventory lags a successful claim by a moment, so a single immediate read reported "not claimed" for claims that had in fact landed.
- Surfaces Twitch GraphQL messages, which arrive alongside an ordinary success response and were previously invisible.
- Distinguishes an explicitly empty claim payload โ meaning the reward is not claimable โ from a response whose shape is simply unrecognised, and names the fields Twitch actually returned so a future change is diagnosable rather than silent.
- Restores everything downstream of a recorded claim: claim counters, the earning ledger, claim notifications, Discord claim events, per-drop claim tracking, and clearing the claimed notification from your Twitch inbox.
Claim History Recorded
Claimed rewards are now persisted, so claim statistics report real numbers instead of always reading zero.
- Every claim is written to the reward ledger. Nothing had ever written that table, so Discord's "claims today" and "drops claimed this week" reported zero no matter how much had been claimed.
- Entries are recorded per account. A Twitch benefit identifies a reward rather than a reward per user, so without this a second account claiming the same reward was discarded and its totals came out short.
- Re-recording a reward is a no-op, so claim retries cannot inflate the totals.
Watch Progress Credited
Watch time is reported to Twitch in the form it now expects, so minutes count toward drops again.
- Direct Twitch watch beacons carry the current stream category, client timestamp, live-state and watched-minute fields required for progress to be credited.
- Heartbeat fallback behaviour is preserved, so a miner keeps reporting watch time when the primary beacon path is unavailable.
- Progress is shown as verified watched minutes out of required minutes across every timed drop in a campaign, independent of channel or session.
- Live session timers and progress bars stay consistent between Overview and Miners rather than each keeping its own count.
- The WebUI now uses the same reconciled progress as the app, including minutes retained in the miner's persisted ledger when Twitch omits older drops from its current inventory response. Required minutes and zero-minute rewards are handled consistently too.
Miners Rebuilt for macOS Tahoe
Each miner is now an operator view: who it is, whether it is healthy, and what it is working on next.
- Rebuilds the selected miner around an identity and live-health header, a Now โ Next โ Then summary, a resolved campaign queue, compact subsystem checks and priority controls, with detailed recovery history kept secondary.
- Introduces reusable Tahoe card, raised-surface, section, row-divider and adaptive button treatments, with fallbacks so earlier macOS releases keep a coherent appearance.
- Restyles the miner source list as a plain list with a soft selection pill, replacing the boxed, rule-separated list.
- Moves section headings to sentence case above their grouped content, with larger concentric corners and roomier spacing throughout.
- Shows the linked Discord account avatar in the miner header when one is available, falling back to a local initial.
- Adds a Twitch profile picture option under Settings โบ Appearance, so a miner's header picture can come from its own Twitch account instead of Discord. Either choice falls back to the other service, then to the initial, and resolved pictures are cached so they appear immediately at launch.
- Includes the selected avatar source in settings backups while keeping older backups compatible.
- Gives the current and upcoming campaign matching artwork, sized tall enough that the detail beside it fits within the artwork, with larger queue thumbnails and a vertical fallback at constrained widths.
- Matches the "Up next" heading weight to "Currently mining" now that the two columns share artwork size.
Honest Miner Health
Health now answers whether the miner is well, rather than repeating what it is watching.
- Groups uptime, last poll and the miner's actual health verdict into equal-width header cells with state-specific symbols and colours, readable at narrower window sizes.
- Carries the same status cluster into the Overview banner with fleet-wide values: average uptime and average last poll across the miners each applies to, and a health summary that reads Healthy when every miner is fine and otherwise shows how many are, coloured by the miner most worth attention.
- Reports the health verdict itself โ healthy, idle, recovering, needs attention, unresponsive, authentication required or blocked โ instead of restating the current campaign.
- Aligns health-check statuses and timestamps into fixed columns so values no longer shift as relative times change length.
- Removes duplicated claim and status summaries that repeated information already shown elsewhere on the page.
- Campaign and progress refreshes at launch display Updating with a refresh symbol instead of prematurely reporting Up to Date.
- Waiting and eligibility states are reported honestly, and unlinked, non-prioritised campaigns are no longer presented as mineable.
- The campaign queue no longer retains completed work. Prioritised games that still need account linking remain visible as actionable "Needs setup" rows, while unrelated unlinked campaigns stay out of the queue.
Campaign Visibility and Artwork
Prioritised games stay where you expect them, the dashboard counts reflect reality, and artwork remains sharp and available across launches.
- A prioritised game now stays in the Drops feed for its whole run instead of disappearing once its rewards are all claimed, which read as the game going missing.
- "Campaigns in motion" counts campaigns a miner is actually watching, so a campaign one account has finished is still counted while another account continues mining it.
- Prioritised artwork stays visually stable when returning to Overview instead of replaying its placeholder crossfade.
- Restores Twitch artwork for prioritised Overview cards from the launch cache and shares one persistent artwork cache with Drops, so game images survive relaunches.
- Requests sharp 600ร800 Twitch box art from both templated and fixed-size artwork URLs instead of stretching the soft 120ร160 response.
- Uses Twitch artwork by default and rejects Steam's successful-but-blank grey placeholder files, including old placeholders already on disk, so titles such as THE FINALS and Battlefield 6 no longer lose real artwork.
- The Clear and Redownload Artwork action now clears the shared persistent image cache as well as stale preference links.
Performance
Smoother scrolling on the Miners tab, and fewer wasted redraws and requests.
- Removes a translucent backdrop from the scrolling miner header that was re-sampled on every frame while scrolling.
- Builds off-screen detail sections only as they are reached, matching how the Drops feed already worked.
- Resolves each source-row activity snapshot once per render instead of repeating the same work for every field that reads it.
- Refreshes the minute-level uptime display every 30 seconds rather than every second.
- Only requests Discord display names when a miner is actually linked, and no longer lets an unreachable companion service delay opening the Miners tab.
- Restores campaign details, account-link state and recent progress from disk while the first live refresh runs, avoiding the cold-launch details fan-out without letting cached data drive mining.
- Keeps persistent campaign-detail data isolated when a client changes Twitch accounts, and invalidates pre-claim details on disk immediately after a successful claim.
- Centers animated refresh symbols on their visible glyph so they rotate in place instead of orbiting.
Illustrated Help and Website
The website and help centre now show the current app instead of relying on old or text-only guidance.
- Adds light and dark window screenshots for Overview, Miners, Drops, Activity Log, Discord, Game Rules and every Settings pane, placing 36 contextual illustrations across all 20 help articles.
- Refreshes the landing-page screenshots, adds the Discord view and updates the group overview to show a real five-miner fleet.
- Updates image dimensions, alternative text, README previews and screenshot cache versions so returning visitors receive the new captures.
Internals
Coverage for the paths that failed silently, so these regressions surface in tests rather than in production.
- Adds claim regression coverage for the current and legacy response fields, real success statuses, already-claimed instances, unrecognised payloads and GraphQL errors โ written from real Twitch responses rather than from the parser, which is why the original fault went unnoticed.
- Adds coverage for campaign ordering, cumulative progress, WebUI parity, eligibility filtering, startup status, persistent campaign and artwork caches, account isolation, avatar fallback and watch-beacon payload parity.
- Adds a DEBUG-only multi-miner fixture for authentic fleet screenshots; it is compiled out of Release builds.
- Removes unreachable miner views left behind by the detail rebuild.
- Updates SwiftMiner to version 1.35 build 2026072814.