Releases
v15.1.0
Compare
Sorry, something went wrong.
No results found
Changelog
Features
feat(appearance): Interface style selector with Material 3 Expressive default; bottom search bar — by @vossgraves
feat(navbar): hide on scroll with mini player take-over; accent-tinted bar in both schemes — by @vossgraves
feat(spotify): resolve tapped albums and artists in-app everywhere (#160 ) — by @t
feat(ui): rewind/forward on every player style and one pill style for the bottom chrome — by @t
feat(playback): checkpoint reliable resolution and player refinements — by @usehoplite [bot]
feat(playback): report source-scoped audio formats in Track Info — by @usehoplite [bot]
feat(navbar): port 4nx3b BitChord navigation bar (frosted path only) — by @t
feat(navbar): Enable BitChord navigation bar option with mutual exclusion — by @t
feat(navbar): host BitChord bar in nav slide box — by @t
feat(player): port Looper player style from 4nx3b (files, Jost fonts, dispatch, settings entry) — by @t
feat(player): gate Apple Music pause shrink behind a toggle — by @t
feat(player): add Apple Music gimmick preference keys and settings toggles — by @t
feat(player): gate Apple Music backdrop wander behind a toggle — by @t
feat(player): gate Apple Music pause shrink behind a toggle — by @t
feat(player): gate Apple Music scrolling titles behind a toggle — by @t
feat(player): gate Apple Music seek-bar swell behind a toggle — by @t
feat(lyrics): interval-adaptive lyric scroll spring — by @t
feat(lyrics): sliding gradient-mask word reveal — by @t
feat(lyrics): per-character last-word emphasize — by @t
feat(lyrics): breathing interlude dots — by @t
feat(player): port Looper and Flamingo, unify the 5s double-tap seek — by @vossgraves
feat(audio): port 4nx3b's audio pipeline package — by @vossgraves
feat(audio): port Tryptify DSP core, USB driver and pitch shifter (no routing) — by @vossgraves
feat(audio): Slice C - LastWave router, engine runtime, home feed, compile fixes — by @vossgraves
feat(playback): expose currentStreamInfo and liveNormalizeFactor on MusicService — by @vossgraves
feat(audio): Slice D - port Tryptify DSP update and engine controllers — by @vossgraves
feat: home custom font, bitchord lyric lift, and source checks — by @vossgraves
feat(sources): Amazon search in the player menu, Apple Music metadata option — by @vossgraves
feat(debug): show the active stream source in nerd stats — by @vossgraves
feat(nav): port 4nx3b's compact bottom controls — by @vossgraves
feat(miniplayer): port CompactMiniPlayerContent — by @vossgraves
feat(nav): wire the mini player pill into the compact row — by @vossgraves
feat(ui): split the Home header into separate round buttons, add stock-colour bottom buttons — by @vossgraves
feat(ui): one-row compact bottom bar, Apple Music tab style, settings transition — by @vossgraves
feat(player): wire Flamingo as a selectable player style — by @vossgraves
feat(audio): wire the Tryptify, LastWave and float DSP engines behind their switches — by @vossgraves
feat: custom covers and canvas per song (#176 ) — by @vossgraves
feat(logs): persist the app's own logcat for reports and the viewer — by @vossgraves
feat(lastfm): offline scrobble queue, batching and play-time counting — by @vossgraves
feat(playback): USB exclusive output, YouTube failsafe tiers, source-switch fallback — by @vossgraves
feat(spotify): experimental streaming source on a separate account — by @vossgraves
feat(proxy): route every client through the user's proxy — by @vossgraves
feat(ai-filter): filter the Spotify and QQ home feeds — by @vossgraves
feat(updater): drop the Canary channel, one build-based channel rule — by @vossgraves
feat(updates): keyless update-feed manifest first, API fallback with rate-limit backoff — by @vossgraves
feat(about): rebuild the About page on our settings components — by @vossgraves
feat(motion): every animation follows the system animator scale — by @vossgraves
feat(nav): make spam-tapped bottom-nav tabs smooth — by @vossgraves
feat(nav): SukiSU liquid glass bar as a selectable nav-bar style — by @vossgraves
feat(back): predictive back gesture with an Original/Predictive switch — by @vossgraves
feat(player): collapse-and-sheen morph on the seek bars while mixing — by @vossgraves
feat(flamingo): bake the canvas frost from a still instead of runtime-blurring a live video copy — by @vossgraves
feat(port): land the small 4nx3b ports, reviewed and rewritten — by @vossgraves
feat(sources): one ordered, gated source chain for every playback path — by @vossgraves
feat(player): fade long titles and artists at the edges in every marquee style — by @vossgraves
feat(blur): one root blur policy that every blur and glass site honours — by @vossgraves
feat(glass): share Suki optics across refractive surfaces — by @vossgraves
feat(player): share native settings and optimistic device volume — by @vossgraves
feat(settings): redesign Canvas settings and dedupe player toggle — by @vossgraves
feat(acoustics): add bounded read-only audit foundation — by @vossgraves
feat(acoustics): add shared explicit quality graph UI — by @vossgraves
feat(lyrics): harden Japanese pack and finish language integration — by @vossgraves
feat(icons): Natune icon pack for the icon switcher — by @vossgraves
feat(pool): configurable ArchivePool base URL with vercel failover — by @vossgraves
feat(presence): opt-in Natune status — by @vossgraves
feat(news): restore announcements feed behind NATUNE_NEWS_URL — by @vossgraves
Fixes
fix(crossfade): restore gapless-album skip dropped by the podcast guard — by @vossgraves
fix(spotify-home): drop the offline snapshot on logout and account change — by @vossgraves
fix(canvas): read Low data mode with the app-wide default — by @vossgraves
fix(canvas): keep Save Canvas sources when Apple Music is policy-denied — by @vossgraves
fix(sponsorblock): skip podcast lookups on attach too — by @vossgraves
fix(drive-backup): accept custom font entries when validating a downloaded archive — by @vossgraves
fix(bit-perfect): move user-facing fallback strings into resources — by @vossgraves
fix(apple): AAC request falls back to the smallest asset, not hi-res — by @vossgraves
fix(tidal): token expiry check no longer throws on non-JWT tokens — by @vossgraves
fix(bit-perfect): release the DAC when crossfade, automix or offload turns bit-perfect off — by @vossgraves
fix(automix): key stored analyses by a SHA-256 digest, not String.hashCode — by @vossgraves
fix(likes): toast like failures on the main thread in TikTok rail — by @vossgraves
fix(bitchord): localize lyrics and queue glyph descriptions — by @vossgraves
fix(spotify-search): restart load-more watcher when the filter changes — by @vossgraves
fix(appearance): switch interface preferences atomically — by @vossgraves
fix(backup): keep restored fonts inside the custom font directory — by @vossgraves
fix(queue): Play next and Add to queue line up behind hand-added songs (#172 ) — by @t
fix(downloads): offline reads use the length the cache actually recorded (#177 ) — by @t
fix(ci): restore the fi dropped from canary's resolve-variant step — by @t
fix(platform): support 32-bit TVs and export fork-aware redacted diagnostics — by @usehoplite [bot]
fix(playback): synchronize fades and expose trustworthy decoded audio specs — by @usehoplite [bot]
fix(playback): observe local audio through session wrappers — by @usehoplite [bot]
fix(spotify): bound playlist resolution and retain continuation tracks — by @usehoplite [bot]
fix(sources): isolate Pool credentials and reject unsupported Discord presence — by @usehoplite [bot]
fix(spotify): avoid redundant REST requests and propagate throttles — by @usehoplite [bot]
fix(spotify): distinguish API quota exhaustion and document verified requests — by @usehoplite [bot]
fix(spotify): preserve explicit metadata and reject malformed identifiers — by @usehoplite [bot]
fix(ui): bound Listen Together waits and soften Spotify Home glass — by @usehoplite [bot]
fix(listen-together): serialize requests and surface server rejections — by @usehoplite [bot]
fix(player): keep overflow menu above maximized player (port 4nx3b c9ff5ed ) — by @t
fix(refresh-rate): apply forced high refresh rate at activity level (port 4nx3b f2bcad2 ) — by @t
fix(spotify): compare non-Latin titles so Tamil and other scripts can be mapped — by @t
fix(spotify): restore REMASTER_PATTERN dropped from the normalizer — by @t
fix(compile): restore homeSourcesLabel and drop a stray paren from the BitChord row — by @t
fix(automix): cap crossfade overlap at 12s and time-stretch to 4% (port 4nx3b) — by @t
fix(player): route LOOPER through the editorial queue/controls, use fork lyrics pattern — by @t
fix(home): guard home loads against late responses, hangs, and stuck refresh — by @t
fix(downloads): close DownloadCursor after seeding download index snapshot — by @t
fix(listen-together): cancel-and-replace initialize() collectors on re-entry — by @t
fix(build): restore HomeFeedDesign package and imports, spring sqrt/gesture imports, lyrics settings bounce state, Spotify textAlign param — by @t
fix(build): pass isBackground to SpotifyWord and import the lyric-animation preference keys — by @vossgraves
fix(discord): restore the gateway presence client that d0e1a65 replaced with an always-failing stub — by @vossgraves
fix(ui): bound Listen Together waits and soften Spotify Home glass — by @usehoplite [bot]
fix(listen-together): serialize requests and surface server rejections — by @usehoplite [bot]
fix(listen-together): drop the onrender server — its WebSocket endpoint answers 404, so picking it hung forever — by @vossgraves
fix(home): queue home loads instead of dropping them, and let refresh supersede the in-flight load — by @vossgraves
fix(spotify): drop soundtrack credits from the YouTube query so film songs can be mapped — by @vossgraves
fix(simpmusic): import the takeOrElse extension the resolved line height uses — by @vossgraves
fix(player): supply the three symbols the ported styles needed, and trim Flamingo's canvas calls — by @vossgraves
fix(flamingo): close the gaps the pre-port review found — by @vossgraves
fix(looper): drop the controlsOnTap argument this fork's InlineVideoPlayer does not take — by @vossgraves
fix(flamingo): drop the backdrop record ticker and the translation-actions flag — by @vossgraves
fix(audio): port UsbDacMonitor and SignalPath the codec sheet needs — by @vossgraves
fix(audio): fix Slice C compile errors from CI on 8d5912d — by @vossgraves
fix(build): wire Oboe prefab and c++_shared STL for lastwave_audio — by @vossgraves
fix(build): track libusb core.c, which .gitignore's core.* rule was dropping — by @vossgraves
fix(di): provide the CoroutineScope and DataStore bindings UsbDacMonitor needs — by @vossgraves
fix(lyrics): add word gap after sentence punctuation in karaoke lines — by @vossgraves
fix(dsp): replace 4nx3b's Tryptify snapshot with current Tryptify DSP — by @vossgraves
fix(dsp): fan nativeResetPluginState out via forEach — by @vossgraves
fix(home): balance braces after removing the home top blur branch — by @vossgraves
fix(bitchord): restore @composable on SweptLyricLine — by @vossgraves
fix(sources): drop invalid produceState key4; add lyrics providers — by @vossgraves
fix: repair ead28aa compile breakage and finish nav style work — by @vossgraves
fix: resolve the two compile errors from the perf refactors — by @vossgraves
fix: three compile errors from the nav/perf work — by @vossgraves
fix: drop the duplicate LocalLifecycleOwner import — by @vossgraves
fix: read LocalLifecycleOwner outside the LaunchedEffect coroutine — by @vossgraves
fix: single lifecycleOwner declaration in Player — by @vossgraves
fix(nav): declare compact state before the scroll connection that reads it — by @vossgraves
fix(nav): enum preference and imports for compact controls — by @vossgraves
fix(native): never block the audio thread, never free in-flight USB transfers — by @vossgraves
fix(lyrics): honour cancellation, bound Genius, expose the new provider switches — by @vossgraves
fix(discord): identify like Metrolist, tolerate a trimmed READY — by @vossgraves
fix(spotify): read history from the web player, keep what it has seen, sync on foreground — by @vossgraves
fix(lastfm): fill the dashboard artwork from the library first, resolve album covers — by @vossgraves
fix(usb): stop the audio threads reading the stream format while start() rewrites it — by @vossgraves
fix(oxford): check handles and buffer sizes at the JNI boundary — by @vossgraves
fix(audio): create the stretch handle under its lock, catch runtime errors from native init — by @vossgraves
fix(playback): publish the direct stream's source, label and format to the nerd stats — by @vossgraves
fix(lyrics): pass the track ISRC to providers that can match on it — by @vossgraves
fix(ui): localise the Looper player strings, drop the stale Discord "unavailable" warning — by @vossgraves
fix(ui): restore the Discord "Rich Presence is unavailable" notice — by @vossgraves
fix(ui): import Constraints.constrainHeight/constrainWidth in the mini player — by @vossgraves
fix(ui): port 4nx3b's navigation bar geometry and glass details — by @vossgraves
fix: review findings from the last three days of canary — by @vossgraves
fix(lyrics): the three-dot opens the lyrics sheet; Apple popup only in the experience — by @vossgraves
fix(build): import MessageDigest; java.* in the Gradle DSL resolves to the java extension — by @vossgraves
fix: review findings, round two — by @vossgraves
fix(nav): the Apple Music tab bar is always the one-row layout — by @vossgraves
fix(nav): solid Material 3 one-row bar when the tab bar is not glass — by @vossgraves
fix(flamingo): shared lyrics screen, working back, queue clear of the controls — by @vossgraves
fix(qq): stream URLs, ticket refresh and protected-file handling — by @vossgraves
fix(amazon): gen-2 auth, Amazon-only results and a stricter CENC decryptor — by @vossgraves
fix(playback): a matched whole-file download outlives the source search budget — by @vossgraves
fix(settings): Additional downloads row on the main settings page — by @vossgraves
fix(player): make the audio offload toggle work again — by @vossgraves
fix(playback): crossfade hand-off never restarts the incoming song from 0 — by @vossgraves
fix(settings): restart notice on search switches, item prefs from LocalItemPreferences — by @vossgraves
fix(build): repair the 11 compile errors from the speed-mode passes — by @vossgraves
fix(updater): compare stable manifest versionCode strictly — by @vossgraves
fix(splash): feed scaled time to the integrator in bounded substeps — by @vossgraves
fix(player): own the Flamingo custom-image frame and hard-gate retained blur — by @vossgraves
fix(playlist): show the plain header when liquid glass is inactive — by @vossgraves
fix(nav): serialize root-button taps and keep pending re-select intent — by @vossgraves
fix(sources): keep cache shortcuts and YouTube fallback inside the gated chain — by @vossgraves
fix(settings): disable blur-overridden mini-player styles and search switches — by @vossgraves
fix(back): route inline player pages, search anchor, search-result slides, menu fade — by @vossgraves
fix(crossfade): keep committed hand-offs, sync emptied ranges, retire the fade loop — by @vossgraves
fix(about): cap the whole About list to 840dp, centred — by @vossgraves
fix(shell): SukiSU solid fallback, stock-colour gate, font search key, frosted recording — by @vossgraves
fix: BitChord queue owns back; frosted gate follows rail visibility — by @vossgraves
fix(player): inline panels release Back when the player collapses — by @vossgraves
fix: settings predictive slides, crossfade exception cleanup, haptics root reads, source docs — by @vossgraves
fix(lyrics): status bar visible, controls auto-hide, shared codec label, enhanced lyrics — by @vossgraves
fix(crossfade): transition once per pair, bounded hard cut, no-rewind restore — by @vossgraves
fix(lyrics): scroll keeps controls, landscape renderer stays mounted, all badges via StreamQuality — by @vossgraves
fix: import StreamQuality.label at Looper/Immersive badge sites, restore LocalContext import — by @vossgraves
fix(lyrics): single karaoke scroll owner and TTML JSON envelopes — by @vossgraves
fix(updates): honor channel choice without unsafe offers — by @vossgraves
fix(acoustics): support practical content and hostname inputs — by @vossgraves
fix(settings): bound descriptions and share restart prompts — by @vossgraves
fix(settings): register acoustic quality search target — by @vossgraves
fix(ci): stream diagnostics and run exact unit variant — by @vossgraves
fix(lyrics): preserve Unicode and safe phonetic alignment — by @vossgraves
fix(lyrics): share phonetic policy with SimpMusic — by @vossgraves
fix(lyrics): reject failed and obsolete AI results — by @vossgraves
fix(lifecycle): isolate downloader and account request ownership — by @vossgraves
fix(updates): retain download ownership through cancellation cleanup — by @vossgraves
fix(lyrics): bind target freshness, metadata eligibility and live clocks — by @vossgraves
fix(lyrics): accept complete numeric entity digit sequences — by @vossgraves
fix(lyrics): retain plain Unicode payloads through lenient JSON parsing — by @vossgraves
fix(playback): keep YouTube playlist queues finite — by @vossgraves
fix(playback): share the finite playlist request budget — by @vossgraves
fix(auth): recover embedded YouTube login without staging playback credentials — by @vossgraves
fix(youtube): own add-to-playlist dialog loading and cancellation — by @vossgraves
fix(auth): recover login retries and retain nested repair ownership — by @vossgraves
fix(auth): pass repair ownership through playback resolution — by @vossgraves
fix(quality): repair hosted analysis and cover source policies — by @vossgraves
fix(quality): load DAGP beside root AGP and compare with dev — by @vossgraves
fix(quality): weigh external runtime artifacts only — by @vossgraves
fix(quality): omit absent compiler classpath entries from the manifest — by @vossgraves
fix: login redirect, verified lossless labels, heatmap, playback fixes — by @vossgraves
fix(quality): resolve a real integration base for manual dispatched quality runs — by @vossgraves
fix(quality): cover the GMS flavor source set in the Kotlin quality gate — by @vossgraves
fix(quality): expose semantic_base on the extended unit-test dispatch — by @vossgraves
fix(security): stop persisting checkout credentials in validation workflows — by @vossgraves
fix(playback): bind observed evidence to the declared rendition — by @vossgraves
fix(acoustics): cap heat raster size and make rendering cancellable — by @vossgraves
fix(feedback): pass feedback action to the expanded playback error layout — by @vossgraves
fix(db): keep observed evidence through declared metadata backfills — by @vossgraves
fix(playback): apply the rendition rule to the Apple codec backfill — by @vossgraves
fix(feedback): redact and bound whole drafts; clear delivered crashes — by @ArchiveTune Agent
fix(settings): restore the old settings blur/fade timing — by @vossgraves
fix(quality): fail formatting only when a change adds debt — by @vossgraves
fix(checks): read submodule pointers without a blob size — by @vossgraves
fix(acoustics): plain-language graph text, a colour key and a cutoff marker — by @vossgraves
fix(pool): tighten failover correctness and cancellation — by @vossgraves
fix(pool): cut feed request amplification (TTLs, re-lease, 401 backoff) — by @vossgraves
fix(pool): close failover and backoff gaps — by @vossgraves
fix(pool): repoint archivepool endpoints to natune workers host — by @vossgraves
fix(pool): awaited re-lease for expired Tidal pool tokens — by @vossgraves
fix(news): reject HTML shells and non-2xx on content fetches — by @vossgraves
fix(pool): order re-lease params for the trailing-lambda call — by @vossgraves
fix(pool): stamp, persist and cancel cleanly on expiry re-lease — by @vossgraves
fix(pool): gate the suspend re-lease on the pooled-Tidal branch — by @vossgraves
fix(pool): keep the rescue gate complexity-free at call sites — by @vossgraves
fix(pool): mirror the resolver's effective chain in the rescue gate — by @vossgraves
Performance
perf(home): record the frosted backdrop only when a surface uses it; align Spotify home with YumaPlayer; add CREDITS — by @t
perf(apk): restore the BouncyCastle packaging excludes upstream had, ~1.17 MiB — by @t
perf(home): remove the top blur overlay from the home screen — by @vossgraves
perf(player): gate the position ticker on the lifecycle — by @vossgraves
perf(app): drop the Coil memory cache when the UI is hidden — by @vossgraves
perf(ui): stop hidden player surfaces recomposing during background playback — by @vossgraves
perf(audio): reuse processor output buffers, bound MusicService caches — by @vossgraves
perf(ui): gate pollers and animations on the lifecycle, cut recomposition — by @vossgraves
perf(size): Additional downloads, smaller icon rasters, drop unused fonts — by @vossgraves
perf(settings): one collector per page, lazy pages, restart-to-apply for global layout settings — by @vossgraves
perf(settings): defer the Discord account avatar until the opening transition ends — by @vossgraves
perf(settings): read indirect helper preferences from the page snapshot — by @vossgraves
Refactors
refactor(sponsorblock): drop unreferenced use cases and observeSettings — by @vossgraves
refactor(home): drop the unwired personalized quick-picks loader — by @vossgraves
refactor(deezer): drop unused instance-count accessors — by @vossgraves
refactor(apple-music): drop the unused playerControlsExpanded state — by @vossgraves
refactor(ui): one shared glass header for the detail screens — by @t
refactor(canvas): use the shared preference components in canvas settings — by @vossgraves
refactor(playback): expose real extractor policy seams — by @vossgraves
refactor(acoustics): split heat-graph drawing into axis, cutoff and key helpers — by @vossgraves
refactor(pool): split oversized functions flagged by detekt — by @vossgraves
refactor(pool): finish splitting detekt-flagged functions — by @vossgraves
refactor(pool): extract the expiry re-lease into PoolExpiryReleaser — by @vossgraves
Documentation
docs(settings): note the hide-on-scroll navigation bar — by @vossgraves
docs(listen-together): reattach the disconnect KDoc to disconnect() — by @vossgraves
docs: record the canary audit and appearance port decisions — by @vossgraves
docs: credit upstream authors in LICENSE attribution notices — by @t
docs(audit): record the 2026-10-09 findings, confirmed defects and blockers — by @t
docs(review): 2026-10-10 review of hoplite and Termux-session work, source logins and mapping — by @vossgraves
docs(license): credit the origin of ported audio files, add missing MIT notices — by @vossgraves
docs(credits): credit tryptz, LastWave-Native and the audio libraries in the README — by @vossgraves
docs: refresh README and Claude docs for Stable/Nightly and continuation — by @vossgraves
docs: consolidate review notes and record local follow-up boundaries — by @vossgraves
docs: record completed source review and pre-CI test checkpoint — by @vossgraves
docs(youtube): document integrated source and pending validation — by @vossgraves
docs(youtube): record authored unexecuted regression checkpoint — by @vossgraves
docs(youtube): record review correction regression checkpoint — by @vossgraves
docs(quality): document dispatched base and semantic_base selection — by @vossgraves
docs(db): correct itag rationale in evidence identity note — by @vossgraves
Build / CI
build: ship automix analysis as an opt-in artifact (-Pautomix) — by @t
ci: add a free-runner Kotlin compile check on push — by @t
ci: also run the Kotlin check on canary pushes — by @t
ci: run canary, tests, PR build and header checks on ubuntu-latest — by @vossgraves
build: skip lintVital on release assembles — by @vossgraves
ci: drop the Kotlin Check workflow, run unit tests on demand only — by @vossgraves
build(size): cut APK by ~3 MB: WebP drawables, locale filters, narrower R8 keeps — by @vossgraves
ci(signing): sign with apksigner directly, skip the unused v1 block — by @vossgraves
ci(updates): publish the update-feed manifests; nightly FOSS links leave /releases/latest — by @vossgraves
ci(tests): run the gms-mobile-universal unit-test task, not the first match — by @vossgraves
ci(canary): build the final Canary release as Nightly — by @vossgraves
ci: retire canary.yml and document the two-channel model — by @vossgraves
Other changes
chore: remove redundant and stale code comments — by @vossgraves
chore: drop leftover banner and section-marker comments — by @usehoplite [bot]
Merge pull request #179 from NatuneGroup/hoplite/aigina-baf67c65 — by @vossgraves
chore: drop the Library support card and point repo links at NatuneGroup — by @t
Merge pull request #183 from NatuneGroup/hoplite/aigina-baf67c65--playback-refinements — by @vossgraves
chore(qa): enable optimized debug builds on a visual Android image — by @usehoplite [bot]
chore: remove generated patch recovery backup — by @usehoplite [bot]
Merge pull request #184 from NatuneGroup/hoplite/aigina-baf67c65--player-completion — by @vossgraves
Merge pull request #186 from NatuneGroup/hoplite/aigina-baf67c65--player-completion--local-audio-observations--catalog-pool — by @vossgraves
Merge pull request #187 from NatuneGroup/hoplite/aigina-baf67c65--player-completion--local-audio-observations--spotify-requests — by @vossgraves
Merge pull request #185 from NatuneGroup/hoplite/aigina-baf67c65--player-completion--local-audio-observations — by @vossgraves
chore: drop agent plan artifact from the branch — by @t
chore: keep agent plan artifacts out of the repo — by @t
chore: merge stacked license banners into one, preserving every attribution and port note — by @t
Revert "fix(player): route LOOPER through the editorial queue/controls, use fork lyrics pattern" — by @t
Revert "feat(player): port Looper player style from 4nx3b (files, Jost fonts, dispatch, settings entry)" — by @t
chore(ci): trigger the pull_request build event — by @t
chore(ci): drop the nudge file — by @t
docs(credits,lyrics): state actual provenance for the AMLL parameter ports — by @t
fix(playback,player): stop the crash and the 3003 skip loop, finish the nav bar — by @vossgraves
fix(looper,flamingo): add the last resources the build reported missing — by @vossgraves
Merge #188 : stop Listen Together loading hangs and soften Spotify Home glass — by @vossgraves
test(home): claim the queued request after the active load starts — by @vossgraves
Merge #192 : crash and 3003 skip loop fixes, port Looper and Flamingo, unify 5s double-tap seek — by @vossgraves
feat(home,codec): exact 4nx3b home screen and media info sheet — by @vossgraves
fix(lyrics,sources): match fork LyricsProvider interface, scope Amazon preference — by @vossgraves
ui: nav bar styles and blur toggle — by @vossgraves
Revert "feat(nav): wire the mini player pill into the compact row" — by @vossgraves
Revert "feat(miniplayer): port CompactMiniPlayerContent" — by @vossgraves
merge: title-fading-edges (parallel branch) — by @vossgraves
merge: settings-perf-pages + settings-perf-restart (parallel branch) — by @vossgraves
test: cover blur policy, restart-scoped settings and settings perf decisions — by @vossgraves
chore: remove dead code — by @vossgraves
merge: post-code-tests (parallel branch) — by @vossgraves
merge: scrutiny fixes (a) — by @vossgraves
merge: scrutiny fixes (b) — by @vossgraves
merge: scrutiny fixes (c) — by @vossgraves
merge: lyrics page fixes (status bar, auto-hide controls, shared codec label, enhanced lyrics) — by @vossgraves
test(crossfade): drop stale duplicate of CrossfadeFailureTrackerTest — by @vossgraves
Merge branch 'cont/shared-glass' into mission/drop-canary — by @vossgraves
Merge branch 'cont/shared-player-settings' into mission/drop-canary — by @vossgraves
Merge branch 'cont/canvas-settings' into mission/drop-canary — by @vossgraves
Merge branch 'cont/upstream-lyrics' into mission/drop-canary — by @vossgraves
test: cover continuation lyrics, volume and settings logic — by @vossgraves
Merge branch 'cont/docs' into mission/drop-canary — by @vossgraves
chore(dsp): refresh approved native maintenance dependencies — by @vossgraves
chore(native): trim unselected vendor development inputs — by @vossgraves
merge: integrate explicit channel choice and safe offers — by @vossgraves
merge: integrate recorded DSP maintenance and safe vendor trim — by @vossgraves
merge: integrate recorded bounded acoustic backend — by @vossgraves
chore(cleanup): remove audited orphan helpers and unused strings — by @vossgraves
chore(cleanup): remove unreachable USB dependency island — by @vossgraves
merge: integrate recorded settings text and restart fix — by @vossgraves
merge: integrate recorded dead code and USB island cleanup — by @vossgraves
merge: integrate recorded acoustic quality UI — by @vossgraves
merge: integrate AI correctness and lifecycle fixes — by @vossgraves
merge: integrate Unicode lyrics and Japanese dictionary lifecycle — by @vossgraves
merge: integrate separate CI gates and maintained documentation — by @vossgraves
chore: finalize bounded cleanup and integrated development docs — by @vossgraves
merge: integrate updater ownership and shared search snapshot fixes — by @vossgraves
merge: integrate bounded lyric freshness and language fixes — by @vossgraves
merge: complete numeric lyric entity decoding — by @vossgraves
test(ui): cover updater and settings regression policies — by @vossgraves
test(backend): cover acoustic and lifecycle cleanup boundaries — by @vossgraves
test(lyrics): cover Unicode, AI retries and downloaded dictionary — by @vossgraves
merge: integrate focused UI and updater regression tests — by @vossgraves
merge: integrate focused lyrics and real dictionary tests — by @vossgraves
merge: integrate focused backend and cleanup regression tests — by @vossgraves
Merge pull request #198 from NatuneGroup/mission/drop-canary — by @vossgraves
chore(youtube): update InnerTubeX to v0.9.2 — by @vossgraves
merge: integrate finite YouTube playlist queues and whole-list actions — by @vossgraves
merge: integrate owned YouTube login recovery and verification — by @vossgraves
merge: integrate scoped InnerTubeX dependency maintenance — by @vossgraves
test(youtube): add finite playlist queue regression fixtures — by @vossgraves
test(auth): cover owned YouTube login recovery and session races — by @vossgraves
test(playback): cover target extractor and failsafe contracts — by @vossgraves
test(youtube): cover subset insertion and persistence compatibility — by @vossgraves
merge: integrate finite playlist regression fixtures and production seams — by @vossgraves
merge: integrate owned YouTube login regression fixtures — by @vossgraves
merge: integrate extractor contract fixtures and primary cancellation guard — by @vossgraves
merge: integrate confirmed playlist dialog ownership corrections — by @vossgraves
merge: integrate confirmed login retry and repair ownership corrections — by @vossgraves
merge: integrate original auth repair binding follow-up — by @vossgraves
Merge pull request #199 from NatuneGroup/mission/youtube-followup — by @vossgraves
chore(quality): add readiness gates and CI validation — by @vossgraves
style: apply reviewed Kotlin formatter output — by @vossgraves
chore(db): add exported Room schema 36 — by @vossgraves
feedback: opt-in reviewable playback-error and next-launch crash reports — by @ArchiveTune Agent
Rename user-facing app name to Natune and ship the Natune icon set — by @vossgraves
test(acoustics): order raster test assert imports — by @vossgraves
Merge pull request #202 from NatuneGroup/mission/agent-readiness-ci-20261018 — by @vossgraves
Merge pull request #203 from NatuneGroup/mission/app-fixes-20261018 — by @vossgraves
Merge pull request #205 from NatuneGroup/mission/natune-rename-20261019 — by @vossgraves
merge: integrate dev (Natune rename, app fixes, readiness) into feedback — by @vossgraves
Merge pull request #204 from NatuneGroup/mission/feedback-20261019 — by @vossgraves
chore(agents): track shared Claude Code settings and skills [skip ci] — by @vossgraves
Merge pull request #208 from NatuneGroup/mission/format-gate-ratchet-20261019 — by @vossgraves
Merge remote-tracking branch 'natune/dev' into fix/settings-fade-timing — by @vossgraves
Merge pull request #207 from NatuneGroup/fix/settings-fade-timing — by @vossgraves
chore(icons): bump IconPack to restore Ids 320974, 539452 and 980484 — by @vossgraves
Merge pull request #209 from NatuneGroup/feat/natune-icon-pack — by @vossgraves
style(acoustics): ktfmt the quality graph UI files (no behaviour change) — by @vossgraves
Merge pull request #211 from NatuneGroup/fix/acoustic-graph-clarity — by @vossgraves
fix(pool,presence): await backoff load and harden heartbeat transport — by @vossgraves
style(pool): apply spotless formatting to new and touched sources — by @vossgraves
style(pool): apply spotless formatting to refactored sources — by @vossgraves
style(settings): apply spotless formatting to IntegrationScreen — by @vossgraves
style(settings): keep shared scaffold block byte-identical in IntegrationScreen — by @vossgraves
style(news): apply spotless formatting to NewsRepository — by @vossgraves
chore(config): repoint presence worker default to natune host — by @vossgraves
style(pool): reflow PoolEndpoints docs for formatter budget — by @vossgraves
style(pool): apply spotless formatting to re-lease sources — by @vossgraves
style(pool): apply spotless formatting to the releaser — by @vossgraves
Merge pull request #215 from NatuneGroup/feat/archivepool-cloudflare — by @vossgraves
You can’t perform that action at this time.