WolfWave v2.0.0
What's Changed
- feat(docs): 2026 marketing redesign of landing page by @nathanialhenniges in #17
- feat(song-requests): Song Request system for v2.0.0 by @nathanialhenniges in #16
- docs(audit): Swift 6 + concurrency migration audit for native app by @nathanialhenniges in #19
- fix(native): clean build warnings, layout reentrancy, duplicate logs by @nathanialhenniges in #22
- refactor(onboarding): drop redundant success rows + Apple Music permission polish by @nathanialhenniges in #21
- docs(release): sync v2.0.0 changelog + What's New across surfaces by @nathanialhenniges in #23
- refactor(ui): drop WallpaperBloomBackground for native macOS chrome by @nathanialhenniges in #24
- fix(onboarding): pin button + step sizes to eliminate UI shift by @nathanialhenniges in #25
- feat(onboarding): macOS 26 Liquid Glass redesign + 2 new steps by @nathanialhenniges in #26
- refactor(docs): Apple-style redesign with system blue theme by @nathanialhenniges in #27
- fix(onboarding): stable layout, correct permissions, URL fix, UX polish by @nathanialhenniges in #28
- fix(settings): make Music permission row actionable and self-healing by @nathanialhenniges in #31
- fix(settings): size window to fit 720p and 1080p displays by @nathanialhenniges in #33
- fix(onboarding): disable notifications toggle when authorized, unify denied state by @nathanialhenniges in #29
- fix(onboarding): use NSImage to load TrayIcon in menu bar preview by @nathanialhenniges in #32
- fix(onboarding): replace Capsule with macOS-standard rounded rect on PillButton by @nathanialhenniges in #30
- perf(settings): decompose monolithic views, cache LAN IP by @nathanialhenniges in #34
- chore(v2.0.0): consolidate tests, refresh docs, finalize changelog by @nathanialhenniges in #35
- fix(settings): show Apple Music logo on music access granted row by @nathanialhenniges in #38
- perf(settings): cache LAN IP for instant Now-Playing Server render by @nathanialhenniges in #39
- fix(onboarding): collapse OBS step to one toggle, promote URL by @nathanialhenniges in #36
- ci: skip TrackInfoCommandTests on macos-26 runner by @nathanialhenniges in #42
- fix(menubar): render brand icons as templates, refresh logo SVGs by @nathanialhenniges in #40
- feat(docs): theme-matched dynamic OG images by @nathanialhenniges in #43
- fix(onboarding): anchor menu bar pointer arrow to TrayIcon center by @nathanialhenniges in #41
- fix(docs): hardcode /wolfwave basePath so GitHub Pages URLs resolve by @nathanialhenniges in #44
- fix(onboarding): trim Apple Music logo to glyph-only by @nathanialhenniges in #37
- fix(settings): replace OBSLogo with tv.badge.wifi SF Symbol, fix dead foregroundStyle by @nathanialhenniges in #46
- fix(onboarding): trim OBS logo to glyph-only so template rendering works by @nathanialhenniges in #45
- fix(ui): stop pill button width-shift across state changes by @nathanialhenniges in #49
- fix(settings): adaptive Music access icon, kill top scroll fade by @nathanialhenniges in #48
- refactor(copy): tighten user-facing wording across onboarding, settings, menu bar by @nathanialhenniges in #47
- fix(diagnostics): fix Export Logs crash + add Clear Logs and bug report flow by @nathanialhenniges in #50
- perf(settings): cut Settings page switch latency by @nathanialhenniges in #51
- refactor(settings): use cardStyle() helper in AdvancedSettingsView by @nathanialhenniges in #52
- fix(appkit): defer Settings/About show past layout pass by @nathanialhenniges in #53
- perf(settings): defer font enumeration off-main + polish Widget Setup network row by @nathanialhenniges in #54
- feat(docs): dynamic SEO + section-aware OG + live changelog OG card by @nathanialhenniges in #56
- feat(about): rewrite About panel as branded SwiftUI window by @nathanialhenniges in #55
- chore(v2.0.0): refresh CHANGELOG, What's New, README for release by @nathanialhenniges in #57
- docs: refresh user + dev docs, add GitHub Sponsors by @nathanialhenniges in #58
- fix(settings): restore toolbar sidebar toggle, eliminate floating >> reveal by @nathanialhenniges in #59
- fix(settings): repair broken Settings window after #59 by @nathanialhenniges in #61
- fix(about): remove spacer causing gap between legal links and footer by @nathanialhenniges in #60
- fix(icons): preserve brand logo cutouts via evenodd fill-rule by @nathanialhenniges in #62
- docs(readme): add logo back to top of README by @nathanialhenniges in #63
- chore: codebase polish — concurrency, DocC, accessibility, foundation utils by @nathanialhenniges in #64
- chore(audit): centralize API URLs, fix force-unwraps, tighten entitlements by @nathanialhenniges in #65
- feat(advanced): add DEBUG-only What's New preview controls by @nathanialhenniges in #66
- style(docs): refine navbar to match Apple-inspired aesthetic by @nathanialhenniges in #67
- fix(docs): align OG images with new Apple-inspired docs theming by @nathanialhenniges in #68
- chore(github): add PR template by @nathanialhenniges in #70
- feat(debug): DEBUG-only Debug settings tab with developer tooling by @nathanialhenniges in #69
- style(docs): add breathing room to sidebar nav by @nathanialhenniges in #71
- feat(design-system): unified token source + generators by @nathanialhenniges in #72
- feat(discord): friendlier presence buttons, live preview, cleaner state by @nathanialhenniges in #73
- fix(config): plumb GITHUB_REPO_OWNER/NAME from xcconfig to Info.plist by @nathanialhenniges in #74
- fix(updater): detect Intel Homebrew cask installs by @nathanialhenniges in #75
- feat(design-system): widget themes via WW_TOKENS + WolfWave theme, catalog fill, Turbo tokens task by @nathanialhenniges in #76
- fix(settings): remove duplicate sidebar toggle in titlebar by @nathanialhenniges in #77
- docs: make FEATURE_IDEAS.md checkable, trim three ideas by @nathanialhenniges in #78
- docs(ideas): expand Stream Deck Plugin feature idea by @nathanialhenniges in #80
- docs: sync changelogs, What's New, and CLAUDE.md with current codebase by @nathanialhenniges in #79
- docs(pr-template): correct stale test count to 408 by @nathanialhenniges in #81
- fix(ci): regenerate bun.lock for marketing/shared workspace by @nathanialhenniges in #82
- feat(notifications): macOS song-change notifications by @nathanialhenniges in #83
- feat(history): opt-in Listening History & Stats with !stats command by @nathanialhenniges in #84
- feat(diagnostics): opt-in on-device MetricKit diagnostics by @nathanialhenniges in #85
- feat(twitch): chat vote-to-skip with chat-tally and Twitch Polls modes by @nathanialhenniges in #86
- docs(album-art): correct stale AlbumArtView usage comment by @nathanialhenniges in #87
- feat(song-requests): audience picker, channel-point and bit redemptions by @nathanialhenniges in #88
- fix(settings): pin sidebar toggle to titlebar, restore sidebar clicks by @nathanialhenniges in #90
- feat(tray): album art, playback controls, status subtitles, Help submenu by @nathanialhenniges in #91
- chore(swift): modernize Foundation idioms (Regex, URL.appending, ISO8601FormatStyle) by @nathanialhenniges in #92
- chore(swift): adopt Swift 6 language mode by @nathanialhenniges in #93
- refactor(discord): convert DiscordRPCService to actor by @nathanialhenniges in #95
- feat(sponsors): in-app GitHub Sponsors link driven by FUNDING.yml by @nathanialhenniges in #97
- fix(settings): unfreeze hosting view sizing; dedupe section views by @nathanialhenniges in #98
- docs(changelog): sync v2.0.0 entries and refresh What's New by @nathanialhenniges in #89
- fix(onboarding): prevent Preferences step from overlapping nav bar by @nathanialhenniges in #94
- refactor(websocket): convert WebSocketServerService to actor (G4) by @nathanialhenniges in #96
- fix(updater): modernize Sparkle integration for Swift 6 and wire up DEBUG dev-appcast by @nathanialhenniges in #100
- refactor(twitch): convert TwitchChatService to actor (G2) by @nathanialhenniges in #99
- fix(tests): unblock test target under Swift 6 strict isolation by @nathanialhenniges in #102
- chore(lint): add SwiftLint config, Makefile target, and CI job by @nathanialhenniges in #103
- test: add MockURLProtocol networking tests and onboarding accessibility identifiers by @nathanialhenniges in #105
- feat(metrics): add runtime performance monitoring by @nathanialhenniges in #104
- fix(native): unblock build and runtime under Swift 6 strict isolation by @nathanialhenniges in #106
- fix(native): SwiftLint errors + ScriptingBridge crash + Swift 6 isolation cleanup by @nathanialhenniges in #107
- refactor(views): complete DSFont/DSSpace token migration across all views by @nathanialhenniges in #109
- chore(2.0.0): prod-readiness audit pass by @nathanialhenniges in #110
- test(native): cover AppleMusicController + TwitchChannelPointsService by @nathanialhenniges in #111
- fix(settings): restore sidebar selection + widen default window by @nathanialhenniges in #112
- fix(native): eliminate all Xcode build warnings by @nathanialhenniges in #113
- feat(websocket): require auth token on overlay handshake by @nathanialhenniges in #108
- fix(settings): enlarge window + tighten StatusChip so rows fit by @nathanialhenniges in #114
- feat(design-system): add DSIconButton + lint guardrail, fix WS settings drift by @nathanialhenniges in #115
- refactor(native): dedupe SettingsUI dimensions onto DSDimension.Settings by @nathanialhenniges in #116
- fix(websocket): bind wildcard + dynamic widget host for two-PC setups by @nathanialhenniges in #117
- docs: surface Apple Music requirement on download + landing pages by @nathanialhenniges in #119
- fix(history): stable card size + Apple Music permission gate by @nathanialhenniges in #118
- chore(native): add SwiftUI #Preview to remaining view files by @nathanialhenniges in #120
- feat(docs): SEO + OG overhaul to drive downloads by @nathanialhenniges in #121
- fix(docs): WCAG AA contrast + a11y polish by @nathanialhenniges in #122
- docs: a11y polish + download page redesign by @nathanialhenniges in #123
- fix(native): grant Apple Events entitlement so sandbox allows Music control by @nathanialhenniges in #124
- fix(native): Recheck + Sync toggle force a fresh now-playing read by @nathanialhenniges in #125
- fix(docs): use fully-qualified tap path for Homebrew install command by @nathanialhenniges in #126
- fix(native): grant Apple Events entitlement to DEBUG builds by @nathanialhenniges in #127
- chore(ci): harden GitHub Actions — SHA pins, scoped permissions, environment-gated releases by @nathanialhenniges in #128
- fix(native): expose silent ScriptingBridge failures + auto-flip Music permission banner by @nathanialhenniges in #134
- fix(native): diagnose silent notPlaying + scope keychain by bundle ID by @nathanialhenniges in #135
- chore(actions): bump peter-evans/create-pull-request from 7.0.11 to 8.1.1 by @dependabot[bot] in #129
- chore(actions): bump actions/configure-pages from 4.0.0 to 6.0.0 by @dependabot[bot] in #130
- fix(native): tolerant playerState parse — now-playing survives SB bridge drift by @nathanialhenniges in #136
- feat(native): bump window sizes + native macOS action surfaces (main menu + Dock menu) by @nathanialhenniges in #137
- chore(audit): full audit pass — Swift hygiene, GDPR/privacy, DS tokens, a11y by @nathanialhenniges in #138
- fix(onboarding): vertically center step content by @nathanialhenniges in #139
- fix(native): make Apple Music permission Recheck button visibly respond by @nathanialhenniges in #141
- docs(marketing): sales-driven landing page rewrite + docs/README cleanup by @nathanialhenniges in #143
- perf(settings): defer heavy reads off main to kill pane-open hitch by @nathanialhenniges in #140
- feat(history): paginated Recently played + 10k rolling cap with lifetime tally by @nathanialhenniges in #142
- feat(ui): Apple/SwiftUI front-end modernization — motion tokens, transitions, accessibility by @nathanialhenniges in #144
- refactor(native): trim Help submenu to utility actions only by @nathanialhenniges in #146
- fix(onboarding): anchor step header so icons stop drifting by @nathanialhenniges in #145
- chore(menu): drop "Open in Apple Music" tray item by @nathanialhenniges in #147
- refactor(settings): move Performance metrics card to Debug tab by @nathanialhenniges in #148
- fix(about): wire up Check for Updates + point Release Notes at docs changelog by @nathanialhenniges in #150
- feat(discord): replace button label fields with master toggle by @nathanialhenniges in #151
- refactor(settings): move About to sidebar tab, drop Legal + Report a Bug from Advanced by @nathanialhenniges in #149
- chore(logging): quiet OSLog under XCTest to de-spam CI output by @nathanialhenniges in #152
- feat(tray): Copy Song Link, restart-with-rejoin, reworded toggles, expanded Help by @nathanialhenniges in #154
- perf(widget): cut stream widget first-paint to a single HTTP round-trip by @nathanialhenniges in #155
- feat(streamer-mode): tray toggle to hide sensitive UI on stream by @nathanialhenniges in #153
- refactor(about): retire standalone window, restyle settings tab to card rhythm by @nathanialhenniges in #159
- feat(monthly-wrap): rebrand share card to WolfWave blue by @nathanialhenniges in #157
- chore(tests): rename short identifier in TwitchChannelPointsServiceTests to silence SwiftLint by @nathanialhenniges in #161
- feat(debug): regroup Debug tab + add Copy Diagnostics by @nathanialhenniges in #156
- feat(config): fork-overridable docs URL, community Discord, copyright holder by @nathanialhenniges in #160
- feat(onboarding): wolf-themed Welcome + Completion hero mark by @nathanialhenniges in #158
- refactor(views): extract WarningBanner, ActionGrid, LoadingRow shared components by @nathanialhenniges in #162
- refactor(views): adopt .cardStyle() across 9 untinted card sites by @nathanialhenniges in #163
- chore: v2.0.0 release readiness — headers, FEATURE_IDEAS prune, changelog backfill by @nathanialhenniges in #164
- fix(docs): repair OG image basePath + enrich per-page SEO by @nathanialhenniges in #165
- fix(docs): emit og:image on home + ship .png-suffixed OG assets by @nathanialhenniges in #166
- refactor(native): rename xcodeproj + source folder to PascalCase by @nathanialhenniges in #167
- docs: v2.0.0 release audit — sync README, CLAUDE.md, docs site by @nathanialhenniges in #168
- feat(docs): redesign landing developers section + section anchor IDs by @nathanialhenniges in #169
- feat(history): bound Monthly Wrap picker + zero-history CTA by @nathanialhenniges in #170
- test(native): add HoldCommand coverage by @nathanialhenniges in #171
- feat(widget): Tailwind workspace + polished transitions + auto-rebuild by @nathanialhenniges in #173
- feat(docs): live widget previews on landing + real menu-bar screenshot by @nathanialhenniges in #174
- chore(native): prune unused AppConstants keys, private members, imports by @nathanialhenniges in #172
- feat(onboarding): center step content with reserved extras slot by @nathanialhenniges in #175
- chore(widget): decouple OBS widget rebuild from Xcode + enforce CI drift by @nathanialhenniges in #176
- feat(native): clearer Streamer Mode masking + lock token regenerate by @nathanialhenniges in #177
- fix(onboarding): center extras inside reserved slot by @nathanialhenniges in #178
- refactor(native): share JSONCoders + sync CLAUDE.md test count by @nathanialhenniges in #179
- refactor(twitch): route Helix calls through HTTPClient with typed responses by @nathanialhenniges in #180
- fix(native): dedupe artwork lookups + persist keychain across dev rebuilds by @nathanialhenniges in #181
- chore(docs): remove hero screenshot from landing page by @nathanialhenniges in #183
- feat(playback): surface paused state in Discord, widget, and now-playing UI by @nathanialhenniges in #182
- fix(native): correct project name casing in pbxproj comments by @nathanialhenniges in #184
- fix(twitch): auto-reconnect EventSub on launch + steadier auth UX by @nathanialhenniges in #185
- fix(twitch): preserve channel name on re-auth by @nathanialhenniges in #187
- feat(settings): HIG polish pass — sentence case, stat tiles, destructive buttons, semantic color tokens by @nathanialhenniges in #186
- feat(twitch): align OAuth UX with Twitch branding guidelines + DSA by @nathanialhenniges in #188
- feat(about): menu bar opens native About panel, share copy with Settings tab by @nathanialhenniges in #189
- feat(twitch): add song.link toggle for !song and !last chat replies by @nathanialhenniges in #190
- feat(legal): add third-party acknowledgements + expand trademark disclaimer by @nathanialhenniges in #193
- refactor: dedupe shared helpers from duplication audit by @nathanialhenniges in #192
- feat(settings): promote Software Update to its own sidebar pane by @nathanialhenniges in #191
- feat(twitch): expose channel-points/bits/hold settings + command aliases by @nathanialhenniges in #194
- docs: competitor comparison page + widget build fix by @nathanialhenniges in #195
- feat(docs): rebuild docs landing, refresh marketing hero, purge em-dashes by @nathanialhenniges in #196
- refactor: code audit pass — HelixClient, Preferences, actor adoption, test backfill by @nathanialhenniges in #197
- Finish deferred audit phases: notifications, StreamerMode, Liquid Glass, tests + CodeRabbit fixes by @nathanialhenniges in #198
- Energy: coalesce timer wakeups + inside-out release signing by @nathanialhenniges in #199
- feat(docs): reframe landing page around Apple Music differentiation by @nathanialhenniges in #200
- ci(config): set branding override keys in generated Config.xcconfig by @nathanialhenniges in #201
- fix(settings): unify card surfaces on glass cardStyle by @nathanialhenniges in #202
- fix: stop Apple Music relaunching when quit; hide overlay + clear Discord on stop by @nathanialhenniges in #203
- docs(changelog): add #197-#199 app changes, strip docs-only entries by @nathanialhenniges in #204
- Pre-release UX/branding polish + fix in-app docs links by @nathanialhenniges in #205
- feat(docs): two-column hero + sync overlay preview to native default theme by @nathanialhenniges in #206
- fix(artwork): wire real artwork to NowPlayingHeroCard; WolfMark fallback everywhere by @nathanialhenniges in #208
- fix(settings): reorder App sidebar group + drop General header by @nathanialhenniges in #207
- ci: add PR-time docs build validation by @nathanialhenniges in #209
- feat(artwork): persist links cache to disk + clear-cache control by @nathanialhenniges in #210
- docs(comparison): center on widget/Twitch/Discord pillars, add Spotify + Cider compares by @nathanialhenniges in #212
- feat(docs): centralize homepage SEO, redesign OG card, rewrite landing copy by @nathanialhenniges in #211
- feat(notifications): skip-vote alerts + consolidated permissions onboarding by @nathanialhenniges in #213
- docs(native): drop parked overlay-xpc branch reference by @nathanialhenniges in #214
- license: relicense WolfWave from MIT to GPL-3.0 by @nathanialhenniges in #215
- docs(about): add independence + per-service disclaimer by @nathanialhenniges in #216
- fix(settings): mono sidebar brand icons for light/dark mode by @nathanialhenniges in #218
- fix(ui): unify Liquid Glass across Song Request & Twitch settings cards by @nathanialhenniges in #219
- fix(music): detect Apple Music permission when Music.app is closed by @nathanialhenniges in #217
- fix(monthly-wrap): fix export crash + add native macOS share sheet by @nathanialhenniges in #221
- feat(onboarding): polish wizard, split permissions/notifications, strip em-dashes by @nathanialhenniges in #220
- feat(discord): honest preview states + idle/pause presence controls by @nathanialhenniges in #222
- refactor(settings): unify glass card backgrounds + extract shared components by @nathanialhenniges in #223
- feat(monthly-wrap): prominent equal-size Share button by @nathanialhenniges in #224
- refactor(debug): flatten Debug tab into per-card dropdowns by @nathanialhenniges in #225
- feat(settings): ease glass cards in both modes + Light/Dark/System appearance toggle by @nathanialhenniges in #227
- test(logger): fix flaky LoggerTests by serializing log-file tests by @nathanialhenniges in #228
- test(keychain): inject backend so tests don't hit real Keychain by @nathanialhenniges in #230
- ci: cache deps and move SwiftLint off the macOS runner by @nathanialhenniges in #231
- feat(about): right-align text and remove app icon by @nathanialhenniges in #232
- fix(settings): use windowBackgroundColor for detail pane in light mode by @nathanialhenniges in #234
- fix(settings): app-owned sidebar toggle to stop the >> overflow flash by @nathanialhenniges in #236
- feat(settings): Startup and Display Mode cards side by side by @nathanialhenniges in #235
- fix(about): revert About pane text to leading alignment by @nathanialhenniges in #237
- refactor(debug): jump-nav rail + loading spinners (drop dropdowns) by @nathanialhenniges in #233
- refactor(settings): tidy Widget Appearance card layout by @nathanialhenniges in #238
- feat(settings): regroup sidebar by purpose, order App by frequency by @nathanialhenniges in #239
- Use opaque macOS surface for settings cards instead of Liquid Glass by @nathanialhenniges in #242
- feat(settings): native System Settings-style appearance thumbnail picker by @nathanialhenniges in #243
- fix(settings): one recovery card for denied Music access, drop redundant alarms by @nathanialhenniges in #240
- refactor(settings): native single-column App Visibility with radioGroup picker by @nathanialhenniges in #241
- fix(settings): keep .tag() outermost on App Visibility radio rows by @nathanialhenniges in #244
- Add export/import settings backup by @nathanialhenniges in #245
- fix(settings): host Settings in SwiftUI scene to kill sidebar toggle glitch by @nathanialhenniges in #246
- refactor(settings): open Settings scene via SettingsLink in App menu by @nathanialhenniges in #247
- fix(settings): open Settings scene via SettingsLink, not the private selector by @nathanialhenniges in #248
- refactor(native): v2.0.0 code review cleanup, shared helpers, test trims, docs by @nathanialhenniges in #249
- fix(settings): open Settings scene via openSettings bridge, not the private selector by @nathanialhenniges in #250
- refactor(permissions): native tinted-circle icon for Music access banner by @nathanialhenniges in #251
- feat(settings): redesign sidebar in VoiceInk style by @nathanialhenniges in #253
- Rebuild landing + docs site: hero, OG, accessibility, license fix by @nathanialhenniges in #254
- Normalize file headers and clean up comments (native) by @nathanialhenniges in #252
- fix(stability): harden Swift/SwiftUI crash + hang hazards across services by @nathanialhenniges in #255
- docs(readme): add table of contents and group features by @nathanialhenniges in #257
- fix(settings): native window-scene sidebar, kill the
>>toggle flash by @nathanialhenniges in #256 - docs(changelog): reword user-first + surface release notes in Sparkle by @nathanialhenniges in #258
- feat(history-stats): two-column dashboard layout by @nathanialhenniges in #259
- refactor(settings): hoist card sub-headers above their box, unify header icons by @nathanialhenniges in #260
- feat(about): restore app icon to identity hero (icon-left layout) by @nathanialhenniges in #261
- Calmer destructive buttons + type-RESET reset confirmation by @nathanialhenniges in #262
- Settings redesign: 8 panes (status headers, danger zones, two-column Discord, tabbed General/Song Requests) by @nathanialhenniges in #263
- fix(stability): crash safety net + close remaining hard-crash edges by @nathanialhenniges in #264
- feat: !wolfwave bot command + download-first proof band by @nathanialhenniges in #265
- Pre-2.0.0 audit: dedup helpers + docs/changelog sync by @nathanialhenniges in #266
- chore: remove shipped 2.0.0 research docs + stale release checklist by @nathanialhenniges in #267
- Docs + landing polish: cleaner UI, sharper copy, new OG cards by @nathanialhenniges in #268
- fix(settings): match Stats danger zone to Advanced pane card style by @nathanialhenniges in #270
- refactor(settings): General pane as full-width jump-nav scroll by @nathanialhenniges in #269
- feat(widget): live appearance preview in Stream Widgets settings by @nathanialhenniges in #272
- fix(settings): drop blue accent icons from section headers by @nathanialhenniges in #271
- fix(music): stop relaunching Music.app after the user quits it by @nathanialhenniges in #273
- Gate bot commands on live Twitch + Apple Music access by @nathanialhenniges in #274
- refactor(settings): shared SettingsNavRail + Song Requests jump-nav by @nathanialhenniges in #276
- fix(debug): auto-refresh State Inspectors keychain on Twitch login by @nathanialhenniges in #275
- fix(settings): jump-nav rail scrolls to off-screen sections by @nathanialhenniges in #277
- fix(twitch): match command alias placeholders to each command by @nathanialhenniges in #279
- fix(settings): drop double outline on connected Twitch login card by @nathanialhenniges in #278
- fix(history-stats): stop the History & Stats settings pane from resizing by @nathanialhenniges in #281
- refactor(settings): compact, shared command rows across all command panes by @nathanialhenniges in #282
- feat(settings): add jump-nav rail to History & Stats by @nathanialhenniges in #280
- fix(power): crash on off-main thermal/power notification by @nathanialhenniges in #283
- refactor(native): kill macOS 26 deprecations + dedup into shared helpers by @nathanialhenniges in #284
- fix(settings): drop General nav rail, label !wolfwave reply, link Discord URLs by @nathanialhenniges in #285
- feat(debug): live-refresh State Inspectors values by @nathanialhenniges in #286
- feat(discord-assets): ship real Rich Presence art + app icon by @nathanialhenniges in #288
- refactor(settings): NN/g typography overhaul — fix heading hierarchy, retire off-ramp font tokens by @nathanialhenniges in #287
- chore: remove stale GitHub Copilot instructions by @nathanialhenniges in #289
- feat(widget-settings): Apply button + no more scroll-jump in Widget Appearance by @nathanialhenniges in #291
- fix(discord): show Apple Music art in preview idle + no-artwork fallback by @nathanialhenniges in #292
- feat(discord-rpc): distinct idle presence with WolfWave logo art by @nathanialhenniges in #293
- refactor(previews): invented wolf tracks in demo/preview data by @nathanialhenniges in #290
- refactor(history-stats): drop jump-nav rail for a single scroll column by @nathanialhenniges in #294
- docs(discord): sync idle copy with #293 WolfWave-logo idle presence by @nathanialhenniges in #295
- feat(twitch): global "commands only while live" switch by @nathanialhenniges in #298
- fix(song-requests): share Twitch sign-in-expired notice with Twitch pane by @nathanialhenniges in #297
- Discord preview: render real Rich Presence art (idle / apple_music / pause) by @nathanialhenniges in #296
- test(logger): fix flaky testLogFileContent via deterministic line builder by @nathanialhenniges in #299
- Full code review and audit: fix all 59 findings (Twitch/Discord reliability, security, a11y, web, DRY) by @nathanialhenniges in #300
- Onboarding: theme-adaptive hero logo, unified type ramp, flat brand tiles by @nathanialhenniges in #301
- fix(appkit): silence layout-recursion + degenerate window-frame restore logs by @nathanialhenniges in #302
- fix(history): equalize History retention & Manage card heights by @nathanialhenniges in #303
- fix(widget-preview): checkerboard stage adapts to light mode by @nathanialhenniges in #304
- feat(history-stats): gate !stats command on Twitch connection + jump-to-Twitch button by @nathanialhenniges in #305
- fix(share-button): prominent share icon matches label in light & dark by @nathanialhenniges in #306
- fix(debug): contain notification firehose JSON editor within its border by @nathanialhenniges in #307
- fix(widget-preview): render the real widget.html in Settings so preview matches the overlay 1:1 by @nathanialhenniges in #308
- feat(history-wrap): redesign Monthly Wrap as a shareable poster by @nathanialhenniges in #309
- fix(song-requests): full audit — master gate, scopes, playback, redemptions, single-scroll UI by @nathanialhenniges in #310
- fix(debug): make the settings nav-rail content column scroll by @nathanialhenniges in #311
- fix(song-requests): advance on Music.app skip + count founders as subscribers by @nathanialhenniges in #312
- fix(song-requests): silent !sr when off, 4-chip presets + Custom, per-role queue limits by @nathanialhenniges in #313
- feat(discord): fill Apple Music preview tile, default idle status on by @nathanialhenniges in #314
- fix(song-link): resolve links while paused, stop perpetual "Resolving…" by @nathanialhenniges in #315
- chore(actions): Bump actions/checkout from 6.0.2 to 6.0.3 in the actions-minor-and-patch group by @dependabot[bot] in #316
- chore(actions): Bump actions/cache from 4.2.4 to 5.0.5 by @dependabot[bot] in #317
- fix(tests): deflake LoggerTests log-content assertion by @nathanialhenniges in #318
- fix(twitch): keep channel on reconnect; tidy platform chips by @nathanialhenniges in #319
- feat(settings): two-column command cooldowns by @nathanialhenniges in #320
- feat(twitch): red "Leave Channel" button label by @nathanialhenniges in #321
- feat(settings): auto-poll connection status, drop manual test buttons by @nathanialhenniges in #322
- feat(song-requests): lead pane with live queue by @nathanialhenniges in #323
- feat(history): clearer retention + recap card copy by @nathanialhenniges in #324
- feat(history): scrollable recent-plays box, top 5 then load more by @nathanialhenniges in #325
- feat(history): clearer "Show Stats & Charts" toggle copy by @nathanialhenniges in #326
- docs(backup): note permissions don't transfer on import by @nathanialhenniges in #327
- feat(advanced): full factory reset that wipes everything and relaunches by @nathanialhenniges in #328
- feat(stats): configurable !stats window + facts by @nathanialhenniges in #329
- docs: ADHD-friendly changelog, What's New, docs & landing by @nathanialhenniges in #330
- fix(song-requests): macOS 26 playback + !playlist link by @nathanialhenniges in #331
- feat(onboarding): add channel join to Twitch step by @nathanialhenniges in #332
- feat(onboarding): add channel join step to Twitch onboarding by @nathanialhenniges in #333
- refactor(onboarding): cleaner "Pick your alerts" notifications step by @nathanialhenniges in #334
- fix(song-requests): stop requests cutting the streamer's song off mid-play by @nathanialhenniges in #335
- feat(song-requests): guided setup gate + playlist health fallback by @nathanialhenniges in #336
- build(dmg): simpler, cleaner branded installer background by @nathanialhenniges in #337
- Production-readiness audit: fixes + repo-wide em-dash purge by @nathanialhenniges in #338
- fix(settings): keep clean title-bar chrome after sidebar toggle by @nathanialhenniges in #339
- test(diagnostics): fix stale launch-count test blocking v2.0.0 release by @nathanialhenniges in #340
- test(song-requests): fix flaky fallback-yield tests on CI by @nathanialhenniges in #341
- ci(release): surface notary log on non-Accepted notarization by @nathanialhenniges in #342
- fix: full-audit bug fixes + dedup across app, tests, web, CI by @nathanialhenniges in #343
- test(song-requests): de-flake fallback-yield tests via deterministic poll tick by @nathanialhenniges in #344
- feat: opt-in Nightly update channel (Sparkle dual-feed) by @nathanialhenniges in #345
- fix(twitch): remove spurious await on sync outcome helpers by @nathanialhenniges in #346
New Contributors
- @dependabot[bot] made their first contribution in #129
Full Changelog: v1.2.0...v2.0.0