From ae7e05c579219a46e462954355213cd9d391fd70 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Fri, 23 Oct 2026 12:59:07 -0400 Subject: [PATCH] docs: Android comments say what the app does, not how it came to be (#6277) Every flagged comment block in the Android app, its tests and its XML/TOML config, rewritten with the cited issue in view: the constraint is kept, the story behind it dropped, and issue, milestone, rule, phase and drift ids, dates and operator quotes removed. "Mirrors the Flutter client's X" pointers are gone; that client is no longer in the repo. Comments that no longer matched the code, corrected: - SyncController: a 410 resets the cursor and re-pulls; it never dropped the three local caches. - PlayerFactory, PlayerModule, AudioCacheIndexEntity, CacheConfig, CacheSource: there is no eviction worker and no liked-track bucket; SimpleCache evicts by plain LRU over the rolling cap, and the liked cap is stored but unenforced. - CacheSettings, StorageCard: the prefetcher exists (AudioPrefetcher); pin-on-like still does not. - LibraryApi, LibraryRepository, BrowseViewModel: the cache now carries the missing-file mark; the browse indexes stay server-backed for one source of grouping. - OutputRoute: UPnP routes exist; only CAST and SONOS are reserved. - PlayerFactory, RemotePlayerState, OutputPickerController: a failed transport command does not drop the UPnP route. - LibraryScreen: History, Liked and Hidden are real tabs, not placeholders. - AVTransportClient: the extend loop lives in SonosQueueLoader. - "the operator" meaning the listener now says "the user". Verified with a Kotlin lexer comparing every file's non-comment tokens against HEAD: 394 files, 0 differences. Co-Authored-By: Claude Opus 5.5 --- android/app/build.gradle.kts | 23 ++--- android/app/src/main/AndroidManifest.xml | 9 +- .../com/fabledsword/minstrel/MainActivity.kt | 2 +- .../minstrel/MinstrelApplication.kt | 13 ++- .../admin/data/AdminQuarantineRepository.kt | 7 +- .../admin/data/AdminRequestsRepository.kt | 2 +- .../admin/data/AdminTagSourcesRepository.kt | 2 +- .../admin/data/AdminUsersRepository.kt | 4 +- .../admin/ui/AdminInvitesViewModel.kt | 2 +- .../admin/ui/AdminQuarantineViewModel.kt | 6 +- .../admin/ui/AdminRequestsViewModel.kt | 2 +- .../admin/ui/AdminTagSourcesViewModel.kt | 2 +- .../minstrel/admin/ui/AdminUsersViewModel.kt | 2 +- .../minstrel/api/AuthCookieInterceptor.kt | 16 +--- .../minstrel/api/BaseUrlInterceptor.kt | 9 +- .../minstrel/api/CleartextGuard.kt | 5 +- .../com/fabledsword/minstrel/api/ErrorCopy.kt | 4 +- .../fabledsword/minstrel/api/NetworkModule.kt | 17 ++-- .../minstrel/api/endpoints/AdminInvitesApi.kt | 5 +- .../api/endpoints/AdminTagSourcesApi.kt | 6 +- .../minstrel/api/endpoints/CastApi.kt | 2 +- .../minstrel/api/endpoints/DiagnosticsApi.kt | 2 +- .../minstrel/api/endpoints/DiscoverApi.kt | 3 +- .../minstrel/api/endpoints/LibraryApi.kt | 13 ++- .../minstrel/api/endpoints/MeApi.kt | 4 +- .../api/endpoints/NotificationsApi.kt | 2 +- .../minstrel/api/endpoints/PlaylistsApi.kt | 6 +- .../minstrel/api/endpoints/QuarantineApi.kt | 2 +- .../minstrel/api/endpoints/ReplayGainApi.kt | 2 +- .../minstrel/api/endpoints/RequestsApi.kt | 2 +- .../minstrel/api/endpoints/SyncApi.kt | 2 +- .../minstrel/auth/AuthController.kt | 2 +- .../fabledsword/minstrel/auth/AuthStore.kt | 20 ++-- .../fabledsword/minstrel/auth/SessionVault.kt | 13 ++- .../minstrel/auth/ui/AuthGateViewModel.kt | 4 +- .../minstrel/cache/CacheIndexer.kt | 16 ++-- .../minstrel/cache/ShuffleSource.kt | 11 +-- .../minstrel/cache/audiocache/CacheConfig.kt | 16 ++-- .../cache/audiocache/CacheSettings.kt | 18 ++-- .../minstrel/cache/db/AppDatabase.kt | 45 ++++----- .../minstrel/cache/db/DatabaseModule.kt | 9 +- .../minstrel/cache/db/TypeConverters.kt | 15 ++- .../minstrel/cache/db/dao/CachedLikeDao.kt | 7 +- .../cache/db/dao/CachedPlaylistTrackDao.kt | 10 +- .../cache/db/dao/CachedQuarantineDao.kt | 3 +- .../minstrel/cache/db/dao/CachedTrackDao.kt | 2 +- .../db/entities/AudioCacheIndexEntity.kt | 12 +-- .../cache/db/entities/AuthSessionEntity.kt | 6 +- .../cache/db/entities/CachedAlbumEntity.kt | 7 +- .../cache/db/entities/CachedArtistEntity.kt | 10 +- .../entities/CachedHistorySnapshotEntity.kt | 3 +- .../db/entities/CachedHomeIndexEntity.kt | 3 +- .../cache/db/entities/CachedLikeEntity.kt | 7 +- .../cache/db/entities/CachedMutationEntity.kt | 5 +- .../db/entities/CachedNotificationEntity.kt | 2 +- .../CachedNotificationSettingsEntity.kt | 2 +- .../cache/db/entities/CachedPlaylistEntity.kt | 3 +- .../db/entities/CachedPlaylistTrackEntity.kt | 3 +- .../db/entities/CachedQuarantineEntity.kt | 4 +- .../db/entities/CachedResumeStateEntity.kt | 11 +-- .../cache/db/entities/CachedTrackEntity.kt | 7 +- .../db/entities/DiagnosticEventEntity.kt | 4 +- .../cache/db/entities/SyncMetadataEntity.kt | 8 +- .../minstrel/cache/mutations/MutationQueue.kt | 40 ++++---- .../cache/mutations/MutationReplayer.kt | 8 +- .../minstrel/cache/sync/SyncController.kt | 24 +++-- .../connectivity/NetworkStatusController.kt | 26 +++--- .../connectivity/ReachabilityMachine.kt | 11 +-- .../diagnostics/DiagnosticsReporter.kt | 14 ++- .../diagnostics/DiagnosticsUploader.kt | 2 +- .../diagnostics/TransportFlapDetector.kt | 7 +- .../discover/data/DiscoverRepository.kt | 15 +-- .../minstrel/discover/ui/DiscoverScreen.kt | 10 +- .../minstrel/discover/ui/DiscoverTiles.kt | 6 +- .../minstrel/discover/ui/DiscoverViewModel.kt | 2 +- .../minstrel/events/EventsStream.kt | 2 +- .../fabledsword/minstrel/events/LiveEvent.kt | 3 +- .../minstrel/events/LiveEventsDispatcher.kt | 2 +- .../minstrel/events/ReconnectBackoff.kt | 10 +- .../history/data/HistoryRepository.kt | 8 +- .../minstrel/history/ui/HistoryTab.kt | 4 +- .../minstrel/home/data/HomeRepository.kt | 9 +- .../minstrel/home/ui/HomeScreen.kt | 93 ++++++++----------- .../library/data/LibraryRepository.kt | 21 ++--- .../library/ui/AlbumDetailViewModel.kt | 2 +- .../minstrel/library/ui/ArtistDetailScreen.kt | 6 +- .../library/ui/ArtistDetailViewModel.kt | 9 +- .../minstrel/library/ui/BrowseViewModel.kt | 13 +-- .../minstrel/library/ui/GenresTab.kt | 2 +- .../minstrel/library/ui/LibraryScreen.kt | 16 +--- .../minstrel/library/ui/YearsTab.kt | 2 +- .../minstrel/library/widgets/AlbumCard.kt | 11 +-- .../minstrel/library/widgets/ArtistCard.kt | 12 +-- .../minstrel/likes/data/LikesRepository.kt | 70 ++++++-------- .../fabledsword/minstrel/likes/ui/LikedTab.kt | 6 +- .../minstrel/metadata/HomeArtistPrewarmer.kt | 10 +- .../minstrel/metadata/MetadataProvider.kt | 13 +-- .../minstrel/models/AdminQuarantineItem.kt | 2 +- .../minstrel/models/AdminTagSourceRef.kt | 2 +- .../minstrel/models/AdminUserRef.kt | 2 +- .../fabledsword/minstrel/models/AlbumRef.kt | 3 +- .../fabledsword/minstrel/models/ArtistRef.kt | 8 +- .../fabledsword/minstrel/models/Discover.kt | 15 ++- .../com/fabledsword/minstrel/models/Invite.kt | 5 +- .../minstrel/models/ListenBrainzStatus.kt | 5 +- .../fabledsword/minstrel/models/MyProfile.kt | 4 +- .../fabledsword/minstrel/models/Playlist.kt | 18 ++-- .../minstrel/models/QuarantineRef.kt | 3 +- .../fabledsword/minstrel/models/Request.kt | 7 +- .../fabledsword/minstrel/models/TrackRef.kt | 11 +-- .../fabledsword/minstrel/models/UserRef.kt | 2 +- .../models/wire/AdminQuarantineWire.kt | 5 +- .../models/wire/AdminTagSourceWire.kt | 2 +- .../minstrel/models/wire/BrowseWire.kt | 2 +- .../minstrel/models/wire/DiscoverWire.kt | 16 ++-- .../minstrel/models/wire/EventsWire.kt | 4 +- .../minstrel/models/wire/PlaylistWire.kt | 8 +- .../models/wire/QuarantineMineWire.kt | 9 +- .../minstrel/models/wire/RadioResponseWire.kt | 3 +- .../minstrel/models/wire/ReplayGainWire.kt | 2 +- .../minstrel/models/wire/RequestWire.kt | 3 +- .../minstrel/models/wire/SyncResponseWire.kt | 13 +-- .../minstrel/models/wire/TrackWire.kt | 15 ++- .../minstrel/nav/DetailSeedCache.kt | 3 +- .../minstrel/nav/MinstrelNavGraph.kt | 8 +- .../data/NotificationSettingsRepository.kt | 6 +- .../data/NotificationsRepository.kt | 8 +- .../notifications/delivery/BootReceiver.kt | 4 +- .../delivery/DeliveryLauncher.kt | 2 +- .../notifications/delivery/DeliveryPlan.kt | 6 +- .../notifications/delivery/DeliveryService.kt | 4 +- .../delivery/NotificationPoster.kt | 2 +- .../delivery/NotificationSync.kt | 4 +- .../notifications/ui/NotificationLinks.kt | 2 +- .../ui/NotificationSettingsScreen.kt | 6 +- .../ui/NotificationSettingsViewModel.kt | 2 +- .../ui/NotificationsViewModel.kt | 2 +- .../minstrel/player/LikeMediaCallback.kt | 3 +- .../player/MinstrelForwardingPlayer.kt | 6 +- .../minstrel/player/MinstrelPlayerService.kt | 6 +- .../minstrel/player/PlayEventsReporter.kt | 33 +++---- .../minstrel/player/PlaybackErrorReporter.kt | 5 +- .../minstrel/player/PlayerController.kt | 72 ++++++-------- .../minstrel/player/PlayerFactory.kt | 28 +++--- .../minstrel/player/PlayerModule.kt | 11 +-- .../minstrel/player/RemotePlayerState.kt | 4 +- .../minstrel/player/RemoteStallWatchdog.kt | 13 +-- .../minstrel/player/ResumeController.kt | 4 +- .../minstrel/player/StreamTokenProvider.kt | 2 +- .../minstrel/player/TransportObservation.kt | 13 ++- .../player/gain/GainAudioProcessor.kt | 4 +- .../minstrel/player/gain/GainMath.kt | 4 +- .../minstrel/player/gain/ReplayGainStore.kt | 2 +- .../player/output/OutputPickerController.kt | 23 ++--- .../minstrel/player/output/OutputRoute.kt | 8 +- .../player/output/SonosQueueLoader.kt | 33 +++---- .../player/output/upnp/AVTransportClient.kt | 18 ++-- .../minstrel/player/ui/MiniPlayer.kt | 5 +- .../minstrel/player/ui/NowPlayingScreen.kt | 13 ++- .../minstrel/player/ui/QueueDragMath.kt | 2 +- .../minstrel/player/ui/QueueRow.kt | 26 +++--- .../playlists/data/PlaylistPlayback.kt | 2 +- .../playlists/data/PlaylistsRepository.kt | 16 ++-- .../playlists/ui/PlaylistDetailScreen.kt | 16 ++-- .../playlists/ui/PlaylistsListScreen.kt | 2 +- .../playlists/widgets/OfflinePoolCard.kt | 2 +- .../quarantine/data/QuarantineRepository.kt | 6 +- .../quarantine/ui/HiddenTabViewModel.kt | 9 +- .../requests/data/RequestsRepository.kt | 5 +- .../minstrel/requests/ui/RequestsScreen.kt | 5 +- .../minstrel/requests/ui/RequestsViewModel.kt | 10 +- .../minstrel/search/ui/SearchViewModel.kt | 4 +- .../settings/data/NormalizationPrefs.kt | 2 +- .../settings/data/NormalizationRepository.kt | 4 +- .../settings/ui/AboutCardViewModel.kt | 4 +- .../minstrel/settings/ui/NormalizationCard.kt | 2 +- .../minstrel/settings/ui/SettingsViewModel.kt | 2 +- .../minstrel/settings/ui/StorageCard.kt | 14 +-- .../fabledsword/minstrel/shared/ServerUrls.kt | 3 +- .../minstrel/shared/UpdateVeilController.kt | 15 ++- .../shared/widgets/AppBarActionsViewModel.kt | 2 +- .../minstrel/shared/widgets/CachedDot.kt | 11 +-- .../minstrel/shared/widgets/EmptyState.kt | 2 +- .../minstrel/shared/widgets/LikeButton.kt | 2 +- .../shared/widgets/MainAppBarActions.kt | 6 +- .../shared/widgets/PullToRefreshScaffold.kt | 4 - .../minstrel/shared/widgets/ServerImage.kt | 4 +- .../minstrel/shared/widgets/ShellScaffold.kt | 7 +- .../minstrel/shared/widgets/Skeletons.kt | 7 +- .../minstrel/shared/widgets/TrackRow.kt | 17 ++-- .../trackactions/AddToPlaylistSheet.kt | 4 +- .../widgets/trackactions/HideTrackSheet.kt | 2 +- .../widgets/trackactions/TrackActionsSheet.kt | 4 +- .../minstrel/theme/FabledSwordTheme.kt | 8 +- .../minstrel/theme/FabledSwordTokens.kt | 12 +-- .../minstrel/theme/MinstrelTheme.kt | 8 +- .../fabledsword/minstrel/theme/Typography.kt | 11 +-- .../minstrel/update/api/ClientVersionApi.kt | 3 +- .../minstrel/update/data/InstallOutcome.kt | 16 ++-- .../minstrel/update/data/SelfUpdateSession.kt | 10 +- .../update/data/UpdateBannerController.kt | 8 +- .../minstrel/update/data/UpdateRepository.kt | 17 ++-- .../minstrel/update/ui/UpdateBanner.kt | 14 +-- .../src/main/res/drawable/ic_notification.xml | 2 +- .../main/res/xml/network_security_config.xml | 11 +-- .../admin/data/AdminRequestsRepositoryTest.kt | 2 +- .../minstrel/api/AuthCookieInterceptorTest.kt | 17 ++-- .../minstrel/api/CleartextGuardTest.kt | 2 +- .../auth/AuthStoreSessionVaultTest.kt | 8 +- .../mutations/SupersededToggleIdsTest.kt | 2 +- .../minstrel/cache/sync/SyncControllerTest.kt | 7 +- .../connectivity/ReachabilityMachineTest.kt | 13 ++- .../diagnostics/TransportFlapDetectorTest.kt | 2 +- .../minstrel/metadata/MetadataProviderTest.kt | 2 +- .../models/ArtistSuggestionReasonTest.kt | 4 +- .../models/SuggestionSnoozeRefTest.kt | 2 +- .../NotificationSettingsRepositoryTest.kt | 2 +- .../data/NotificationsRepositoryTest.kt | 2 +- .../minstrel/player/DropUnavailableTest.kt | 2 +- .../minstrel/player/RemotePlayerStateTest.kt | 2 +- .../player/output/SonosAlbumPlayTest.kt | 2 +- .../player/output/upnp/SoapClientTest.kt | 2 +- .../minstrel/player/ui/QueueDragMathTest.kt | 2 +- .../data/PlaylistTrackAvailabilityTest.kt | 2 +- .../data/NormalizationRepositoryTest.kt | 2 +- .../shared/UpdateVeilControllerTest.kt | 5 +- .../minstrel/theme/BundledFontsTest.kt | 10 +- android/gradle/libs.versions.toml | 2 +- 228 files changed, 844 insertions(+), 1088 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index e185e97e..0b0cf2a7 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -1,9 +1,9 @@ plugins { alias(libs.plugins.android.application) // kotlin-android NOT applied: AGP 9 enables built-in Kotlin by default, - // and KSP 2.3.x supports it (PR #2674, merged Oct 2025). serialization - // + compose-compiler are language-level Kotlin compiler plugins and - // still need explicit application. + // and KSP 2.3.x supports it. serialization + compose-compiler are + // language-level Kotlin compiler plugins and still need explicit + // application. alias(libs.plugins.kotlin.serialization) alias(libs.plugins.compose.compiler) alias(libs.plugins.ksp) @@ -31,14 +31,9 @@ android { // // versionCode is minutes since 2020-01-01 at BUILD time. It is the // value the platform decides installs by, so it must be monotonic by - // construction. - // - // This comment used to say versionCode was a commit count and that it - // was "monotonic forever". It was neither — a commit count runs ahead - // on `dev`, so a dev build outranked the `main` release meant to - // replace it and Android refused the install as a downgrade. Worth - // knowing the claim was here, stated as a reassurance, while the bug - // it denied was live. + // construction. Not a commit count: that runs ahead on `dev`, so a dev + // build would outrank the `main` release meant to replace it and + // Android would refuse the install as a downgrade. val versionNameOverride = (project.findProperty("MINSTREL_VERSION_NAME") as String?)?.takeIf { it.isNotBlank() } val versionCodeOverride = @@ -73,9 +68,9 @@ android { "proguard-rules.pro", ) // Signed with the release key or not at all. Falling back to the - // debug key made a missing secret into a published APK that no - // install could ever update (family idea #5103, practice 2). An - // unsigned build installs nowhere, so the gap shows at once. + // debug key would turn a missing secret into a published APK that no + // install could ever update. An unsigned build installs nowhere, so + // the gap shows at once. signingConfig = if (System.getenv("ANDROID_KEYSTORE_PATH").isNullOrEmpty()) { null diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a23ca32d..cd8f9563 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ - @@ -84,11 +84,8 @@ - + ` response path. * - * kxml2 is on the test classpath (Task 4), so + * kxml2 is on the test classpath, so * `XmlPullParserFactory.newInstance()` resolves on the JVM. */ class SoapClientTest { diff --git a/android/app/src/test/java/com/fabledsword/minstrel/player/ui/QueueDragMathTest.kt b/android/app/src/test/java/com/fabledsword/minstrel/player/ui/QueueDragMathTest.kt index db08bd35..deeb9c10 100644 --- a/android/app/src/test/java/com/fabledsword/minstrel/player/ui/QueueDragMathTest.kt +++ b/android/app/src/test/java/com/fabledsword/minstrel/player/ui/QueueDragMathTest.kt @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test import kotlin.test.assertEquals /** - * The queue drag math (#2436). The delta cases mirror web's + * The queue drag math. The delta cases mirror web's * queue-row-math.test.ts one for one, so a change to either client's * rounding shows up as a disagreement here rather than as a drop that lands * one row off on one platform only. diff --git a/android/app/src/test/java/com/fabledsword/minstrel/playlists/data/PlaylistTrackAvailabilityTest.kt b/android/app/src/test/java/com/fabledsword/minstrel/playlists/data/PlaylistTrackAvailabilityTest.kt index 318e7e05..ae19726f 100644 --- a/android/app/src/test/java/com/fabledsword/minstrel/playlists/data/PlaylistTrackAvailabilityTest.kt +++ b/android/app/src/test/java/com/fabledsword/minstrel/playlists/data/PlaylistTrackAvailabilityTest.kt @@ -9,7 +9,7 @@ import kotlin.test.assertTrue /** * A playlist row can outlive its audio two ways — the track was removed * from the library, or the track is still there but its file is missing - * (#2527). Both must be unplayable, and neither may be silently dropped + *. Both must be unplayable, and neither may be silently dropped * from the list the user curated. */ class PlaylistTrackAvailabilityTest { diff --git a/android/app/src/test/java/com/fabledsword/minstrel/settings/data/NormalizationRepositoryTest.kt b/android/app/src/test/java/com/fabledsword/minstrel/settings/data/NormalizationRepositoryTest.kt index 6853887d..f47f0160 100644 --- a/android/app/src/test/java/com/fabledsword/minstrel/settings/data/NormalizationRepositoryTest.kt +++ b/android/app/src/test/java/com/fabledsword/minstrel/settings/data/NormalizationRepositoryTest.kt @@ -17,7 +17,7 @@ import retrofit2.Retrofit import java.io.IOException /** - * The normalization preference is written offline-first (rule 100): the + * The normalization preference is written offline-first: the * device shows the change at once, and a change the server has not seen * yet is never overwritten or reordered. */ diff --git a/android/app/src/test/java/com/fabledsword/minstrel/shared/UpdateVeilControllerTest.kt b/android/app/src/test/java/com/fabledsword/minstrel/shared/UpdateVeilControllerTest.kt index 58c98cf6..733fc8e4 100644 --- a/android/app/src/test/java/com/fabledsword/minstrel/shared/UpdateVeilControllerTest.kt +++ b/android/app/src/test/java/com/fabledsword/minstrel/shared/UpdateVeilControllerTest.kt @@ -30,7 +30,7 @@ private const val DRAIN_MS = 3_000L /** * The veil's job is to go up only when content actually changes, and then to * stay up until the screen has stopped moving. Each test pins one of the ways - * the original fixed-delay implementation got that wrong (issue #2327). + * a fixed-delay veil gets that wrong. * * The controller is built on `backgroundScope` throughout: its consumer * loop runs forever, so hanging it off the test's own scope would stop @@ -40,8 +40,7 @@ private const val DRAIN_MS = 3_000L * `advanceTimeBy`: **`advanceUntilIdle()` is useless here.** It advances * only while *foreground* work remains, and everything this controller * does lives in `backgroundScope` — so it returns having run nothing, and - * assertions land on a session that never started (CI run 3163 failed all - * seven of these with "expected 3, actual 0" and friends). Drive the clock + * assertions land on a session that never started. Drive the clock * deliberately instead; don't "simplify" these back to advanceUntilIdle. */ @OptIn(ExperimentalCoroutinesApi::class) diff --git a/android/app/src/test/java/com/fabledsword/minstrel/theme/BundledFontsTest.kt b/android/app/src/test/java/com/fabledsword/minstrel/theme/BundledFontsTest.kt index e061ba24..20ad44d3 100644 --- a/android/app/src/test/java/com/fabledsword/minstrel/theme/BundledFontsTest.kt +++ b/android/app/src/test/java/com/fabledsword/minstrel/theme/BundledFontsTest.kt @@ -9,11 +9,11 @@ import kotlin.test.assertTrue * Guards that the typefaces ship inside the APK instead of being fetched at * runtime. * - * Until 2026-09-09 these were resolved through the Play Services font - * provider. That needs a network the deployed app is not guaranteed, and a - * provider that devices without Play Services do not have at all. Both - * failures are silent — text just renders in the platform default, which - * reads as a styling regression rather than a missing dependency. + * Resolving them through the Play Services font provider needs a network + * the deployed app is not guaranteed, and a provider that devices without + * Play Services do not have at all. Both failures are silent — text just + * renders in the platform default, which reads as a styling regression + * rather than a missing dependency. * * Expectations are read out of Typography.kt itself rather than hardcoded, so * this cannot drift away from what the app actually declares: adding a face diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml index a551209c..1f6a799d 100644 --- a/android/gradle/libs.versions.toml +++ b/android/gradle/libs.versions.toml @@ -5,7 +5,7 @@ # - Kotlin 2.3.x: AGP 9's built-in Kotlin path; the older kotlin-android # plugin can't cast AGP 9's ApplicationExtension to the removed # BaseExtension, and KSP 1.x isn't compatible with built-in Kotlin -# - KSP 2.3.x (PR #2674, merged Oct 2025): adds AGP 9 built-in Kotlin +# - KSP 2.3.x: adds AGP 9 built-in Kotlin # support, so we don't need the kotlin-android plugin at all agp = "9.0.1" kotlin = "2.3.21"