SwiftMiner Release Notes
Recent Sparkle update history
π Version 1.29.5
- Adds an Override Stream action to miner cards so a miner can be pinned to a specific Twitch streamer.
- Keeps the override active until that streamer goes offline, while still verifying the stream is advertising an eligible drop before watching.
- Fixes the web sign-in page on mobile browsers so the animated background and login card fill the visible browser viewport, including Safari's dynamic toolbar area.
- Replaces the plain web dashboard loading placeholder with an animated SwiftMiner loading state, rotating status text, a moving meter, and skeleton cards for slower dashboard starts.
- Respects reduced-motion preferences for the new loading animation.
π Version 1.29.4
- Changes OAuth token exchange and user fetch failure status codes from 502 to 400. This prevents reverse proxies (like Cloudflare or Nginx) from intercepting the failure and replacing it with a generic "Bad Gateway" page, ensuring the user can see the actual error page.
- Implements verbose logging for OAuth failures, writing raw Twitch/Discord API response payloads and HTTP status codes to OSLog and the Activity Log (audit callback).
- Includes the new standalone interactive Agent Dashboard prototype in the
AgentDashboard/ directory.
π Version 1.29.3
- Excludes campaigns classified as `.irrelevant` (not prioritized and not linked to any active game accounts) from `feedCampaigns` in `CampaignView`. This prevents unprioritized and unlinked public Twitch campaigns from cluttering the Drops tab.
π Version 1.29.2
- Adds an optional web dashboard for browser-based miner visibility, including local operator sign-in and a Discord-user view scoped to the signed-in user's own mined Twitch account.
- Adds SwiftBot-backed Discord sign-in with signed assertions, replay protection, local-only operator login, Twitch sign-in, session audit events, and self-service Twitch linking from the dashboard.
- Adds an Up Next campaign browser with box art, start/end timing, issue buttons, and one-tap prioritising for linked miners.
- Adds polished web sign-in assets, app icons, favicons, dashboard timing refinements, loading fixes, and a small salute easter egg on the missed Drops tagline.
- Adds SwiftMiner campaign events for SwiftBot Patchy announcements, including game artwork and up to three drop reward images for rich Discord embeds.
- Keeps progress/status cards separate from diagnostics so Idle - no campaigns remains visible while stall confidence stays hidden until requested.
- Auto-registers the SwiftMiner dashboard hostname with SwiftBot's tunnel when tunnel details are available.
- Adds update events to the Activity Log and settings for automatic update checks and unattended install options when macOS allows them.
- Adds a dedicated Priorities section to each miner, including personal-first ordering, global-priority opt-in/out, quick removal, and refreshes for running miners after priority changes.
- Shows claimed-but-unlinked campaigns as completed with a distinct question-badge status so the drop claim and missing game link are both visible.
- Fixes completed campaign timing in the web projection so active-but-already-claimed campaigns no longer look like they completed one minute ago forever.
- Tightens public dashboard route matching and adds regression coverage for local sign-in, sessions, CSRF handling, Discord sign-in, activation flows, route exposure, and emitted dashboard JavaScript syntax.
- Modernizes the Add Twitch Account login sheet with a cleaner approval flow, stronger code presentation, copy feedback, and clearer waiting, success, and retry states.
- Removes the unused miner detail panel so the Miners tab is the single source of truth for priority, streamer, campaign, controls, and log UI.
- Clarifies Drops campaign cards so claimed-but-unlinked rewards are the visible account-link state, while pre-claim unlinked prioritised games no longer appear as a separate actionable setup state.
- Preloads the Drops view from cached campaign data on launch and replaces the empty first-load placeholder with an animated loading splash.
- Removes per-reward progress strips from grouped Drops cards and keeps the claimed-but-unlinked icon as a green check with an orange question badge.
- Updates SwiftMiner build metadata to 2026061914 while leaving ShipHook-owned appcasts untouched.
π¬ Version 1.28
- Adds Discord controls for miner-specific game priorities, including full priority-list replacement from SwiftBot's edit-games modal.
- Shows personal miner priorities in the Miners tab, with quick removal controls so app and Discord priority state stay easy to audit.
- Lets prioritised unlinked games keep mining when Twitch exposes usable drops, while keeping account-link warnings visible instead of treating linking as a hard stop.
- Adds Discord link-warning controls so known account-link reminders can be ignored or paused without muting the rest of SwiftBot.
- Improves Discord status and preview messages with recent campaign context, realistic debug samples, cached avatars, and quieter notification defaults.
- Improves mining reliability by recognizing claimed multi-reward drops from any matching Twitch benefit ID and by continuing inventory claim checks even when a claimable drop only appears in Twitch inventory.
- Deduplicates repeated reward tiles in grouped Drops cards so the shown reward count matches the visible rewards.
- Polishes the overview refresh path so miners can restart from refresh without clearing artwork, adds a miner account button, and slows the Looking for Streams animation to feel more native.
- Updates SwiftMiner to version 1.28 build 2026061820 and tightens Sparkle guardrails while leaving ShipHook-owned appcasts untouched.
π‘οΈ Version 1.27
- Fixed Sparkle update signing by restoring the current SPARKLE_PUBLIC_ED_KEY.
- Shows each miner's active priority list in the Miners tab, including miner-specific priorities set from Discord DMs.
- Allows prioritised games to be attempted when Twitch exposes usable drops even if the external game account is not linked yet, while keeping the account-link warning visible.
- Updates the stable Sparkle appcast and release-note metadata for SwiftMiner 1.27 build 2026060620.
π Version 1.26
- Adds update error handling and an Updates settings surface so Sparkle failures are visible and users have a manual download fallback.
- Fixes merged Drops campaign account states so one claimed miner no longer makes every miner appear claimed in the card popover.
- Updates the stable Sparkle appcast and release-note metadata for SwiftMiner 1.26 build 2026060111.
π Version 1.25
- Redesigns Drops campaign cards into an Apple-style cohesive horizontal band, keeping game artwork as the prominent biggest card item and shrinking reward artwork (72x72) to highlight the game hero.
- Uses clean, content-first SF Symbols (gift, calendar, and people) in the metadata row to keep visual elements quiet, structured, and native.
- Introduces elegant remaining-time formatting, reporting time in days or a mixture of weeks and days (e.g. "1 week and 2 days left") instead of raw hours.
- Removes the permanent text metadata below reward tiles, overlaying compact watch duration badges directly onto clean, animation-free static reward cards instead.
- Animates the reward name under the tile dynamically on hover, maximizing visual efficiency and reducing card height.
- Refines the aggregate status pill with soft, low-saturation capsule styling to keep visual focus on the rewards.
- Compacts the miner details inspector popover with denser layout and SF Symbols matching native macOS styling.
- Ensures only eligible and actionable miners are represented on the card and popover surfaces.
- Introduces an Ended campaign status and filter (clock symbol) to cleanly separate expired/finished campaigns from completed ones.
- Refines Needs Setup and Blocked states to only trigger if a campaign has obtainable rewards remaining, ignoring fully claimed or subscription-only drops.
- Integrates Discord API integration tests and automated release tooling (bump_build_number.sh and preflight_release.sh).
π©Ί Version 1.24
- Moves miner diagnostics into the Miners view, directly beneath Prioritised Campaigns.
- Adds a collapsible diagnostics panel with miner health, recovery timeline, stall signals, and inline help explaining stall confidence.
- Replaces the stall confidence percentage label with clearer Normal, Early Warning, Likely Trouble, and High Risk states using native status icons and risk colours.
- Removes the duplicate Operations screen and the rewards ledger surface now that diagnostics live with each miner.
- Fixes the Drops dashboard's Most active miner card so claimed counts come from inventory-backed per-account drop totals instead of the live session counter.
- Updates the stable Sparkle appcast and release-note metadata for SwiftMiner 1.24 build 2026052509.
π Version 1.23
- Adds quiet hours for local claim notifications and Discord DM events.
- Adds settings backup and restore for preferences, game rules, filters, quiet hours, and integration endpoints.
- Adds Discord self-service miner controls for linked users: status, pause, resume, and refresh.
- Updates the stable Sparkle appcast and release-note metadata for SwiftMiner 1.23 build 2026052419.
π‘οΈ Version 1.22
- Raises the stall-recovery liveness threshold from 6 to 15 minutes so the supervisor no longer flags healthy miners during normal idle periods between campaign rescans.
- Adds a distinct yellow rotate icon and readable summaries for stall-recovery activity in the Activity Log, routed under the Warnings filter so recoveries are easy to spot and review.
- Classifies the underlying cause of each stall recovery β network connectivity, Twitch API failure, rate limiting, authentication, or watch-session failure β and surfaces it in the Activity Log entry so the trigger is obvious at a glance.
- Adds DEBUG-only SwiftBot DM previews for individual messages and the full ordered DM sequence without mutating production user state.
- Changes the Discord admin Preview DM action to send the full ordered SwiftBot DM flow in DEBUG builds only.
- Updates the stable Sparkle appcast and release-note links for SwiftMiner 1.22 build 2026051110.
π‘οΈ Version 1.21
- Adds a What's New window in the app menu so the current release notes can be opened directly from SwiftMiner.
- Derives release-note links from the configured stable or beta Sparkle feed, keeping in-app notes aligned with the selected update channel.
- Summarises how many miners are currently mining instead of naming only the first active campaign.
- Refreshes miner activity cards periodically so the displayed current and upcoming work stays fresh while the app remains open.
- Adds a dedicated miner supervisor that detects stalled miners, records worker liveness, and recovers an individual miner without restarting the app.
- Shows Miner Unresponsive and Recovering states so a stalled miner no longer appears as No Campaigns while other miners are still active.
- Updates grouped Drops cards to show which miners are mining or claimed instead of relying on a combined progress bar.
- Debounces Twitch category searches, cancels stale requests, and keeps the loading state steady while you type.
- Removes the Claim All Drops app command now that ready rewards are claimed automatically.
- Adds a Stall recovery setting, enabled by default, that restarts an individual miner when it appears stuck after a long progress stall or recoverable network error.
- Adds a Help > Raise Issue on GitHub⦠action that opens the SwiftMiner issues page prefilled with version and macOS details.
- Removes the unused View menu and restricts Start minimised to login launches, only showing the option once Start at login is enabled.
- Detects false-positive account connections and adds a 1-hour cooldown for campaigns that never produce an active drop session, so miners stop getting stuck on bad campaign selections.
- Adds Software Updates controls for choosing the stable or beta Sparkle feed.
- Adds settings for prompting when updates are available and allowing unattended update installs when macOS permits them.
- Adds in-app TipKit hints that explain adding miners, prioritising games, drag-to-reorder, miner nicknames, drop filters, and the Steam artwork option, with a General settings toggle to disable them.
- Tidies the Advanced settings layout with grouped sections, consistent labels, and clearer destructive actions.
- Uses miner nicknames everywhere a miner is shown, including the Drops campaign cards and the Activity Log.
- Adds SwiftBot integration so new miners can be created and managed through the bot workflow without manual setup in SwiftMiner.
- Tidies the SwiftBot integrations settings by hiding pairing once connected, removing redundant advanced controls, and adding a repair action beside connection testing.
- Updates the stable Sparkle appcast and release-note links for SwiftMiner 1.21 build 2026050811.
- Improves completed drop history when Twitch no longer exposes an expired campaign.
- Uses cached completed campaign data only as a fallback when a campaign is missing from Twitch, while fresh Twitch campaign data continues to win when available.
- Fixes completed miner rows that could appear as waiting after both accounts had already claimed the campaign.
- Adds a maintenance action in Advanced settings to clear cached drop history without removing accounts or app preferences.
πΊ Version 1.20
- Adds smarter stream selection, including optional stream spreading so multiple miners avoid piling onto the same verified live channel when enough alternatives are available.
- Adds an option to prioritise followed and subscribed Twitch streamers, with subscriptions ranked ahead of follows during channel selection.
- Adds a Watching Streamer panel to miner views so each account clearly shows the channel and campaign it is currently using.
- Refreshes the Activity Log with clearer filters, optional category icons, new-row animation, timestamp formatting, and the new Activity Log navigation name.
- Adds login launch controls, including Start at login, Start minimised, and approval/error messaging for macOS login item setup.
- Improves drop claiming by syncing Twitch inventory before and after claims so completed and claimed rewards stay accurate.
- Cleans up Overview and miner status language by removing the old Up Next/debug queue surfaces and showing waiting states more accurately.
- Updates the Sparkle appcast and release-note links so the in-app updater can show richer What's New content.
Version 1.11
- Ships the latest SwiftMiner dashboard, search, and miner workflow improvements through the stable update feed.
- Improves update reliability so future SwiftMiner releases can include richer release notes in-app.
Version 1.10
- Keeps the update path moving forward after the previous build metadata issue.
- No user-facing SwiftMiner behavior changed in this release.
Version 1.09
- Continues the update-feed repair work needed for stable auto updates.
- No user-facing SwiftMiner behavior changed in this release.
Version 1.08 and 1.07
- Adds a richer miner dashboard with activity overview, miner health status, and clearer campaign detail screens.
- Adds paused-state handling, ordered Mining/Queued rails, and drag-to-reorder game priority rules.
- Improves Twitch game search with better no-drop hints, availability badges, sequel-style query fallback, and clearer empty/error states.
- Automatically refreshes expired Twitch tokens where possible and gives clearer re-auth guidance when a session needs attention.
- Polishes onboarding, account details, notification handling, and the Set Steam ID flow.
Version 1.29.2 release page
Version 1.28 release page
Version 1.27 release page
Version 1.26 release page
Version 1.25 release page
Version 1.24 release page
Version 1.23 release page
Version 1.22 release page
Version 1.21 release page
Version 1.20 release page